Initial commit.
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..2f0a35f
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,12 @@
+# Names should be added to this file with this pattern:
+#
+# For individuals:
+#   Name <email address>
+#
+# For organizations:
+#   Organization <fnmatch pattern>
+#
+# See python fnmatch module documentation for more information.
+
+Foxit Software Inc <*@foxitsoftware.com>
+Google Inc. <*@google.com>
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8b4ed6d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,27 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/core/include/fdrm/fx_crypt.h b/core/include/fdrm/fx_crypt.h
new file mode 100644
index 0000000..5e0b786
--- /dev/null
+++ b/core/include/fdrm/fx_crypt.h
@@ -0,0 +1,43 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_CRYPT_H_

+#define _FX_CRYPT_H_

+#ifdef __cplusplus

+extern "C" {

+#endif

+void CRYPT_ArcFourCryptBlock(FX_LPBYTE data, FX_DWORD size, FX_LPCBYTE key, FX_DWORD keylen);

+void CRYPT_ArcFourSetup(FX_LPVOID context, FX_LPCBYTE key, FX_DWORD length);

+void CRYPT_ArcFourCrypt(FX_LPVOID context, FX_LPBYTE data, FX_DWORD size);

+void CRYPT_AESSetKey(FX_LPVOID context, FX_DWORD blocklen, FX_LPCBYTE key, FX_DWORD keylen, FX_BOOL bEncrypt);

+void CRYPT_AESSetIV(FX_LPVOID context, FX_LPCBYTE iv);

+void CRYPT_AESDecrypt(FX_LPVOID context, FX_LPBYTE dest, FX_LPCBYTE src, FX_DWORD size);

+void CRYPT_AESEncrypt(FX_LPVOID context, FX_LPBYTE dest, FX_LPCBYTE src, FX_DWORD size);

+void CRYPT_MD5Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[16]);

+void CRYPT_MD5Start(FX_LPVOID context);

+void CRYPT_MD5Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size);

+void CRYPT_MD5Finish(FX_LPVOID context, FX_BYTE digest[16]);

+void CRYPT_SHA1Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[20]);

+void CRYPT_SHA1Start(FX_LPVOID context);

+void CRYPT_SHA1Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size);

+void CRYPT_SHA1Finish(FX_LPVOID context, FX_BYTE digest[20]);

+void CRYPT_SHA256Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[32]);

+void CRYPT_SHA256Start(FX_LPVOID context);

+void CRYPT_SHA256Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size);

+void CRYPT_SHA256Finish(FX_LPVOID context, FX_BYTE digest[32]);

+void CRYPT_SHA384Start(FX_LPVOID context);

+void CRYPT_SHA384Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size);

+void CRYPT_SHA384Finish(FX_LPVOID context, FX_BYTE digest[48]);

+void CRYPT_SHA384Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[48]);

+void CRYPT_SHA512Start(FX_LPVOID context);

+void CRYPT_SHA512Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size);

+void CRYPT_SHA512Finish(FX_LPVOID context, FX_BYTE digest[64]);

+void CRYPT_SHA512Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[64]);

+void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(FX_LPCBYTE pData, FX_DWORD size, FX_LPBYTE data_buf, FX_DWORD& data_len));

+#ifdef __cplusplus

+};

+#endif

+#endif

diff --git a/core/include/fpdfapi/fpdf_module.h b/core/include/fpdfapi/fpdf_module.h
new file mode 100644
index 0000000..bc11a96
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_module.h
@@ -0,0 +1,205 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_MODULE_

+#define _FPDF_MODULE_

+#ifndef _FXCRT_EXTENSION_

+#include "../fxcrt/fx_ext.h"

+#endif

+class CPDF_ModuleMgr;

+class CPDF_PageModuleDef;

+class CPDF_RenderModuleDef;

+class CPDF_SecurityHandler;

+class CCodec_ModuleMgr;

+class CPDF_Dictionary;

+class ICodec_JpegModule;

+class ICodec_JpxModule;

+class ICodec_FaxModule;

+class ICodec_Jbig2Module;

+class ICodec_IccModule;

+class ICodec_FlateModule;

+#define ADDIN_NAME_CJK			"Eastern Asian Language Support"

+#define ADDIN_NAME_DECODER		"JPEG2000 and JBIG2 Image Decoders"

+class CPDF_ModuleMgr : public CFX_Object

+{

+public:

+

+    static void	Create();

+

+    static CPDF_ModuleMgr*	Get();

+

+    static void	Destroy();

+

+

+

+    void		SetCodecModule(CCodec_ModuleMgr* pModule)

+    {

+        m_pCodecModule = pModule;

+    }

+    CCodec_ModuleMgr*		GetCodecModule()

+    {

+        return m_pCodecModule;

+    }

+

+    void		InitPageModule();

+

+    void		InitRenderModule();

+

+

+    void		SetModulePath(FX_LPCSTR module_name, FX_LPCSTR path);

+

+    CFX_ByteString GetModuleFilePath(FX_LPCSTR module_name, FX_LPCSTR name);

+

+    void		SetDownloadCallback(FX_BOOL (*callback)(FX_LPCSTR module_name));

+

+    FX_BOOL		DownloadModule(FX_LPCSTR module_name);

+

+    void		NotifyModuleAvailable(FX_LPCSTR module_name);

+

+

+

+    CPDF_RenderModuleDef*	GetRenderModule() const

+    {

+        return m_pRenderModule;

+    }

+

+    CPDF_PageModuleDef*		GetPageModule() const

+    {

+        return m_pPageModule;

+    }

+

+

+

+

+    void					LoadEmbeddedGB1CMaps();

+

+    void					LoadEmbeddedCNS1CMaps();

+

+    void					LoadEmbeddedJapan1CMaps();

+

+    void					LoadEmbeddedKorea1CMaps();

+

+    ICodec_FaxModule*		GetFaxModule();

+    ICodec_JpegModule*		GetJpegModule();

+    ICodec_JpxModule*		GetJpxModule();

+    ICodec_Jbig2Module*		GetJbig2Module();

+    ICodec_IccModule*		GetIccModule();

+    ICodec_FlateModule*		GetFlateModule();

+

+    void					RegisterSecurityHandler(FX_LPCSTR name, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param);

+

+    CPDF_SecurityHandler*	CreateSecurityHandler(FX_LPCSTR name);

+

+    void					SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback);

+

+    FX_LPVOID				GetPrivateData(FX_LPVOID module_id);

+

+    int						m_FileBufSize;

+protected:

+

+    CPDF_ModuleMgr();

+

+    ~CPDF_ModuleMgr();

+    void					Initialize();

+

+    void					InitModules();

+

+

+

+    CCodec_ModuleMgr*		m_pCodecModule;

+

+    CPDF_RenderModuleDef*	m_pRenderModule;

+

+    CPDF_PageModuleDef*		m_pPageModule;

+

+

+    FX_BOOL (*m_pDownloadCallback)(FX_LPCSTR module_name);

+

+    CFX_ByteString			m_DefaultModulePath;

+

+    CFX_CMapByteStringToPtr	m_ModulePathList;

+

+    CFX_MapByteStringToPtr	m_SecurityHandlerMap;

+

+    CFX_PrivateData			m_privateData;

+};

+class CPDF_Document;

+class CPDF_DocPageData;

+class CPDF_FontGlobals;

+class IPDF_FontMgr;

+class IPDF_FontMapper;

+class CPDF_ColorSpace;

+class CPDF_PageModuleDef : public CFX_Object

+{

+public:

+    virtual ~CPDF_PageModuleDef() {}

+

+    virtual CPDF_DocPageData*	CreateDocData(CPDF_Document* pDoc)

+    {

+        return NULL;

+    }

+

+    virtual void				ReleaseDoc(CPDF_Document*) {}

+    virtual void				ClearDoc(CPDF_Document*) {}

+

+    virtual CPDF_FontGlobals*	GetFontGlobals()

+    {

+        return NULL;

+    }

+

+    virtual void				ClearStockFont(CPDF_Document* pDoc) {}

+

+    virtual void				NotifyCJKAvailable() {}

+

+    virtual CPDF_ColorSpace*	GetStockCS(int family)

+    {

+        return NULL;

+    }

+};

+class CPDF_PageObjects;

+class CFX_AffineMatrix;

+class CPDF_RenderOptions;

+class CPDF_Page;

+class CPDF_DocRenderData;

+class CPDF_PageRenderCache;

+class CFX_BitmapDevice;

+class CPDF_Stream;

+class CFX_DIBSource;

+class CPDF_RenderConfig;

+class CPDF_Image;

+class CPDF_RenderModuleDef : public CFX_Object

+{

+public:

+    virtual ~CPDF_RenderModuleDef() {}

+

+    virtual CPDF_DocRenderData*	CreateDocData(CPDF_Document* pDoc)

+    {

+        return NULL;

+    }

+

+    virtual void	DestroyDocData(CPDF_DocRenderData*) {}

+    virtual void	ClearDocData(CPDF_DocRenderData*) {}

+

+    virtual CPDF_DocRenderData* GetRenderData()

+    {

+        return NULL;

+    }

+

+    virtual CPDF_PageRenderCache*	CreatePageCache(CPDF_Page* pPage)

+    {

+        return NULL;

+    }

+

+    virtual void	DestroyPageCache(CPDF_PageRenderCache*) {}

+

+    virtual void	NotifyDecoderAvailable() {}

+

+    virtual CPDF_RenderConfig* GetConfig()

+    {

+        return NULL;

+    }

+};

+#endif

diff --git a/core/include/fpdfapi/fpdf_objects.h b/core/include/fpdfapi/fpdf_objects.h
new file mode 100644
index 0000000..e67144b
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_objects.h
@@ -0,0 +1,785 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_OBJECTS_

+#define _FPDF_OBJECTS_

+#ifndef _FXCRT_EXTENSION_

+#include "../fxcrt/fx_ext.h"

+#endif

+class CPDF_Document;

+class CPDF_IndirectObjects;

+class CPDF_Null;

+class CPDF_Boolean;

+class CPDF_Number;

+class CPDF_String;

+class CPDF_Stream;

+class CPDF_StreamAcc;

+class CPDF_StreamFilter;

+class CPDF_Array;

+class CPDF_Dictionary;

+class CPDF_Reference;

+class IPDF_DocParser;

+class IFX_FileRead;

+class CPDF_CryptoHandler;

+#define PDFOBJ_INVALID		0

+#define	PDFOBJ_BOOLEAN		1

+#define PDFOBJ_NUMBER		2

+#define PDFOBJ_STRING		3

+#define PDFOBJ_NAME			4

+#define PDFOBJ_ARRAY		5

+#define PDFOBJ_DICTIONARY	6

+#define PDFOBJ_STREAM		7

+#define PDFOBJ_NULL			8

+#define PDFOBJ_REFERENCE	9

+typedef IFX_FileStream* (*FPDF_LPFCloneStreamCallback)(CPDF_Stream *pStream, FX_LPVOID pUserData);

+class CPDF_Object : public CFX_Object

+{

+public:

+

+    int						GetType() const

+    {

+        return m_Type;

+    }

+

+    FX_DWORD				GetObjNum() const

+    {

+        return m_ObjNum;

+    }

+

+    FX_BOOL					IsIdentical(CPDF_Object* pObj) const;

+

+    CPDF_Object*			Clone(FX_BOOL bDirect = FALSE) const;

+

+    CPDF_Object*			CloneRef(CPDF_IndirectObjects* pObjs) const;

+

+    CPDF_Object*			GetDirect() const;

+

+    void					Release();

+

+    CFX_ByteString			GetString() const;

+

+    CFX_ByteStringC			GetConstString() const;

+

+    CFX_WideString			GetUnicodeText(CFX_CharMap* pCharMap = NULL) const;

+

+    FX_FLOAT				GetNumber() const;

+

+    FX_FLOAT				GetNumber16() const;

+

+    int						GetInteger() const;

+

+    CPDF_Dictionary*		GetDict() const;

+

+    CPDF_Array*				GetArray() const;

+

+    void					SetString(const CFX_ByteString& str);

+

+    void					SetUnicodeText(FX_LPCWSTR pUnicodes, int len = -1);

+

+    int						GetDirectType() const;

+

+    FX_BOOL					IsModified() const

+    {

+        return FALSE;

+    }

+protected:

+    FX_DWORD				m_Type;

+    CPDF_Object()

+    {

+        m_ObjNum = 0;

+    }

+

+    FX_DWORD 				m_ObjNum;

+

+    void					Destroy();

+

+

+    ~CPDF_Object() {}

+    friend class			CPDF_IndirectObjects;

+    friend class			CPDF_Parser;

+    friend class			CPDF_SyntaxParser;

+private:

+    CPDF_Object(const CPDF_Object& src) {}

+    CPDF_Object* CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const;

+};

+class CPDF_Boolean : public CPDF_Object

+{

+public:

+

+    static CPDF_Boolean*	Create(FX_BOOL value)

+    {

+        return FX_NEW CPDF_Boolean(value);

+    }

+

+    CPDF_Boolean()

+    {

+        m_Type = PDFOBJ_BOOLEAN;

+    }

+

+    CPDF_Boolean(FX_BOOL value)

+    {

+        m_Type = PDFOBJ_BOOLEAN;

+        m_bValue = value;

+    }

+

+    FX_BOOL					Identical(CPDF_Boolean* pOther) const

+    {

+        return m_bValue == pOther->m_bValue;

+    }

+protected:

+

+    FX_BOOL					m_bValue;

+    friend class			CPDF_Object;

+};

+class CPDF_Number : public CPDF_Object

+{

+public:

+

+    static CPDF_Number*		Create(int value)

+    {

+        return FX_NEW CPDF_Number(value);

+    }

+

+    static CPDF_Number*		Create(FX_FLOAT value)

+    {

+        return FX_NEW CPDF_Number(value);

+    }

+

+    static CPDF_Number*		Create(FX_BSTR str)

+    {

+        return FX_NEW CPDF_Number(str);

+    }

+

+    static CPDF_Number*		Create(FX_BOOL bInteger, void* pData)

+    {

+        return FX_NEW CPDF_Number(bInteger, pData);

+    }

+

+    CPDF_Number()

+    {

+        m_Type = PDFOBJ_NUMBER;

+    }

+

+    CPDF_Number(FX_BOOL bInteger, void* pData);

+

+    CPDF_Number(int value);

+

+    CPDF_Number(FX_FLOAT value);

+

+    CPDF_Number(FX_BSTR str);

+

+    FX_BOOL					Identical(CPDF_Number* pOther) const;

+

+    CFX_ByteString			GetString() const;

+

+    void					SetString(FX_BSTR str);

+

+    FX_BOOL					IsInteger() const

+    {

+        return m_bInteger;

+    }

+

+    int						GetInteger() const

+    {

+        return m_bInteger ? m_Integer : (int)m_Float;

+    }

+

+    FX_FLOAT				GetNumber() const

+    {

+        return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;

+    }

+

+    void					SetNumber(FX_FLOAT value);

+

+    FX_FLOAT			GetNumber16() const

+    {

+        return GetNumber();

+    }

+

+    FX_FLOAT				GetFloat() const

+    {

+        return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;

+    }

+protected:

+

+    FX_BOOL					m_bInteger;

+

+    union {

+

+        int					m_Integer;

+

+        FX_FLOAT			m_Float;

+    };

+    friend class			CPDF_Object;

+};

+class CPDF_String : public CPDF_Object

+{

+public:

+

+    static CPDF_String*		Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE)

+    {

+        return FX_NEW CPDF_String(str, bHex);

+    }

+

+    static CPDF_String*		Create(const CFX_WideString& str)

+    {

+        return FX_NEW CPDF_String(str);

+    }

+

+    CPDF_String()

+    {

+        m_Type = PDFOBJ_STRING;

+        m_bHex = FALSE;

+    }

+

+    CPDF_String(const CFX_ByteString& str, FX_BOOL bHex = FALSE) : m_String(str)

+    {

+        m_Type = PDFOBJ_STRING;

+        m_bHex = bHex;

+    }

+

+    CPDF_String(const CFX_WideString& str);

+

+    CFX_ByteString&			GetString()

+    {

+        return m_String;

+    }

+

+    FX_BOOL					Identical(CPDF_String* pOther) const

+    {

+        return m_String == pOther->m_String;

+    }

+

+    FX_BOOL					IsHex() const

+    {

+        return m_bHex;

+    }

+protected:

+

+    CFX_ByteString			m_String;

+

+    FX_BOOL					m_bHex;

+    friend class			CPDF_Object;

+};

+class CPDF_Name : public CPDF_Object

+{

+public:

+

+    static CPDF_Name*		Create(const CFX_ByteString& str)

+    {

+        return FX_NEW CPDF_Name(str);

+    }

+

+    static CPDF_Name*		Create(FX_BSTR str)

+    {

+        return FX_NEW CPDF_Name(str);

+    }

+

+    static CPDF_Name*		Create(FX_LPCSTR str)

+    {

+        return FX_NEW CPDF_Name(str);

+    }

+

+    CPDF_Name(const CFX_ByteString& str) : m_Name(str)

+    {

+        m_Type = PDFOBJ_NAME;

+    }

+

+    CPDF_Name(FX_BSTR str) : m_Name(str)

+    {

+        m_Type = PDFOBJ_NAME;

+    }

+

+    CPDF_Name(FX_LPCSTR str) : m_Name(str)

+    {

+        m_Type = PDFOBJ_NAME;

+    }

+

+    CFX_ByteString&			GetString()

+    {

+        return m_Name;

+    }

+

+    FX_BOOL					Identical(CPDF_Name* pOther) const

+    {

+        return m_Name == pOther->m_Name;

+    }

+protected:

+

+    CFX_ByteString			m_Name;

+    friend class			CPDF_Object;

+};

+class CPDF_Array : public CPDF_Object

+{

+public:

+

+    static CPDF_Array*		Create()

+    {

+        return FX_NEW CPDF_Array();

+    }

+

+    CPDF_Array()

+    {

+        m_Type = PDFOBJ_ARRAY;

+    }

+

+    FX_DWORD				GetCount() const

+    {

+        return m_Objects.GetSize();

+    }

+

+    CPDF_Object*			GetElement(FX_DWORD index) const;

+

+    CPDF_Object*			GetElementValue(FX_DWORD index) const;

+

+

+

+    CFX_AffineMatrix		GetMatrix();

+

+    CFX_FloatRect			GetRect();

+

+

+

+

+    CFX_ByteString			GetString(FX_DWORD index) const;

+

+    CFX_ByteStringC			GetConstString(FX_DWORD index) const;

+

+    int						GetInteger(FX_DWORD index) const;

+

+    FX_FLOAT				GetNumber(FX_DWORD index) const;

+

+    CPDF_Dictionary*		GetDict(FX_DWORD index) const;

+

+    CPDF_Stream*			GetStream(FX_DWORD index) const;

+

+    CPDF_Array*				GetArray(FX_DWORD index) const;

+

+    FX_FLOAT				GetFloat(FX_DWORD index) const

+    {

+        return GetNumber(index);

+    }

+

+

+

+

+    void					SetAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);

+

+

+    void					InsertAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);

+

+    void					RemoveAt(FX_DWORD index);

+

+

+    void					Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);

+

+

+

+    void					AddNumber(FX_FLOAT f);

+

+    void					AddInteger(int i);

+

+    void					AddString(const CFX_ByteString& str);

+

+    void					AddName(const CFX_ByteString& str);

+

+    void					AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);

+

+    void					AddReference(CPDF_IndirectObjects* pDoc, CPDF_Object* obj)

+    {

+        AddReference(pDoc, obj->GetObjNum());

+    }

+

+

+    FX_FLOAT			GetNumber16(FX_DWORD index) const

+    {

+        return GetNumber(index);

+    }

+

+    void					AddNumber16(FX_FLOAT value)

+    {

+        AddNumber(value);

+    }

+

+    FX_BOOL					Identical(CPDF_Array* pOther) const;

+protected:

+

+    ~CPDF_Array();

+

+    CFX_PtrArray			m_Objects;

+    friend class			CPDF_Object;

+};

+class CPDF_Dictionary : public CPDF_Object

+{

+public:

+

+    static CPDF_Dictionary*	Create()

+    {

+        return FX_NEW CPDF_Dictionary();

+    }

+

+    CPDF_Dictionary()

+    {

+        m_Type = PDFOBJ_DICTIONARY;

+    }

+

+

+

+    CPDF_Object*			GetElement(FX_BSTR key) const;

+

+    CPDF_Object*			GetElementValue(FX_BSTR key) const;

+

+

+

+

+

+    CFX_ByteString			GetString(FX_BSTR key) const;

+

+    CFX_ByteStringC			GetConstString(FX_BSTR key) const;

+

+    CFX_ByteString			GetString(FX_BSTR key, FX_BSTR default_str) const;

+

+    CFX_ByteStringC			GetConstString(FX_BSTR key, FX_BSTR default_str) const;

+

+    CFX_WideString			GetUnicodeText(FX_BSTR key, CFX_CharMap* pCharMap = NULL) const;

+

+    int						GetInteger(FX_BSTR key) const;

+

+    int						GetInteger(FX_BSTR key, int default_int) const;

+

+    FX_BOOL					GetBoolean(FX_BSTR key, FX_BOOL bDefault = FALSE) const;

+

+    FX_FLOAT				GetNumber(FX_BSTR key) const;

+

+    CPDF_Dictionary*		GetDict(FX_BSTR key) const;

+

+    CPDF_Stream*			GetStream(FX_BSTR key) const;

+

+    CPDF_Array*				GetArray(FX_BSTR key) const;

+

+    CFX_FloatRect			GetRect(FX_BSTR key) const;

+

+    CFX_AffineMatrix		GetMatrix(FX_BSTR key) const;

+

+    FX_FLOAT				GetFloat(FX_BSTR key) const

+    {

+        return GetNumber(key);

+    }

+

+

+    FX_BOOL					KeyExist(FX_BSTR key) const;

+

+    FX_POSITION				GetStartPos() const;

+

+    CPDF_Object*			GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const;

+

+    void					SetAt(FX_BSTR key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);

+

+

+

+    void					SetAtName(FX_BSTR key, const CFX_ByteString& name);

+

+

+    void					SetAtString(FX_BSTR key, const CFX_ByteString& string);

+

+

+    void					SetAtInteger(FX_BSTR key, int i);

+

+

+    void					SetAtNumber(FX_BSTR key, FX_FLOAT f);

+

+    void					SetAtReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);

+

+    void					SetAtReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)

+    {

+        SetAtReference(key, pDoc, obj->GetObjNum());

+    }

+

+    void					AddReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);

+

+    void					AddReference(FX_BSTR key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)

+    {

+        AddReference(key, pDoc, obj->GetObjNum());

+    }

+

+    void					SetAtRect(FX_BSTR key, const CFX_FloatRect& rect);

+

+    void					SetAtMatrix(FX_BSTR key, const CFX_AffineMatrix& matrix);

+

+    void					SetAtBoolean(FX_BSTR key, FX_BOOL bValue);

+

+

+

+    void					RemoveAt(FX_BSTR key);

+

+

+    void					ReplaceKey(FX_BSTR oldkey, FX_BSTR newkey);

+

+    FX_BOOL					Identical(CPDF_Dictionary* pDict) const;

+

+    int						GetCount() const

+    {

+        return m_Map.GetCount();

+    }

+

+    void					AddValue(FX_BSTR key, CPDF_Object* pObj);

+protected:

+

+    ~CPDF_Dictionary();

+

+    CFX_CMapByteStringToPtr	m_Map;

+

+    friend class			CPDF_Object;

+};

+class CPDF_Stream : public CPDF_Object

+{

+public:

+

+    static CPDF_Stream*		Create(FX_LPBYTE pData, FX_DWORD size, CPDF_Dictionary* pDict)

+    {

+        return FX_NEW CPDF_Stream(pData, size, pDict);

+    }

+

+    CPDF_Stream(FX_LPBYTE pData, FX_DWORD size, CPDF_Dictionary* pDict);

+

+    CPDF_Dictionary*		GetDict() const

+    {

+        return m_pDict;

+    }

+

+    void					SetData(FX_LPCBYTE pData, FX_DWORD size, FX_BOOL bCompressed, FX_BOOL bKeepBuf);

+

+    void					InitStream(FX_BYTE* pData, FX_DWORD size, CPDF_Dictionary* pDict);

+

+    void					InitStream(IFX_FileRead *pFile, CPDF_Dictionary* pDict);

+

+    FX_BOOL					Identical(CPDF_Stream* pOther) const;

+

+    CPDF_StreamFilter*		GetStreamFilter(FX_BOOL bRaw = FALSE) const;

+

+

+

+    FX_DWORD				GetRawSize() const

+    {

+        return m_dwSize;

+    }

+

+    FX_BOOL					ReadRawData(FX_FILESIZE start_pos, FX_LPBYTE pBuf, FX_DWORD buf_size) const;

+

+

+    FX_BOOL					IsMemoryBased() const

+    {

+        return m_GenNum == (FX_DWORD) - 1;

+    }

+

+    CPDF_Stream*			Clone(FX_BOOL bDirect, FPDF_LPFCloneStreamCallback lpfCallback, FX_LPVOID pUserData) const;

+protected:

+

+    ~CPDF_Stream();

+

+    CPDF_Dictionary*		m_pDict;

+

+    FX_DWORD				m_dwSize;

+

+    FX_DWORD				m_GenNum;

+

+    union {

+

+        FX_LPBYTE			m_pDataBuf;

+

+        IFX_FileRead*		m_pFile;

+    };

+

+    FX_FILESIZE				m_FileOffset;

+

+    CPDF_CryptoHandler*		m_pCryptoHandler;

+

+    void					InitStream(CPDF_Dictionary* pDict);

+    friend class			CPDF_Object;

+    friend class			CPDF_StreamAcc;

+    friend class			CPDF_AttachmentAcc;

+};

+class CPDF_StreamAcc : public CFX_Object

+{

+public:

+

+    CPDF_StreamAcc();

+

+    ~CPDF_StreamAcc();

+

+    void					LoadAllData(const CPDF_Stream* pStream, FX_BOOL bRawAccess = FALSE,

+                                        FX_DWORD estimated_size = 0, FX_BOOL bImageAcc = FALSE);

+

+    const CPDF_Stream*		GetStream() const

+    {

+        return m_pStream;

+    }

+

+    CPDF_Dictionary*		GetDict() const

+    {

+        return m_pStream->GetDict();

+    }

+

+    FX_LPCBYTE				GetData() const;

+

+    FX_DWORD				GetSize() const;

+

+    FX_LPBYTE				DetachData();

+

+    const CFX_ByteString&	GetImageDecoder()

+    {

+        return m_ImageDecoder;

+    }

+

+    const CPDF_Dictionary*	GetImageParam()

+    {

+        return m_pImageParam;

+    }

+protected:

+

+    FX_LPBYTE				m_pData;

+

+    FX_DWORD				m_dwSize;

+

+    FX_BOOL					m_bNewBuf;

+

+    CFX_ByteString			m_ImageDecoder;

+

+    CPDF_Dictionary*		m_pImageParam;

+

+    const CPDF_Stream*		m_pStream;

+

+    FX_LPBYTE				m_pSrcData;

+};

+CFX_DataFilter* FPDF_CreateFilter(FX_BSTR name, const CPDF_Dictionary* pParam, int width = 0, int height = 0);

+#define FPDF_FILTER_BUFFER_SIZE		20480

+class CPDF_StreamFilter : public CFX_Object

+{

+public:

+

+    ~CPDF_StreamFilter();

+

+    FX_DWORD			ReadBlock(FX_LPBYTE buffer, FX_DWORD size);

+

+    FX_DWORD			GetSrcPos()

+    {

+        return m_SrcOffset;

+    }

+

+    const CPDF_Stream*	GetStream()

+    {

+        return m_pStream;

+    }

+protected:

+

+    CPDF_StreamFilter() {}

+

+    FX_DWORD			ReadLeftOver(FX_LPBYTE buffer, FX_DWORD buf_size);

+

+    const CPDF_Stream*	m_pStream;

+

+    CFX_DataFilter*		m_pFilter;

+

+    CFX_BinaryBuf*		m_pBuffer;

+

+    FX_DWORD			m_BufOffset;

+

+    FX_DWORD			m_SrcOffset;

+

+    FX_BYTE				m_SrcBuffer[FPDF_FILTER_BUFFER_SIZE];

+    friend class CPDF_Stream;

+};

+class CPDF_Null : public CPDF_Object

+{

+public:

+

+    static CPDF_Null*		Create()

+    {

+        return FX_NEW CPDF_Null();

+    }

+

+    CPDF_Null()

+    {

+        m_Type = PDFOBJ_NULL;

+    }

+};

+class CPDF_Reference : public CPDF_Object

+{

+public:

+

+    static CPDF_Reference*	Create(CPDF_IndirectObjects* pDoc, int objnum)

+    {

+        return FX_NEW CPDF_Reference(pDoc, objnum);

+    }

+

+    CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum)

+    {

+        m_Type = PDFOBJ_REFERENCE;

+        m_pObjList = pDoc;

+        m_RefObjNum = objnum;

+    }

+

+    CPDF_IndirectObjects*	GetObjList() const

+    {

+        return m_pObjList;

+    }

+

+    FX_DWORD				GetRefObjNum() const

+    {

+        return m_RefObjNum;

+    }

+

+    void					SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);

+

+    FX_BOOL					Identical(CPDF_Reference* pOther) const

+    {

+        return m_RefObjNum == pOther->m_RefObjNum;

+    }

+protected:

+

+    CPDF_IndirectObjects*	m_pObjList;

+

+    FX_DWORD				m_RefObjNum;

+    friend class			CPDF_Object;

+};

+class CPDF_IndirectObjects : public CFX_Object

+{

+public:

+

+    CPDF_IndirectObjects(IPDF_DocParser* pParser);

+

+    ~CPDF_IndirectObjects();

+

+    CPDF_Object*			GetIndirectObject(FX_DWORD objnum, struct PARSE_CONTEXT* pContext = NULL);

+

+    int						GetIndirectType(FX_DWORD objnum);

+

+    FX_DWORD				AddIndirectObject(CPDF_Object* pObj);

+

+    void					ReleaseIndirectObject(FX_DWORD objnum);

+

+    void					InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj);

+

+    FX_DWORD				GetLastObjNum() const;

+

+    FX_POSITION				GetStartPosition() const

+    {

+        return m_IndirectObjs.GetStartPosition();

+    }

+

+    void					GetNextAssoc(FX_POSITION& rPos, FX_DWORD& objnum, CPDF_Object*& pObject) const

+    {

+        m_IndirectObjs.GetNextAssoc(rPos, (void*&)objnum, (void*&)pObject);

+    }

+protected:

+

+    CFX_MapPtrToPtr			m_IndirectObjs;

+

+    IPDF_DocParser*			m_pParser;

+

+    FX_DWORD				m_LastObjNum;

+};

+#endif

diff --git a/core/include/fpdfapi/fpdf_page.h b/core/include/fpdfapi/fpdf_page.h
new file mode 100644
index 0000000..29b8c68
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_page.h
@@ -0,0 +1,249 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_PAGE_

+#define _FPDF_PAGE_

+#ifndef _FPDF_PARSER_

+#include "fpdf_parser.h"

+#endif

+#ifndef _FPDF_RESOURCE_

+#include "fpdf_resource.h"

+#endif

+#ifndef _FX_DIB_H_

+#include "../fxge/fx_dib.h"

+#endif

+class CPDF_PageObjects;

+class CPDF_Page;

+class CPDF_Form;

+class CPDF_ParseOptions;

+class CPDF_PageObject;

+class CPDF_PageRenderCache;

+class CPDF_StreamFilter;

+class CPDF_AllStates;

+class CPDF_ContentParser;

+class CPDF_StreamContentParser;

+class CPDF_ResourceNaming;

+#define PDFTRANS_GROUP			0x0100

+#define PDFTRANS_ISOLATED		0x0200

+#define PDFTRANS_KNOCKOUT		0x0400

+#define PDF_CONTENT_NOT_PARSED	0

+#define PDF_CONTENT_PARSING		1

+#define PDF_CONTENT_PARSED		2

+class CPDF_PageObjects : public CFX_Object

+{

+public:

+

+    CPDF_PageObjects(FX_BOOL bReleaseMembers = TRUE);

+

+    ~CPDF_PageObjects();

+

+

+

+

+    void				ContinueParse(IFX_Pause* pPause);

+

+    int					GetParseState() const

+    {

+        return m_ParseState;

+    }

+

+    FX_BOOL				IsParsed() const

+    {

+        return m_ParseState == PDF_CONTENT_PARSED;

+    }

+

+    int					EstimateParseProgress() const;

+

+

+

+

+    FX_POSITION			GetFirstObjectPosition() const

+    {

+        return m_ObjectList.GetHeadPosition();

+    }

+

+    FX_POSITION			GetLastObjectPosition() const

+    {

+        return m_ObjectList.GetTailPosition();

+    }

+

+    CPDF_PageObject*	GetNextObject(FX_POSITION& pos) const

+    {

+        return (CPDF_PageObject*)m_ObjectList.GetNext(pos);

+    }

+

+    CPDF_PageObject*	GetPrevObject(FX_POSITION& pos) const

+    {

+        return (CPDF_PageObject*)m_ObjectList.GetPrev(pos);

+    }

+

+    CPDF_PageObject*	GetObjectAt(FX_POSITION pos) const

+    {

+        return (CPDF_PageObject*)m_ObjectList.GetAt(pos);

+    }

+

+    FX_DWORD			CountObjects() const

+    {

+        return m_ObjectList.GetCount();

+    }

+

+    int					GetObjectIndex(CPDF_PageObject* pObj) const;

+

+    CPDF_PageObject*	GetObjectByIndex(int index) const;

+

+

+

+

+

+    FX_POSITION			InsertObject(FX_POSITION posInsertAfter, CPDF_PageObject* pNewObject);

+

+    void				Transform(const CFX_AffineMatrix& matrix);

+

+    FX_BOOL				BackgroundAlphaNeeded() const

+    {

+        return m_bBackgroundAlphaNeeded;

+    }

+

+    CFX_FloatRect		CalcBoundingBox() const;

+

+    CPDF_Dictionary*	m_pFormDict;

+

+    CPDF_Stream*		m_pFormStream;

+

+    CPDF_Document*		m_pDocument;

+

+    CPDF_Dictionary*	m_pPageResources;

+

+    CPDF_Dictionary*	m_pResources;

+

+    CFX_FloatRect		m_BBox;

+

+    int					m_Transparency;

+

+protected:

+    friend class		CPDF_ContentParser;

+    friend class		CPDF_StreamContentParser;

+    friend class		CPDF_AllStates;

+

+    CFX_PtrList			m_ObjectList;

+

+    FX_BOOL				m_bBackgroundAlphaNeeded;

+

+    FX_BOOL				m_bReleaseMembers;

+    void				LoadTransInfo();

+    void                ClearCacheObjects();

+

+    CPDF_ContentParser*	m_pParser;

+

+    FX_BOOL				m_ParseState;

+};

+class CPDF_Page : public CPDF_PageObjects, public CFX_PrivateData

+{

+public:

+

+    CPDF_Page();

+

+    ~CPDF_Page();

+

+    void				Load(CPDF_Document* pDocument, CPDF_Dictionary* pPageDict, FX_BOOL bPageCache = TRUE);

+

+    void				StartParse(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);

+

+    void				ParseContent(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);

+

+    void				GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos,

+                                         int xSize, int ySize, int iRotate) const;

+

+    FX_FLOAT			GetPageWidth() const

+    {

+        return m_PageWidth;

+    }

+

+    FX_FLOAT			GetPageHeight() const

+    {

+        return m_PageHeight;

+    }

+

+    CFX_FloatRect		GetPageBBox() const

+    {

+        return m_BBox;

+    }

+

+    const CFX_AffineMatrix&	GetPageMatrix() const

+    {

+        return m_PageMatrix;

+    }

+

+    CPDF_Object*		GetPageAttr(FX_BSTR name) const;

+

+

+

+    CPDF_PageRenderCache*	GetRenderCache() const

+    {

+        return m_pPageRender;

+    }

+

+    void				ClearRenderCache();

+

+protected:

+    friend class		CPDF_ContentParser;

+

+    FX_FLOAT			m_PageWidth;

+

+    FX_FLOAT			m_PageHeight;

+

+    CFX_AffineMatrix	m_PageMatrix;

+

+    CPDF_PageRenderCache*	m_pPageRender;

+};

+class CPDF_ParseOptions : public CFX_Object

+{

+public:

+

+    CPDF_ParseOptions();

+

+    FX_BOOL				m_bTextOnly;

+

+    FX_BOOL				m_bMarkedContent;

+

+    FX_BOOL				m_bSeparateForm;

+

+    FX_BOOL				m_bDecodeInlineImage;

+};

+class CPDF_Form : public CPDF_PageObjects

+{

+public:

+

+    CPDF_Form(CPDF_Document* pDocument, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream, CPDF_Dictionary* pParentResources = NULL);

+

+    ~CPDF_Form();

+

+    void				StartParse(CPDF_AllStates* pGraphicStates,  CFX_AffineMatrix* pParentMatrix,

+                                   CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);

+

+    void				ParseContent(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,

+                                     CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);

+

+    CPDF_Form*			Clone() const;

+};

+class CPDF_PageContentGenerate : public CFX_Object

+{

+public:

+    CPDF_PageContentGenerate(CPDF_Page* pPage);

+    ~CPDF_PageContentGenerate();

+    FX_BOOL InsertPageObject(CPDF_PageObject* pPageObject);

+    void GenerateContent();

+    void TransformContent(CFX_Matrix& matrix);

+protected:

+    void            ProcessImage(CFX_ByteTextBuf& buf, CPDF_ImageObject* pImageObj);

+    void            ProcessForm(CFX_ByteTextBuf& buf, FX_LPCBYTE data, FX_DWORD size, CFX_Matrix& matrix);

+    CFX_ByteString  RealizeResource(CPDF_Object* pResourceObj, const FX_CHAR* szType);

+private:

+    CPDF_Page*      m_pPage;

+    CPDF_Document*  m_pDocument;

+    CFX_PtrArray    m_pageObjects;

+};

+#endif

diff --git a/core/include/fpdfapi/fpdf_pageobj.h b/core/include/fpdfapi/fpdf_pageobj.h
new file mode 100644
index 0000000..1e82680
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_pageobj.h
@@ -0,0 +1,721 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_PAGEOBJ_H_

+#define _FPDF_PAGEOBJ_H_

+#ifndef _FPDF_RESOURCE_

+#include "fpdf_resource.h"

+#endif

+#ifndef _FX_GE_H_

+#include "../fxge/fx_ge.h"

+#endif

+class CPDF_Path;

+class CPDF_ClipPathData;

+class CPDF_ClipPath;

+class CPDF_ColorStateData;

+class CPDF_ColorState;

+class CPDF_GraphState;

+class CPDF_TextStateData;

+class CPDF_TextState;

+class CPDF_GeneralStateData;

+class CPDF_GeneralState;

+class CPDF_ContentMarkItem;

+class CPDF_ContentMark;

+class CPDF_GraphicStates;

+class CPDF_PageObject;

+class CPDF_TextObject;

+class CPDF_PathObject;

+class CPDF_ImageObject;

+class CPDF_ShadingObject;

+class CPDF_FormObject;

+class CPDF_InlineImages;

+typedef CFX_PathData CPDF_PathData;

+class CPDF_Path : public CFX_CountRef<CFX_PathData>

+{

+public:

+

+

+

+

+    int					GetPointCount()

+    {

+        return m_pObject->m_PointCount;

+    }

+

+    int					GetFlag(int index)

+    {

+        return m_pObject->m_pPoints[index].m_Flag;

+    }

+

+    FX_FLOAT			GetPointX(int index)

+    {

+        return m_pObject->m_pPoints[index].m_PointX;

+    }

+

+    FX_FLOAT			GetPointY(int index)

+    {

+        return m_pObject->m_pPoints[index].m_PointY;

+    }

+

+

+

+

+    FX_PATHPOINT*		GetPoints()

+    {

+        return m_pObject->m_pPoints;

+    }

+

+

+    CFX_FloatRect		GetBoundingBox() const

+    {

+        return m_pObject->GetBoundingBox();

+    }

+

+    CFX_FloatRect		GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const

+    {

+        return m_pObject->GetBoundingBox(line_width, miter_limit);

+    }

+

+    void				Transform(const CFX_AffineMatrix* pMatrix)

+    {

+        GetModify()->Transform(pMatrix);

+    }

+

+    void				Append(CPDF_Path src, const CFX_AffineMatrix* pMatrix)

+    {

+        m_pObject->Append(src.m_pObject, pMatrix);

+    }

+

+    void				AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top)

+    {

+        m_pObject->AppendRect(left, bottom, right, top);

+    }

+

+    FX_BOOL				IsRect() const

+    {

+        return m_pObject->IsRect();

+    }

+};

+class CPDF_ClipPathData : public CFX_Object

+{

+public:

+

+    CPDF_ClipPathData();

+

+    CPDF_ClipPathData(const CPDF_ClipPathData&);

+

+    ~CPDF_ClipPathData();

+

+    void				SetCount(int path_count, int text_count);

+public:

+

+    int					m_PathCount;

+

+    CPDF_Path*			m_pPathList;

+

+    FX_BYTE*			m_pTypeList;

+

+    int					m_TextCount;

+

+    CPDF_TextObject**	m_pTextList;

+};

+class CPDF_ClipPath : public CFX_CountRef<CPDF_ClipPathData>

+{

+public:

+

+    FX_DWORD			GetPathCount() const

+    {

+        return m_pObject->m_PathCount;

+    }

+

+    CPDF_Path			GetPath(int i) const

+    {

+        return m_pObject->m_pPathList[i];

+    }

+

+    int					GetClipType(int i) const

+    {

+        return m_pObject->m_pTypeList[i];

+    }

+

+    FX_DWORD			GetTextCount() const

+    {

+        return m_pObject->m_TextCount;

+    }

+

+    CPDF_TextObject*	GetText(int i) const

+    {

+        return m_pObject->m_pTextList[i];

+    }

+

+    CFX_FloatRect		GetClipBox() const;

+

+    void				AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);

+

+    void				DeletePath(int layer_index);

+

+    void				AppendTexts(CPDF_TextObject** pTexts, int count);

+

+    void				Transform(const CFX_AffineMatrix& matrix);

+};

+class CPDF_ColorStateData : public CFX_Object

+{

+public:

+

+    CPDF_ColorStateData() {}

+

+    CPDF_ColorStateData(const CPDF_ColorStateData& src);

+

+    void				Default();

+

+    CPDF_Color			m_FillColor;

+

+    FX_DWORD			m_FillRGB;

+

+    CPDF_Color			m_StrokeColor;

+

+    FX_DWORD			m_StrokeRGB;

+};

+class CPDF_ColorState : public CFX_CountRef<CPDF_ColorStateData>

+{

+public:

+

+    CPDF_Color*			GetFillColor() const

+    {

+        return m_pObject ? &m_pObject->m_FillColor : NULL;

+    }

+

+    CPDF_Color*			GetStrokeColor() const

+    {

+        return m_pObject ? &m_pObject->m_StrokeColor : NULL;

+    }

+

+    void				SetFillColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);

+

+    void				SetStrokeColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);

+

+    void				SetFillPattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);

+

+    void				SetStrokePattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);

+private:

+    void				SetColor(CPDF_Color& color, FX_DWORD& rgb, CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);

+};

+typedef CFX_GraphStateData CPDF_GraphStateData;

+class CPDF_GraphState : public CFX_CountRef<CFX_GraphStateData>

+{

+public:

+};

+class CPDF_TextStateData : public CFX_Object

+{

+public:

+

+    CPDF_TextStateData();

+

+    CPDF_TextStateData(const CPDF_TextStateData& src);

+

+    ~CPDF_TextStateData();

+

+    CPDF_Font*			m_pFont;

+

+    FX_FLOAT			m_FontSize;

+

+    FX_FLOAT			m_CharSpace;

+

+    FX_FLOAT			m_WordSpace;

+

+    FX_FLOAT		m_Matrix[4];

+

+    int					m_TextMode;

+

+    FX_FLOAT		m_CTM[4];

+};

+class CPDF_TextState : public CFX_CountRef<CPDF_TextStateData>

+{

+public:

+

+    CPDF_Font*			GetFont() const

+    {

+        return m_pObject->m_pFont;

+    }

+

+    void				SetFont(CPDF_Font* pFont);

+

+    FX_FLOAT			GetFontSize() const

+    {

+        return m_pObject->m_FontSize;

+    }

+

+    FX_FLOAT*			GetMatrix() const

+    {

+        return m_pObject->m_Matrix;

+    }

+

+

+

+    FX_FLOAT			GetFontSizeV() const;

+

+    FX_FLOAT			GetFontSizeH() const;

+

+    FX_FLOAT			GetBaselineAngle() const;

+

+    FX_FLOAT			GetShearAngle() const;

+

+};

+class CPDF_TransferFunc;

+class CPDF_GeneralStateData : public CFX_Object

+{

+public:

+

+    CPDF_GeneralStateData();

+

+    CPDF_GeneralStateData(const CPDF_GeneralStateData& src);

+    ~CPDF_GeneralStateData();

+

+    void				SetBlendMode(FX_BSTR blend_mode);

+

+    char				m_BlendMode[16];

+

+    int					m_BlendType;

+

+    CPDF_Object*		m_pSoftMask;

+

+    FX_FLOAT			m_SMaskMatrix[6];

+

+    FX_FLOAT			m_StrokeAlpha;

+

+    FX_FLOAT			m_FillAlpha;

+

+    CPDF_Object*		m_pTR;

+

+    CPDF_TransferFunc*	m_pTransferFunc;

+

+    CFX_Matrix			m_Matrix;

+

+    int					m_RenderIntent;

+

+    FX_BOOL				m_StrokeAdjust;

+

+    FX_BOOL				m_AlphaSource;

+

+    FX_BOOL				m_TextKnockout;

+

+    FX_BOOL				m_StrokeOP;

+

+    FX_BOOL				m_FillOP;

+

+    int					m_OPMode;

+

+    CPDF_Object*		m_pBG;

+

+    CPDF_Object*		m_pUCR;

+

+    CPDF_Object*		m_pHT;

+

+    FX_FLOAT			m_Flatness;

+

+    FX_FLOAT			m_Smoothness;

+};

+class CPDF_GeneralState : public CFX_CountRef<CPDF_GeneralStateData>

+{

+public:

+

+    void				SetRenderIntent(const CFX_ByteString& ri);

+

+    int					GetBlendType() const

+    {

+        return m_pObject ? m_pObject->m_BlendType : FXDIB_BLEND_NORMAL;

+    }

+

+    int					GetAlpha(FX_BOOL bStroke) const

+    {

+        return m_pObject ? FXSYS_round((bStroke ? m_pObject->m_StrokeAlpha : m_pObject->m_FillAlpha) * 255) : 255;

+    }

+};

+class CPDF_ContentMarkItem : public CFX_Object

+{

+public:

+

+    typedef enum {

+        None,

+        PropertiesDict,

+        DirectDict,

+        MCID

+    } ParamType;

+

+    CPDF_ContentMarkItem();

+

+    CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src);

+

+    ~CPDF_ContentMarkItem();

+

+    inline const CFX_ByteString&	GetName() const

+    {

+        return m_MarkName;

+    }

+

+    inline ParamType	GetParamType() const

+    {

+        return m_ParamType;

+    }

+

+    inline void*		GetParam() const

+    {

+        return m_pParam;

+    }

+

+    inline FX_BOOL		HasMCID() const;

+

+    inline void			SetName(const CFX_ByteString& name)

+    {

+        m_MarkName = name;

+    }

+

+    inline void			SetParam(ParamType type, void* param)

+    {

+        m_ParamType = type;

+        m_pParam = param;

+    }

+private:

+

+    CFX_ByteString		m_MarkName;

+

+    ParamType			m_ParamType;

+

+    void*				m_pParam;

+};

+class CPDF_ContentMarkData : public CFX_Object

+{

+public:

+

+    CPDF_ContentMarkData() { }

+

+    CPDF_ContentMarkData(const CPDF_ContentMarkData& src);

+

+    inline int			CountItems() const

+    {

+        return m_Marks.GetSize();

+    }

+

+    inline CPDF_ContentMarkItem&	GetItem(int index) const

+    {

+        return m_Marks[index];

+    }

+

+    int					GetMCID() const;

+

+    void				AddMark(const CFX_ByteString& name, CPDF_Dictionary* pDict, FX_BOOL bDictNeedClone);

+

+    void				DeleteLastMark();

+private:

+

+    CFX_ObjectArray<CPDF_ContentMarkItem>	m_Marks;

+};

+class CPDF_ContentMark : public CFX_CountRef<CPDF_ContentMarkData>

+{

+public:

+

+    int					GetMCID() const

+    {

+        return m_pObject ? m_pObject->GetMCID() : -1;

+    }

+

+    FX_BOOL				HasMark(FX_BSTR mark) const;

+

+    FX_BOOL				LookupMark(FX_BSTR mark, CPDF_Dictionary*& pDict) const;

+};

+#define PDFPAGE_TEXT		1

+#define PDFPAGE_PATH		2

+#define PDFPAGE_IMAGE		3

+#define PDFPAGE_SHADING		4

+#define PDFPAGE_FORM		5

+#define PDFPAGE_INLINES		6

+class CPDF_GraphicStates : public CFX_Object

+{

+public:

+

+    void				CopyStates(const CPDF_GraphicStates& src);

+

+    void				DefaultStates();

+

+    CPDF_ClipPath		m_ClipPath;

+

+    CPDF_GraphState		m_GraphState;

+

+    CPDF_ColorState		m_ColorState;

+

+    CPDF_TextState		m_TextState;

+

+    CPDF_GeneralState	m_GeneralState;

+};

+class CPDF_PageObject : public CPDF_GraphicStates

+{

+public:

+

+    static CPDF_PageObject* Create(int type);

+

+    void				Release();

+

+    CPDF_PageObject*	Clone() const;

+

+    void				Copy(const CPDF_PageObject* pSrcObject);

+

+    virtual void		Transform(const CFX_AffineMatrix& matrix) = 0;

+

+

+

+    void				RemoveClipPath();

+

+    void				AppendClipPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);

+

+    void				CopyClipPath(CPDF_PageObject* pObj);

+

+    void				TransformClipPath(CFX_AffineMatrix& matrix);

+

+    void				TransformGeneralState(CFX_AffineMatrix& matrix);

+

+

+    void				SetColorState(CPDF_ColorState state)

+    {

+        m_ColorState = state;

+    }

+

+    FX_RECT				GetBBox(const CFX_AffineMatrix* pMatrix) const;

+

+    int					m_Type;

+

+    FX_FLOAT			m_Left;

+

+    FX_FLOAT			m_Right;

+

+    FX_FLOAT			m_Top;

+

+    FX_FLOAT			m_Bottom;

+

+    CPDF_ContentMark	m_ContentMark;

+protected:

+

+    virtual void		CopyData(const CPDF_PageObject* pSrcObject) {}

+

+    void				RecalcBBox();

+

+    CPDF_PageObject() {}

+

+    virtual ~CPDF_PageObject() {}

+};

+struct CPDF_TextObjectItem : public CFX_Object {

+

+    FX_DWORD			m_CharCode;

+

+    FX_FLOAT			m_OriginX;

+

+    FX_FLOAT			m_OriginY;

+};

+class CPDF_TextObject : public CPDF_PageObject

+{

+public:

+

+    CPDF_TextObject();

+

+    virtual ~CPDF_TextObject();

+

+    int					CountItems() const

+    {

+        return m_nChars;

+    }

+

+    void				GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const;

+

+    int					CountChars() const;

+

+    void				GetCharInfo(int index, FX_DWORD& charcode, FX_FLOAT& kerning) const;

+    void				GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const;

+

+    void				GetCharRect(int index, CFX_FloatRect& rect) const;

+

+

+    FX_FLOAT			GetCharWidth(FX_DWORD charcode) const;

+    FX_FLOAT			GetSpaceCharWidth() const;

+

+    FX_FLOAT			GetPosX() const

+    {

+        return m_PosX;

+    }

+

+    FX_FLOAT			GetPosY() const

+    {

+        return m_PosY;

+    }

+

+    void				GetTextMatrix(CFX_AffineMatrix* pMatrix) const;

+

+    CPDF_Font*			GetFont() const

+    {

+        return m_TextState.GetFont();

+    }

+

+    FX_FLOAT			GetFontSize() const

+    {

+        return m_TextState.GetFontSize();

+    }

+

+    void				SetEmpty();

+

+    void				SetText(const CFX_ByteString& text);

+

+    void				SetText(CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);

+

+    void				SetText(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pKernings);

+

+    void				SetPosition(FX_FLOAT x, FX_FLOAT y);

+

+    void				SetTextState(CPDF_TextState TextState);

+    virtual void		Transform(const CFX_AffineMatrix& matrix);

+

+    void				CalcCharPos(FX_FLOAT* pPosArray) const;

+

+

+

+    void				SetData(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos, FX_FLOAT x, FX_FLOAT y);

+

+    void				GetData(int& nChars, FX_DWORD*& pCharCodes, FX_FLOAT*& pCharPos)

+    {

+        nChars = m_nChars;

+        pCharCodes = m_pCharCodes;

+        pCharPos = m_pCharPos;

+    }

+

+

+    void				RecalcPositionData()

+    {

+        CalcPositionData(NULL, NULL, 1);

+    }

+protected:

+    virtual void		CopyData(const CPDF_PageObject* pSrcObject);

+

+    FX_FLOAT			m_PosX;

+

+    FX_FLOAT			m_PosY;

+

+    int					m_nChars;

+

+    FX_DWORD*			m_pCharCodes;

+

+    FX_FLOAT*		m_pCharPos;

+

+    void				SetSegments(const CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);

+

+    void				CalcPositionData(FX_FLOAT* pTextAdvanceX, FX_FLOAT* pTextAdvanceY, FX_FLOAT horz_scale, int level = 0);

+    friend class		CPDF_StreamContentParser;

+    friend class		CPDF_RenderStatus;

+    friend class		CPDF_QuickDrawer;

+    friend class		CPDF_TextRenderer;

+    friend class		CTextPage;

+    friend class		CPDF_ContentGenerator;

+};

+class CPDF_PathObject : public CPDF_PageObject

+{

+public:

+

+    CPDF_PathObject()

+    {

+        m_Type = PDFPAGE_PATH;

+    }

+

+    virtual ~CPDF_PathObject() {}

+    virtual void		Transform(const CFX_AffineMatrix& maxtrix);

+

+    void				SetGraphState(CPDF_GraphState GraphState);

+

+    CPDF_Path			m_Path;

+

+    int					m_FillType;

+

+    FX_BOOL				m_bStroke;

+

+    CFX_AffineMatrix	m_Matrix;

+

+

+    void				CalcBoundingBox();

+protected:

+    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);

+};

+class CPDF_ImageObject : public CPDF_PageObject

+{

+public:

+

+    CPDF_ImageObject();

+

+    virtual ~CPDF_ImageObject();

+    virtual void		Transform(const CFX_AffineMatrix& matrix);

+

+    CPDF_Image*			m_pImage;

+

+    CFX_AffineMatrix	m_Matrix;

+

+    void				CalcBoundingBox();

+private:

+    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);

+};

+class CPDF_ShadingObject : public CPDF_PageObject

+{

+public:

+

+    CPDF_ShadingObject();

+

+    virtual ~CPDF_ShadingObject();

+

+    CPDF_ShadingPattern*	m_pShading;

+

+    CFX_AffineMatrix	m_Matrix;

+

+    CPDF_Page*			m_pPage;

+    virtual void		Transform(const CFX_AffineMatrix& matrix);

+

+    void				CalcBoundingBox();

+protected:

+    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);

+};

+class CPDF_FormObject : public CPDF_PageObject

+{

+public:

+

+    CPDF_FormObject()

+    {

+        m_Type = PDFPAGE_FORM;

+        m_pForm = NULL;

+    }

+

+    virtual ~CPDF_FormObject();

+    virtual void		Transform(const CFX_AffineMatrix& matrix);

+

+    CPDF_Form*			m_pForm;

+

+    CFX_AffineMatrix	m_FormMatrix;

+

+    void				CalcBoundingBox();

+protected:

+    virtual void		CopyData(const CPDF_PageObject* pSrcObjet);

+};

+class CPDF_InlineImages : public CPDF_PageObject

+{

+public:

+

+    CPDF_InlineImages();

+

+    virtual ~CPDF_InlineImages();

+

+    CPDF_Stream*		m_pStream;

+

+    CFX_DIBitmap*		m_pBitmap;

+

+    CFX_ArrayTemplate<CFX_AffineMatrix>	m_Matrices;

+

+    void				AddMatrix(CFX_AffineMatrix& matrix);

+protected:

+    virtual void		Transform(const CFX_AffineMatrix& matrix) {}

+    virtual void		CopyData(const CPDF_PageObject* pSrcObjet) {}

+};

+#endif

diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h
new file mode 100644
index 0000000..9d41539
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_parser.h
@@ -0,0 +1,1149 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_PARSER_

+#define _FPDF_PARSER_

+#ifndef _FX_BASIC_H_

+#include "../fxcrt/fx_ext.h"

+#endif

+#ifndef _FPDF_OBJECTS_

+#include "fpdf_objects.h"

+#endif

+class CPDF_Document;

+class IPDF_DocParser;

+class CPDF_Parser;

+class CPDF_SecurityHandler;

+class CPDF_StandardSecurityHandler;

+class CPDF_CryptoHandler;

+class CPDF_Object;

+class IFX_FileRead;

+class CFDF_Document;

+class CFDF_Parser;

+class CFX_Font;

+class CFX_AffineMatrix;

+class CFX_FloatRect;

+class CPDF_Point;

+class CPDF_DocPageData;

+class CPDF_DocRenderData;

+class CPDF_ModuleMgr;

+class CFX_DIBSource;

+class CPDF_Font;

+class CPDF_Image;

+class CPDF_ColorSpace;

+class CPDF_Pattern;

+class CPDF_FontEncoding;

+class CPDF_IccProfile;

+class CFX_PrivateData;

+#define FPDFPERM_PRINT			0x0004

+#define FPDFPERM_MODIFY			0x0008

+#define FPDFPERM_EXTRACT		0x0010

+#define FPDFPERM_ANNOT_FORM		0x0020

+#define FPDFPERM_FILL_FORM		0x0100

+#define FPDFPERM_EXTRACT_ACCESS	0x0200

+#define FPDFPERM_ASSEMBLE		0x0400

+#define FPDFPERM_PRINT_HIGH		0x0800

+#define FPDF_PAGE_MAX_NUM		0xFFFFF

+class IPDF_EnumPageHandler

+{

+public:

+

+    virtual FX_BOOL EnumPage(CPDF_Dictionary* pPageDict) = 0;

+};

+class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects

+{

+public:

+

+    CPDF_Document(IPDF_DocParser* pParser);

+

+    CPDF_Document();

+

+    ~CPDF_Document();

+

+    IPDF_DocParser*			GetParser() const

+    {

+        return m_pParser;

+    }

+

+    CPDF_Dictionary*		GetRoot() const

+    {

+        return m_pRootDict;

+    }

+

+    CPDF_Dictionary*		GetInfo() const

+    {

+        return m_pInfoDict;

+    }

+

+    void					GetID(CFX_ByteString& id1, CFX_ByteString& id2) const

+    {

+        id1 = m_ID1;

+        id2 = m_ID2;

+    }

+

+    int						GetPageCount() const;

+

+    CPDF_Dictionary*		GetPage(int iPage);

+

+    int						GetPageIndex(FX_DWORD objnum);

+

+    void					EnumPages(IPDF_EnumPageHandler* pHandler);

+

+    FX_DWORD				GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;

+

+    FX_BOOL					IsOwner() const;

+

+

+

+    CPDF_DocPageData*		GetPageData()

+    {

+        return GetValidatePageData();

+    }

+

+    void					ClearPageData();

+

+    void					RemoveColorSpaceFromPageData(CPDF_Object* pObject);

+

+

+    CPDF_DocRenderData*		GetRenderData()

+    {

+        return GetValidateRenderData();

+    }

+

+    void					ClearRenderData();

+

+    void					ClearRenderFont();

+

+

+    FX_BOOL					IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const;

+

+

+

+

+    CPDF_Font*				LoadFont(CPDF_Dictionary* pFontDict);

+

+    CPDF_Font*				FindFont(CPDF_Dictionary* pFontDict);

+

+    CPDF_ColorSpace*		LoadColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources = NULL);

+

+    CPDF_Pattern*			LoadPattern(CPDF_Object* pObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix = NULL);

+

+    CPDF_Image*				LoadImageF(CPDF_Object* pObj);

+

+    CPDF_StreamAcc*			LoadFontFile(CPDF_Stream* pStream);

+

+    CPDF_IccProfile*		LoadIccProfile(CPDF_Stream* pStream, int nComponents);

+

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+

+    CPDF_Font*				AddWindowsFont(LOGFONTA* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);

+    CPDF_Font*				AddWindowsFont(LOGFONTW* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);

+#endif

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_

+    CPDF_Font*              AddMacFont(CTFontRef pFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);

+#endif

+

+    CPDF_Font*				AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding);

+

+

+    CPDF_Font*				AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert);

+

+    void					CreateNewDoc();

+

+    CPDF_Dictionary*		CreateNewPage(int iPage);

+

+    void					DeletePage(int iPage);

+

+    void					LoadDoc();

+    void					LoadAsynDoc(CPDF_Dictionary *pLinearized);

+    void					LoadPages();

+protected:

+

+    CPDF_Dictionary*		m_pRootDict;

+

+    CPDF_Dictionary*		m_pInfoDict;

+

+    CFX_ByteString			m_ID1;

+

+    CFX_ByteString			m_ID2;

+

+

+    FX_BOOL					m_bLinearized;

+

+    FX_DWORD				m_dwFirstPageNo;

+

+    FX_DWORD				m_dwFirstPageObjNum;

+

+    CFX_DWordArray			m_PageList;

+

+    int						_GetPageCount() const;

+    CPDF_Dictionary*		_FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level);

+    int						_FindPageIndex(CPDF_Dictionary* pNode, FX_DWORD& skip_count, FX_DWORD objnum, int& index, int level = 0);

+    FX_BOOL					IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict);

+    FX_BOOL					CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);

+    CPDF_DocPageData*		GetValidatePageData();

+    CPDF_DocRenderData*		GetValidateRenderData();

+    friend class			CPDF_Creator;

+    friend class			CPDF_Parser;

+    friend class			CPDF_DataAvail;

+    friend class			CPDF_OCContext;

+

+

+

+    CPDF_DocPageData*		m_pDocPage;

+

+    CPDF_DocRenderData*		m_pDocRender;

+

+};

+

+#define PDFWORD_EOF			0

+#define PDFWORD_NUMBER		1

+#define PDFWORD_TEXT		2

+#define PDFWORD_DELIMITER	3

+#define PDFWORD_NAME		4

+class CPDF_SimpleParser : public CFX_Object

+{

+public:

+

+    CPDF_SimpleParser(FX_LPCBYTE pData, FX_DWORD dwSize);

+

+    CPDF_SimpleParser(FX_BSTR str);

+

+    CFX_ByteStringC		GetWord();

+

+    FX_BOOL				SearchToken(FX_BSTR token);

+

+    FX_BOOL				SkipWord(FX_BSTR token);

+

+    FX_BOOL				FindTagPair(FX_BSTR start_token, FX_BSTR end_token,

+                                    FX_DWORD& start_pos, FX_DWORD& end_pos);

+

+    FX_BOOL				FindTagParam(FX_BSTR token, int nParams);

+

+    FX_DWORD			GetPos()

+    {

+        return m_dwCurPos;

+    }

+

+    void				SetPos(FX_DWORD pos)

+    {

+        ASSERT(pos <= m_dwSize);

+        m_dwCurPos = pos;

+    }

+private:

+

+    void				ParseWord(FX_LPCBYTE& pStart, FX_DWORD& dwSize, int& type);

+

+    FX_LPCBYTE			m_pData;

+

+    FX_DWORD			m_dwSize;

+

+    FX_DWORD			m_dwCurPos;

+};

+class CPDF_SyntaxParser : public CFX_Object

+{

+public:

+

+    CPDF_SyntaxParser();

+

+    ~CPDF_SyntaxParser();

+

+    void				InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);

+

+    FX_FILESIZE			SavePos()

+    {

+        return m_Pos;

+    }

+

+    void				RestorePos(FX_FILESIZE pos)

+    {

+        m_Pos = pos;

+    }

+

+    CPDF_Object*		GetObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, int level, struct PARSE_CONTEXT* pContext = NULL, FX_BOOL bDecrypt = TRUE);

+

+

+    CPDF_Object*		GetObjectByStrict(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, int level, struct PARSE_CONTEXT* pContext = NULL);

+

+    int					GetDirectNum();

+

+    CFX_ByteString		GetString(FX_DWORD objnum, FX_DWORD gennum);

+

+    CFX_ByteString		GetName();

+

+    CFX_ByteString		GetKeyword();

+

+    void				GetBinary(FX_BYTE* buffer, FX_DWORD size);

+

+    void				ToNextLine();

+

+    void				ToNextWord();

+

+    FX_BOOL				SearchWord(FX_BSTR word, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit);

+

+    int					SearchMultiWord(FX_BSTR words, FX_BOOL bWholeWord, FX_FILESIZE limit);

+

+    FX_FILESIZE			FindTag(FX_BSTR tag, FX_FILESIZE limit);

+

+    void				SetEncrypt(CPDF_CryptoHandler* pCryptoHandler)

+    {

+        m_pCryptoHandler = pCryptoHandler;

+    }

+

+    FX_BOOL				IsEncrypted()

+    {

+        return m_pCryptoHandler != NULL;

+    }

+

+    FX_BOOL				GetCharAt(FX_FILESIZE pos, FX_BYTE& ch);

+

+    FX_BOOL				ReadBlock(FX_BYTE* pBuf, FX_DWORD size);

+

+    CFX_ByteString		GetNextWord(FX_BOOL& bIsNumber);

+protected:

+

+    virtual FX_BOOL				GetNextChar(FX_BYTE& ch);

+

+    FX_BOOL				GetCharAtBackward(FX_FILESIZE pos, FX_BYTE& ch);

+

+    void				GetNextWord();

+

+    FX_BOOL				IsWholeWord(FX_FILESIZE startpos, FX_FILESIZE limit, FX_LPCBYTE tag, FX_DWORD taglen);

+

+    CFX_ByteString		ReadString();

+

+    CFX_ByteString		ReadHexString();

+

+    CPDF_Stream*		ReadStream(CPDF_Dictionary* pDict, PARSE_CONTEXT* pContext, FX_DWORD objnum, FX_DWORD gennum);

+

+    FX_FILESIZE			m_Pos;

+

+    FX_BOOL				m_bFileStream;

+

+    int					m_MetadataObjnum;

+

+    IFX_FileRead*		m_pFileAccess;

+

+    FX_DWORD			m_HeaderOffset;

+

+    FX_FILESIZE			m_FileLen;

+

+    FX_BYTE*			m_pFileBuf;

+

+    FX_DWORD			m_BufSize;

+

+    FX_FILESIZE			m_BufOffset;

+

+    CPDF_CryptoHandler*	m_pCryptoHandler;

+

+    FX_BYTE				m_WordBuffer[257];

+

+    FX_DWORD			m_WordSize;

+

+    FX_BOOL				m_bIsNumber;

+

+    FX_FILESIZE			m_dwWordPos;

+    friend class		CPDF_Parser;

+    friend class		CPDF_DataAvail;

+};

+

+#define PDFPARSE_TYPEONLY	1

+#define PDFPARSE_NOSTREAM	2

+struct PARSE_CONTEXT {

+

+    FX_BOOL		m_Flags;

+

+    FX_FILESIZE	m_DictStart;

+

+    FX_FILESIZE	m_DictEnd;

+

+    FX_FILESIZE	m_DataStart;

+

+    FX_FILESIZE	m_DataEnd;

+};

+class IPDF_DocParser : public CFX_Object

+{

+public:

+

+    virtual FX_DWORD	GetRootObjNum() = 0;

+

+    virtual FX_DWORD	GetInfoObjNum() = 0;

+

+    virtual CPDF_Object*	ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext = NULL) = 0;

+

+    virtual FX_DWORD	GetLastObjNum() = 0;

+

+    virtual CPDF_Array*	GetIDArray() = 0;

+

+    virtual CPDF_Dictionary*	GetEncryptDict() = 0;

+

+    FX_BOOL				IsEncrypted()

+    {

+        return GetEncryptDict() != NULL;

+    }

+

+    virtual FX_DWORD	GetPermissions(FX_BOOL bCheckRevision = FALSE) = 0;

+

+    virtual FX_BOOL		IsOwner() = 0;

+

+    virtual FX_BOOL		IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) = 0;

+};

+

+#define PDFPARSE_ERROR_SUCCESS		0

+#define PDFPARSE_ERROR_FILE			1

+#define PDFPARSE_ERROR_FORMAT		2

+#define PDFPARSE_ERROR_PASSWORD		3

+#define PDFPARSE_ERROR_HANDLER		4

+#define PDFPARSE_ERROR_CERT			5

+class CPDF_Parser : public IPDF_DocParser

+{

+public:

+

+    CPDF_Parser();

+

+    ~CPDF_Parser();

+

+    FX_DWORD			StartParse(FX_LPCSTR filename, FX_BOOL bReParse = FALSE);

+

+    FX_DWORD			StartParse(FX_LPCWSTR filename, FX_BOOL bReParse = FALSE);

+

+    FX_DWORD			StartParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);

+

+    void				CloseParser(FX_BOOL bReParse = FALSE);

+

+    virtual FX_DWORD	GetPermissions(FX_BOOL bCheckRevision = FALSE);

+

+    virtual FX_BOOL		IsOwner();

+

+    void				SetPassword(const FX_CHAR* password)

+    {

+        m_Password = password;

+    }

+

+    CFX_ByteString		GetPassword()

+    {

+        return m_Password;

+    }

+

+    CPDF_SecurityHandler* GetSecurityHandler()

+    {

+        return m_pSecurityHandler;

+    }

+

+    CPDF_CryptoHandler*	GetCryptoHandler()

+    {

+        return m_Syntax.m_pCryptoHandler;

+    }

+

+    void				SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, FX_BOOL bForced = FALSE);

+

+    CFX_ByteString		GetRecipient()

+    {

+        return m_bsRecipient;

+    }

+

+    CPDF_Dictionary*	GetTrailer()

+    {

+        return m_pTrailer;

+    }

+

+    FX_FILESIZE			GetLastXRefOffset()

+    {

+        return m_LastXRefOffset;

+    }

+

+    CPDF_Document*		GetDocument()

+    {

+        return m_pDocument;

+    }

+    CFX_ArrayTemplate<CPDF_Dictionary *> * GetOtherTrailers()

+    {

+        return &m_Trailers;

+    }

+

+    virtual FX_DWORD	GetRootObjNum();

+    virtual FX_DWORD	GetInfoObjNum();

+    virtual CPDF_Array*	GetIDArray();

+    virtual CPDF_Dictionary*	GetEncryptDict()

+    {

+        return m_pEncryptDict;

+    }

+    virtual CPDF_Object*		ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext = NULL);

+    virtual FX_DWORD	GetLastObjNum();

+    virtual FX_BOOL		IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);

+

+    FX_FILESIZE			GetObjectOffset(FX_DWORD objnum);

+

+    FX_FILESIZE			GetObjectSize(FX_DWORD objnum);

+

+    int					GetObjectVersion(FX_DWORD objnum)

+    {

+        return m_ObjVersion[objnum];

+    }

+

+    void				GetIndirectBinary(FX_DWORD objnum, FX_BYTE*& pBuffer, FX_DWORD& size);

+

+    FX_BOOL				GetFileStreamOption()

+    {

+        return m_Syntax.m_bFileStream;

+    }

+

+    void				SetFileStreamOption(FX_BOOL b)

+    {

+        m_Syntax.m_bFileStream = b;

+    }

+

+    IFX_FileRead*		GetFileAccess() const

+    {

+        return m_Syntax.m_pFileAccess;

+    }

+

+    int					GetFileVersion() const

+    {

+        return m_FileVersion;

+    }

+

+    FX_BOOL				IsXRefStream() const

+    {

+        return m_bXRefStream;

+    }

+    CPDF_Object*		ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,

+            struct PARSE_CONTEXT* pContext);

+

+    CPDF_Object*		ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,

+            struct PARSE_CONTEXT* pContext, FX_FILESIZE *pResultPos);

+

+    FX_DWORD			StartAsynParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);

+

+    FX_DWORD			GetFirstPageNo()

+    {

+        return m_dwFirstPageNo;

+    }

+protected:

+

+    CPDF_Document*		m_pDocument;

+

+    CPDF_SyntaxParser	m_Syntax;

+    FX_BOOL				m_bOwnFileRead;

+    CPDF_Object*		ParseDirect(CPDF_Object* pObj);

+

+    FX_BOOL				LoadAllCrossRefV4(FX_FILESIZE pos);

+

+    FX_BOOL				LoadAllCrossRefV5(FX_FILESIZE pos);

+

+    FX_BOOL				LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip, FX_BOOL bFirst);

+

+    FX_BOOL				LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef);

+

+    CPDF_Dictionary*	LoadTrailerV4();

+

+    FX_BOOL				RebuildCrossRef();

+

+    FX_DWORD			SetEncryptHandler();

+

+    void				ReleaseEncryptHandler();

+

+    FX_BOOL				LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);

+

+    FX_BOOL				LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);

+

+    FX_BOOL				LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);

+

+    FX_DWORD			LoadLinearizedMainXRefTable();

+

+    CFX_MapPtrToPtr		m_ObjectStreamMap;

+

+    CPDF_StreamAcc*		GetObjectStream(FX_DWORD number);

+

+    FX_BOOL				IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset);

+

+

+

+    int					m_FileVersion;

+

+    CPDF_Dictionary*	m_pTrailer;

+

+    CPDF_Dictionary*	m_pEncryptDict;

+    void SetEncryptDictionary(CPDF_Dictionary* pDict);

+

+    FX_FILESIZE			m_LastXRefOffset;

+

+    FX_BOOL				m_bXRefStream;

+

+

+    CPDF_SecurityHandler*	m_pSecurityHandler;

+

+    FX_BOOL					m_bForceUseSecurityHandler;

+

+    CFX_ByteString			m_bsRecipient;

+

+    CFX_ByteString		m_FilePath;

+

+    CFX_ByteString		m_Password;

+

+    CFX_FileSizeArray	m_CrossRef;

+

+    CFX_ByteArray		m_V5Type;

+

+    CFX_FileSizeArray	m_SortedOffset;

+

+    CFX_WordArray		m_ObjVersion;

+    CFX_ArrayTemplate<CPDF_Dictionary *>	m_Trailers;

+

+    FX_BOOL				m_bVersionUpdated;

+

+    CPDF_Object*		m_pLinearized;

+

+    FX_DWORD			m_dwFirstPageNo;

+

+    FX_DWORD			m_dwXrefStartObjNum;

+    friend class		CPDF_Creator;

+    friend class		CPDF_DataAvail;

+};

+#define FXCIPHER_NONE	0

+#define FXCIPHER_RC4	1

+#define FXCIPHER_AES	2

+#define FXCIPHER_AES2   3

+class CPDF_SecurityHandler : public CFX_Object

+{

+public:

+

+    virtual ~CPDF_SecurityHandler() {}

+

+    virtual FX_BOOL		OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict) = 0;

+

+    virtual FX_DWORD	GetPermissions() = 0;

+

+    virtual FX_BOOL		IsOwner() = 0;

+

+    virtual FX_BOOL		GetCryptInfo(int& cipher, FX_LPCBYTE& buffer, int& keylen) = 0;

+

+    virtual FX_BOOL		IsMetadataEncrypted()

+    {

+        return TRUE;

+    }

+

+    virtual CPDF_CryptoHandler*	CreateCryptoHandler() = 0;

+

+    virtual CPDF_StandardSecurityHandler* GetStandardHandler()

+    {

+        return NULL;

+    }

+};

+#define PDF_ENCRYPT_CONTENT				0

+class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler

+{

+public:

+    CPDF_StandardSecurityHandler();

+

+    virtual ~CPDF_StandardSecurityHandler();

+    virtual FX_BOOL		OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict);

+    virtual FX_DWORD	GetPermissions();

+    virtual FX_BOOL		IsOwner()

+    {

+        return m_bOwner;

+    }

+    virtual FX_BOOL		GetCryptInfo(int& cipher, FX_LPCBYTE& buffer, int& keylen);

+    virtual FX_BOOL		IsMetadataEncrypted();

+    virtual CPDF_CryptoHandler*	CreateCryptoHandler();

+    virtual CPDF_StandardSecurityHandler* GetStandardHandler()

+    {

+        return this;

+    }

+

+    void				OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,

+                                 FX_LPCBYTE user_pass, FX_DWORD user_size,

+                                 FX_LPCBYTE owner_pass, FX_DWORD owner_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);

+

+    void				OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,

+                                 FX_LPCBYTE user_pass, FX_DWORD user_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);

+

+    CFX_ByteString		GetUserPassword(FX_LPCBYTE owner_pass, FX_DWORD pass_size);

+    CFX_ByteString		GetUserPassword(FX_LPCBYTE owner_pass, FX_DWORD pass_size, FX_INT32 key_len);

+    int					GetVersion()

+    {

+        return m_Version;

+    }

+    int					GetRevision()

+    {

+        return m_Revision;

+    }

+

+    int					CheckPassword(FX_LPCBYTE password, FX_DWORD pass_size, FX_BOOL bOwner, FX_LPBYTE key);

+    int					CheckPassword(FX_LPCBYTE password, FX_DWORD pass_size, FX_BOOL bOwner, FX_LPBYTE key, int key_len);

+private:

+

+    int					m_Version;

+

+    int					m_Revision;

+

+    CPDF_Parser*		m_pParser;

+

+    CPDF_Dictionary*	m_pEncryptDict;

+

+    FX_BOOL				LoadDict(CPDF_Dictionary* pEncryptDict);

+    FX_BOOL				LoadDict(CPDF_Dictionary* pEncryptDict, FX_DWORD type, int& cipher, int& key_len);

+

+    FX_BOOL				CheckUserPassword(FX_LPCBYTE password, FX_DWORD pass_size,

+                                          FX_BOOL bIgnoreEncryptMeta, FX_LPBYTE key, FX_INT32 key_len);

+

+    FX_BOOL				CheckOwnerPassword(FX_LPCBYTE password, FX_DWORD pass_size, FX_LPBYTE key, FX_INT32 key_len);

+    FX_BOOL				AES256_CheckPassword(FX_LPCBYTE password, FX_DWORD size, FX_BOOL bOwner, FX_LPBYTE key);

+    void				AES256_SetPassword(CPDF_Dictionary* pEncryptDict, FX_LPCBYTE password, FX_DWORD size, FX_BOOL bOwner, FX_LPCBYTE key);

+    void				AES256_SetPerms(CPDF_Dictionary* pEncryptDict, FX_DWORD permission, FX_BOOL bEncryptMetadata, FX_LPCBYTE key);

+    void				OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,

+                                 FX_LPCBYTE user_pass, FX_DWORD user_size,

+                                 FX_LPCBYTE owner_pass, FX_DWORD owner_size, FX_BOOL bDefault, FX_DWORD type);

+    FX_BOOL				CheckSecurity(FX_INT32 key_len);

+

+    FX_BOOL				m_bOwner;

+

+    FX_DWORD			m_Permissions;

+

+    int					m_Cipher;

+

+    FX_BYTE				m_EncryptKey[32];

+

+    int					m_KeyLen;

+};

+class CPDF_CryptoHandler : public CFX_Object

+{

+public:

+

+    virtual ~CPDF_CryptoHandler() {}

+

+    virtual FX_BOOL		Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler) = 0;

+

+    virtual FX_DWORD	DecryptGetSize(FX_DWORD src_size) = 0;

+

+    virtual FX_LPVOID	DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0;

+

+    virtual FX_BOOL		DecryptStream(FX_LPVOID context, FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;

+

+    virtual FX_BOOL		DecryptFinish(FX_LPVOID context, CFX_BinaryBuf& dest_buf) = 0;

+

+

+    virtual FX_DWORD	EncryptGetSize(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0;

+

+    virtual FX_BOOL		EncryptContent(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size,

+                                       FX_LPBYTE dest_buf, FX_DWORD& dest_size) = 0;

+

+    void				Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str);

+};

+class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler

+{

+public:

+

+    CPDF_StandardCryptoHandler();

+

+    virtual ~CPDF_StandardCryptoHandler();

+

+    FX_BOOL				Init(int cipher, FX_LPCBYTE key, int keylen);

+    virtual FX_BOOL		Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler);

+    virtual FX_DWORD	DecryptGetSize(FX_DWORD src_size);

+    virtual FX_LPVOID	DecryptStart(FX_DWORD objnum, FX_DWORD gennum);

+    virtual FX_BOOL		DecryptStream(FX_LPVOID context, FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);

+    virtual FX_BOOL		DecryptFinish(FX_LPVOID context, CFX_BinaryBuf& dest_buf);

+    virtual FX_DWORD	EncryptGetSize(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size);

+    virtual FX_BOOL		EncryptContent(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size,

+                                       FX_LPBYTE dest_buf, FX_DWORD& dest_size);

+protected:

+

+    virtual void		CryptBlock(FX_BOOL bEncrypt, FX_DWORD objnum, FX_DWORD gennum, FX_LPCBYTE src_buf, FX_DWORD src_size,

+                                   FX_LPBYTE dest_buf, FX_DWORD& dest_size);

+    virtual FX_LPVOID	CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt);

+    virtual FX_BOOL		CryptStream(FX_LPVOID context, FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);

+    virtual FX_BOOL		CryptFinish(FX_LPVOID context, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);

+

+    FX_BYTE				m_EncryptKey[32];

+

+    int					m_KeyLen;

+

+    int					m_Cipher;

+

+    FX_LPBYTE			m_pAESContext;

+};

+class CPDF_Point : public CFX_Object

+{

+public:

+

+    CPDF_Point(FX_FLOAT xx, FX_FLOAT yy)

+    {

+        x = xx;

+        y = yy;

+    }

+

+    FX_FLOAT			x;

+

+    FX_FLOAT			y;

+};

+

+#define CPDF_Rect		CFX_FloatRect

+#define CPDF_Matrix		CFX_AffineMatrix

+CFX_ByteString PDF_NameDecode(FX_BSTR orig);

+CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig);

+CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig);

+CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex = FALSE);

+CFX_WideString PDF_DecodeText(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL);

+CFX_WideString PDF_DecodeText(FX_LPCBYTE pData, FX_DWORD size, CFX_CharMap* pCharMap = NULL);

+CFX_ByteString PDF_EncodeText(FX_LPCWSTR pString, int len = -1, CFX_CharMap* pCharMap = NULL);

+FX_FLOAT PDF_ClipFloat(FX_FLOAT f);

+class CFDF_Document : public CPDF_IndirectObjects

+{

+public:

+

+    static CFDF_Document*	CreateNewDoc();

+

+    static CFDF_Document*	ParseFile(FX_LPCSTR file_path);

+

+    static CFDF_Document*	ParseFile(FX_LPCWSTR file_path);

+

+    static CFDF_Document*	ParseFile(IFX_FileRead *pFile, FX_BOOL bOwnFile = FALSE);

+

+    static CFDF_Document*	ParseMemory(FX_LPCBYTE pData, FX_DWORD size);

+

+    ~CFDF_Document();

+

+    FX_BOOL					WriteFile(FX_LPCSTR file_path) const;

+

+    FX_BOOL					WriteFile(FX_LPCWSTR file_path) const;

+

+    FX_BOOL					WriteFile(IFX_FileWrite *pFile) const;

+

+    FX_BOOL					WriteBuf(CFX_ByteTextBuf& buf) const;

+

+    CPDF_Dictionary*		GetRoot() const

+    {

+        return m_pRootDict;

+    }

+

+    CFX_WideString			GetWin32Path() const;

+protected:

+

+    CFDF_Document();

+    void	ParseStream(IFX_FileRead *pFile, FX_BOOL bOwnFile);

+    CPDF_Dictionary*		m_pRootDict;

+    IFX_FileRead*			m_pFile;

+    FX_BOOL					m_bOwnFile;

+};

+

+CFX_WideString	FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec);

+void			FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec, const CFX_WideString& fullpath);

+

+void FlateEncode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size);

+FX_DWORD FlateDecode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size);

+FX_DWORD RunLengthDecode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size);

+class CPDF_NumberTree : public CFX_Object

+{

+public:

+

+    CPDF_NumberTree(CPDF_Dictionary* pRoot)

+    {

+        m_pRoot = pRoot;

+    }

+

+    CPDF_Object*		LookupValue(int num);

+protected:

+

+    CPDF_Dictionary*	m_pRoot;

+};

+

+class IFX_FileAvail

+{

+public:

+

+    virtual FX_BOOL			IsDataAvail( FX_FILESIZE offset, FX_DWORD size) = 0;

+};

+class IFX_DownloadHints

+{

+public:

+

+    virtual void			AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0;

+};

+#define PDF_IS_LINEARIZED			1

+#define PDF_NOT_LINEARIZED			0

+#define PDF_UNKNOW_LINEARIZED		-1

+#define PDFFORM_NOTAVAIL		0

+#define PDFFORM_AVAIL			1

+#define PDFFORM_NOTEXIST		2

+class IPDF_DataAvail

+{

+public:

+

+    virtual FX_BOOL			IsDocAvail(IFX_DownloadHints* pHints) = 0;

+

+

+    virtual void			SetDocument(CPDF_Document* pDoc) = 0;

+

+

+    virtual FX_BOOL			IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0;

+

+    virtual FX_BOOL			IsLinearized() = 0;

+

+    virtual FX_INT32		IsFormAvail(IFX_DownloadHints *pHints) = 0;

+

+    virtual FX_INT32		IsLinearizedPDF() = 0;

+

+    virtual void				GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize) = 0;

+};

+class CPDF_SortObjNumArray : public CFX_Object

+{

+public:

+

+    void AddObjNum(FX_DWORD dwObjNum);

+

+    FX_BOOL Find(FX_DWORD dwObjNum);

+

+    void RemoveAll()

+    {

+        m_number_array.RemoveAll();

+    }

+protected:

+

+    FX_BOOL BinarySearch(FX_DWORD value, int &iNext);

+protected:

+

+    CFX_DWordArray			m_number_array;

+};

+enum PDF_PAGENODE_TYPE {

+    PDF_PAGENODE_UNKOWN = 0,

+    PDF_PAGENODE_PAGE,

+    PDF_PAGENODE_PAGES,

+    PDF_PAGENODE_ARRAY,

+};

+class CPDF_PageNode : public CFX_Object

+{

+public:

+    CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {}

+    ~CPDF_PageNode();

+    PDF_PAGENODE_TYPE	m_type;

+    FX_DWORD			m_dwPageNo;

+    CFX_PtrArray		m_childNode;

+};

+enum PDF_DATAAVAIL_STATUS {

+    PDF_DATAAVAIL_HEADER = 0,

+    PDF_DATAAVAIL_FIRSTPAGE,

+    PDF_DATAAVAIL_FIRSTPAGE_PREPARE,

+    PDF_DATAAVAIL_END,

+    PDF_DATAAVAIL_CROSSREF,

+    PDF_DATAAVAIL_CROSSREF_ITEM,

+    PDF_DATAAVAIL_CROSSREF_STREAM,

+    PDF_DATAAVAIL_TRAILER,

+    PDF_DATAAVAIL_LOADALLCRSOSSREF,

+    PDF_DATAAVAIL_ROOT,

+    PDF_DATAAVAIL_INFO,

+    PDF_DATAAVAIL_ACROFORM,

+    PDF_DATAAVAIL_ACROFORM_SUBOBJECT,

+    PDF_DATAAVAIL_PAGETREE,

+    PDF_DATAAVAIL_PAGE,

+    PDF_DATAAVAIL_PAGE_LATERLOAD,

+    PDF_DATAAVAIL_RESOURCES,

+    PDF_DATAAVAIL_DONE,

+    PDF_DATAAVAIL_ERROR,

+    PDF_DATAAVAIL_LOADALLFILE,

+    PDF_DATAAVAIL_TRAILER_APPEND

+};

+class CPDF_DataAvail : public CFX_Object, public IPDF_DataAvail

+{

+public:

+

+    CPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);

+    ~CPDF_DataAvail();

+

+    virtual FX_BOOL				IsDocAvail(IFX_DownloadHints* pHints);

+

+

+    virtual void				SetDocument(CPDF_Document* pDoc);

+

+

+    virtual FX_BOOL				IsPageAvail(int iPage, IFX_DownloadHints* pHints);

+

+    virtual FX_INT32			IsFormAvail(IFX_DownloadHints *pHints);

+

+    virtual FX_INT32			IsLinearizedPDF();

+

+    virtual FX_BOOL				IsLinearized()

+    {

+        return m_bLinearized;

+    }

+

+    virtual void				GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize);

+    IFX_FileRead*				GetFileRead() const

+    {

+        return m_pFileRead;

+    }

+    IFX_FileAvail*				GetFileAvail() const

+    {

+        return m_pFileAvail;

+    }

+protected:

+    FX_DWORD					GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset);

+    FX_BOOL						IsObjectsAvail(CFX_PtrArray& obj_array, FX_BOOL bParsePage, IFX_DownloadHints* pHints, CFX_PtrArray &ret_array);

+    FX_BOOL						CheckDocStatus(IFX_DownloadHints *pHints);

+    FX_BOOL						CheckHeader(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckFirstPage(IFX_DownloadHints *pHints);

+    FX_BOOL						CheckEnd(IFX_DownloadHints *pHints);

+    FX_BOOL						CheckCrossRef(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckCrossRefItem(IFX_DownloadHints *pHints);

+    FX_BOOL						CheckTrailer(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckRoot(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckInfo(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckPages(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckPage(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckResources(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckAnnots(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckAcroForm(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckAcroFormSubObject(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckTrailerAppend(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckPageStatus(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckAllCrossRefStream(IFX_DownloadHints *pHints);

+

+    FX_DWORD					CheckCrossRefStream(IFX_DownloadHints *pHints, FX_FILESIZE &xref_offset);

+    FX_BOOL						IsLinearizedFile(FX_LPBYTE pData, FX_DWORD dwLen);

+    void						SetStartOffset(FX_FILESIZE dwOffset);

+    FX_BOOL						GetNextToken(CFX_ByteString &token);

+    FX_BOOL						GetNextChar(FX_BYTE &ch);

+    CPDF_Object	*				ParseIndirectObjectAt(FX_FILESIZE pos, FX_DWORD objnum);

+    CPDF_Object	*				GetObject(FX_DWORD objnum, IFX_DownloadHints* pHints, FX_BOOL *pExistInFile);

+    FX_BOOL						GetPageKids(CPDF_Parser *pParser, CPDF_Object *pPages);

+    FX_BOOL						PreparePageItem();

+    FX_BOOL						LoadPages(IFX_DownloadHints* pHints);

+    FX_BOOL						LoadAllXref(IFX_DownloadHints* pHints);

+    FX_BOOL						LoadAllFile(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckLinearizedData(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckFileResources(IFX_DownloadHints* pHints);

+    FX_BOOL						CheckPageAnnots(int iPage, IFX_DownloadHints* pHints);

+

+    FX_BOOL						CheckLinearizedFirstPage(int iPage, IFX_DownloadHints* pHints);

+    FX_BOOL						HaveResourceAncestor(CPDF_Dictionary *pDict);

+    FX_BOOL						CheckPage(FX_INT32 iPage, IFX_DownloadHints* pHints);

+    FX_BOOL						LoadDocPages(IFX_DownloadHints* pHints);

+    FX_BOOL						LoadDocPage(FX_INT32 iPage, IFX_DownloadHints* pHints);

+    FX_BOOL						CheckPageNode(CPDF_PageNode &pageNodes, FX_INT32 iPage, FX_INT32 &iCount, IFX_DownloadHints* pHints);

+    FX_BOOL						CheckUnkownPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints);

+    FX_BOOL						CheckArrayPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints);

+    FX_BOOL                     CheckPageCount(IFX_DownloadHints* pHints);

+    FX_BOOL						IsFirstCheck(int iPage);

+    void						ResetFirstCheck(int iPage);

+

+    CPDF_Parser				m_parser;

+

+    CPDF_SyntaxParser		m_syntaxParser;

+

+    CPDF_Object				*m_pRoot;

+

+    FX_DWORD				m_dwRootObjNum;

+

+    FX_DWORD				m_dwInfoObjNum;

+

+    CPDF_Object				*m_pLinearized;

+

+    CPDF_Object				*m_pTrailer;

+

+    FX_BOOL					m_bDocAvail;

+

+    FX_FILESIZE				m_dwHeaderOffset;

+

+    FX_FILESIZE				m_dwLastXRefOffset;

+

+    FX_FILESIZE				m_dwXRefOffset;

+

+    FX_FILESIZE				m_dwTrailerOffset;

+

+    FX_FILESIZE				m_dwCurrentOffset;

+

+    PDF_DATAAVAIL_STATUS	m_docStatus;

+

+    IFX_FileAvail*			m_pFileAvail;

+

+    IFX_FileRead*			m_pFileRead;

+

+    FX_FILESIZE				m_dwFileLen;

+

+    CPDF_Document*			m_pDocument;

+

+    CPDF_SortObjNumArray	m_objnum_array;

+

+    CFX_PtrArray			m_objs_array;

+

+    FX_FILESIZE				m_Pos;

+

+    FX_FILESIZE				m_bufferOffset;

+

+    FX_DWORD				m_bufferSize;

+

+    CFX_ByteString			m_WordBuf;

+

+    FX_BYTE					m_WordBuffer[257];

+

+    FX_DWORD				m_WordSize;

+

+    FX_BYTE					m_bufferData[512];

+

+    CFX_FileSizeArray		m_CrossOffset;

+

+    CFX_DWordArray			m_XRefStreamList;

+

+    CFX_DWordArray			m_PageObjList;

+

+    FX_DWORD				m_PagesObjNum;

+

+    FX_BOOL					m_bLinearized;

+

+    FX_DWORD				m_dwFirstPageNo;

+

+    FX_BOOL					m_bLinearedDataOK;

+

+    FX_BOOL					m_bMainXRefLoad;

+

+    FX_BOOL					m_bMainXRefLoadedOK;

+

+    FX_BOOL					m_bPagesTreeLoad;

+

+    FX_BOOL					m_bPagesLoad;

+

+    CPDF_Parser *			m_pCurrentParser;

+

+    FX_FILESIZE				m_dwCurrentXRefSteam;

+

+    FX_BOOL					m_bAnnotsLoad;

+

+    FX_BOOL					m_bHaveAcroForm;

+

+    FX_DWORD				m_dwAcroFormObjNum;

+

+    FX_BOOL					m_bAcroFormLoad;

+

+    CPDF_Object	*			m_pAcroForm;

+

+    CFX_PtrArray			m_arrayAcroforms;

+

+    CPDF_Dictionary *		m_pPageDict;

+

+    CPDF_Object *			m_pPageResource;

+

+    FX_BOOL					m_bNeedDownLoadResource;

+

+    FX_BOOL					m_bPageLoadedOK;

+

+    FX_BOOL					m_bLinearizedFormParamLoad;

+

+    CFX_PtrArray			m_PagesArray;

+

+    FX_DWORD				m_dwEncryptObjNum;

+

+    FX_FILESIZE				m_dwPrevXRefOffset;

+

+    FX_BOOL					m_bTotalLoadPageTree;

+

+    FX_BOOL					m_bCurPageDictLoadOK;

+

+    CPDF_PageNode			m_pageNodes;

+

+    CFX_CMapDWordToDWord *	m_pageMapCheckState;

+

+    CFX_CMapDWordToDWord *	m_pagesLoadState;

+};

+#endif

diff --git a/core/include/fpdfapi/fpdf_render.h b/core/include/fpdfapi/fpdf_render.h
new file mode 100644
index 0000000..22ba56f
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_render.h
@@ -0,0 +1,318 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_RENDER_

+#define _FPDF_RENDER_

+#ifndef _FPDF_PAGE_

+#include "fpdf_page.h"

+#endif

+#ifndef _FX_GE_H_

+#include "../fxge/fx_ge.h"

+#endif

+class CPDF_RenderContext;

+class CPDF_RenderOptions;

+class CPDF_ImageCache;

+class IPDF_OCContext;

+class CPDF_QuickStretcher;

+class CFX_PathData;

+class CFX_GraphStateData;

+class CFX_RenderDevice;

+class CPDF_TextObject;

+class CPDF_PathObject;

+class CPDF_ImageObject;

+class CPDF_ShadingObject;

+class CPDF_FormObject;

+class IPDF_OCContext

+{

+public:

+

+    virtual ~IPDF_OCContext() {}

+

+    virtual FX_BOOL	CheckOCGVisible(const CPDF_Dictionary* pOCG) = 0;

+

+    FX_BOOL CheckObjectVisible(const CPDF_PageObject* pObj);

+};

+#define RENDER_COLOR_NORMAL		0

+#define RENDER_COLOR_GRAY		1

+#define RENDER_COLOR_TWOCOLOR	2

+#define RENDER_COLOR_ALPHA		3

+#define RENDER_CLEARTYPE			0x00000001

+#define RENDER_PRINTGRAPHICTEXT		0x00000002

+#define RENDER_FORCE_DOWNSAMPLE		0x00000004

+#define RENDER_PRINTPREVIEW			0x00000008

+#define RENDER_BGR_STRIPE			0x00000010

+#define RENDER_NO_NATIVETEXT		0x00000020

+#define RENDER_FORCE_HALFTONE		0x00000040

+#define RENDER_RECT_AA				0x00000080

+#define RENDER_FILL_FULLCOVER		0x00000100

+#define RENDER_PRINTIMAGETEXT       0x00000200

+#define RENDER_OVERPRINT            0x00000400

+#define RENDER_THINLINE             0x00000800

+#define RENDER_NOTEXTSMOOTH			0x10000000

+#define RENDER_NOPATHSMOOTH			0x20000000

+#define RENDER_NOIMAGESMOOTH		0x40000000

+#define RENDER_LIMITEDIMAGECACHE	0x80000000

+class CPDF_RenderOptions : public CFX_Object

+{

+public:

+

+    CPDF_RenderOptions();

+

+    int				m_ColorMode;

+

+    FX_COLORREF		m_BackColor;

+

+    FX_COLORREF		m_ForeColor;

+

+    FX_DWORD		m_Flags;

+

+    int				m_Interpolation;

+

+    FX_DWORD		m_AddFlags;

+

+    IPDF_OCContext*	m_pOCContext;

+

+    FX_DWORD		m_dwLimitCacheSize;

+

+    int				m_HalftoneLimit;

+

+    FX_ARGB			TranslateColor(FX_ARGB argb) const;

+};

+class CPDF_RenderContext : public CFX_Object

+{

+public:

+

+    CPDF_RenderContext();

+

+    void			Create(CPDF_Page* pPage, FX_BOOL bFirstLayer = TRUE);

+

+    void			Create(CPDF_Document* pDoc = NULL, CPDF_PageRenderCache* pPageCache = NULL,

+                           CPDF_Dictionary* pPageResources = NULL, FX_BOOL bFirstLayer = TRUE);

+

+    ~CPDF_RenderContext();

+

+    void			Clear();

+

+    void			AppendObjectList(CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObject2Device);

+

+    void			SetBackground(class IPDF_BackgroundDraw* pBackground);

+

+    void			Render(CFX_RenderDevice* pDevice, const CPDF_RenderOptions* pOptions = NULL,

+                           const CFX_AffineMatrix* pFinalMatrix = NULL);

+

+    void			DrawObjectList(CFX_RenderDevice* pDevice, CPDF_PageObjects* pObjs,

+                                   const CFX_AffineMatrix* pObject2Device, const CPDF_RenderOptions* pOptions);

+

+    void			GetBackground(CFX_DIBitmap* pBuffer, const CPDF_PageObject* pObj,

+                                  const CPDF_RenderOptions* pOptions, CFX_AffineMatrix* pFinalMatrix);

+

+    CPDF_PageRenderCache*	GetPageCache() const

+    {

+        return m_pPageCache;

+    }

+

+

+

+    CPDF_Document*			m_pDocument;

+

+    CPDF_Dictionary*		m_pPageResources;

+

+    CPDF_PageRenderCache*	m_pPageCache;

+

+protected:

+

+    CFX_ArrayTemplate<struct _PDF_RenderItem>	m_ContentList;

+

+    IPDF_BackgroundDraw*	m_pBackgroundDraw;

+

+    FX_BOOL					m_bFirstLayer;

+

+    void			Render(CFX_RenderDevice* pDevice, const CPDF_PageObject* pStopObj,

+                           const CPDF_RenderOptions* pOptions, const CFX_AffineMatrix* pFinalMatrix);

+    friend class CPDF_RenderStatus;

+    friend class CPDF_ProgressiveRenderer;

+};

+class IPDF_BackgroundDraw

+{

+public:

+

+    virtual	void	OnDrawBackground(

+        CFX_RenderDevice* pBitmapDevice,

+        const CFX_AffineMatrix* pOriginal2Bitmap

+    ) = 0;

+};

+class CPDF_ProgressiveRenderer : public CFX_Object

+{

+public:

+

+    CPDF_ProgressiveRenderer();

+

+    ~CPDF_ProgressiveRenderer();

+

+    typedef enum {

+        Ready,

+        ToBeContinued,

+        Done,

+        Failed

+    } RenderStatus;

+

+    RenderStatus		GetStatus()

+    {

+        return m_Status;

+    }

+

+

+

+    void				Start(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice,

+                              const CPDF_RenderOptions* pOptions, class IFX_Pause* pPause, FX_BOOL bDropObjects = FALSE);

+

+    void				Continue(class IFX_Pause* pPause);

+

+

+    int					EstimateProgress();

+

+    void				Clear();

+protected:

+

+    RenderStatus		m_Status;

+

+    CPDF_RenderContext*	m_pContext;

+

+    CFX_RenderDevice*	m_pDevice;

+

+    const CPDF_RenderOptions*	m_pOptions;

+

+    FX_BOOL				m_bDropObjects;

+

+    class CPDF_RenderStatus*	m_pRenderer;

+

+    CFX_FloatRect		m_ClipRect;

+

+    FX_DWORD			m_LayerIndex;

+

+    FX_DWORD			m_ObjectIndex;

+

+    FX_POSITION			m_ObjectPos;

+

+    FX_POSITION			m_PrevLastPos;

+

+    void				RenderStep();

+};

+class CPDF_TextRenderer : public CFX_Object

+{

+public:

+

+    static void		DrawTextString(CFX_RenderDevice* pDevice, int left, int top,

+                                   CPDF_Font* pFont,

+                                   int height,

+                                   const CFX_ByteString& str,

+                                   FX_ARGB argb);

+

+    static void		DrawTextString(CFX_RenderDevice* pDevice, FX_FLOAT origin_x, FX_FLOAT origin_y,

+                                   CPDF_Font* pFont,

+                                   FX_FLOAT font_size,

+                                   const CFX_AffineMatrix* matrix,

+                                   const CFX_ByteString& str,

+                                   FX_ARGB fill_argb,

+                                   FX_ARGB stroke_argb = 0,

+                                   const CFX_GraphStateData* pGraphState = NULL,

+                                   const CPDF_RenderOptions* pOptions = NULL

+                               );

+

+    static FX_BOOL	DrawTextPath(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,

+                                 CPDF_Font* pFont, FX_FLOAT font_size,

+                                 const CFX_AffineMatrix* pText2User, const CFX_AffineMatrix* pUser2Device,

+                                 const CFX_GraphStateData* pGraphState,

+                                 FX_ARGB fill_argb, FX_ARGB stroke_argb, CFX_PathData* pClippingPath, int nFlag = 0);

+

+    static FX_BOOL	DrawNormalText(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,

+                                   CPDF_Font* pFont, FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,

+                                   FX_ARGB fill_argb, const CPDF_RenderOptions* pOptions);

+

+    static FX_BOOL	DrawType3Text(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,

+                                  CPDF_Font* pFont, FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,

+                                  FX_ARGB fill_argb);

+};

+class IPDF_PageImageCache

+{

+public:

+

+    static IPDF_PageImageCache* Create();

+

+    virtual ~IPDF_PageImageCache() {}

+

+    virtual void		OutputPage(CFX_RenderDevice* pDevice, CPDF_Page* pPage,

+                                   int pos_x, int pos_y, int size_x, int size_y, int rotate) = 0;

+

+    virtual void		SetCacheLimit(FX_DWORD limit) = 0;

+};

+class CPDF_PageRenderCache : public CFX_Object

+{

+public:

+    CPDF_PageRenderCache(CPDF_Page* pPage)

+    {

+        m_pPage = pPage;

+        m_nTimeCount = 0;

+        m_nCacheSize = 0;

+        m_pCurImageCache = NULL;

+        m_bCurFindCache = FALSE;

+        m_pCurImageCaches = NULL;

+    }

+    ~CPDF_PageRenderCache()

+    {

+        ClearAll();

+    }

+    void				ClearAll();

+    void				ClearImageData();

+

+    FX_DWORD			EstimateSize();

+    void				CacheOptimization(FX_INT32 dwLimitCacheSize);

+    FX_DWORD			GetCachedSize(CPDF_Stream* pStream) const;

+    FX_DWORD			GetTimeCount() const

+    {

+        return m_nTimeCount;

+    }

+    void				SetTimeCount(FX_DWORD dwTimeCount)

+    {

+        m_nTimeCount = dwTimeCount;

+    }

+

+    void				GetCachedBitmap(CPDF_Stream* pStream, CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor,

+                                        FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE,

+                                        CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 downsampleWidth = 0, FX_INT32 downsampleHeight = 0);

+

+    void				ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap);

+    void				ClearImageCache(CPDF_Stream* pStream);

+    CPDF_Page*			GetPage()

+    {

+        return m_pPage;

+    }

+    CFX_MapPtrToPtr		m_ImageCaches;

+public:

+    FX_BOOL				StartGetCachedBitmap(CPDF_Stream* pStream, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0,

+            FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL,

+            FX_INT32 downsampleWidth = 0, FX_INT32 downsampleHeight = 0);

+

+    FX_BOOL				Continue(IFX_Pause* pPause);

+    CPDF_ImageCache*	m_pCurImageCache;

+    CFX_PtrArray*       m_pCurImageCaches;

+protected:

+    friend class		CPDF_Page;

+    CPDF_Page*			m_pPage;

+

+    FX_DWORD			m_nTimeCount;

+    FX_DWORD			m_nCacheSize;

+    FX_BOOL				m_bCurFindCache;

+};

+class CPDF_RenderConfig : public CFX_Object

+{

+public:

+    CPDF_RenderConfig();

+    ~CPDF_RenderConfig();

+    int					m_HalftoneLimit;

+    int					m_RenderStepLimit;

+};

+#endif

diff --git a/core/include/fpdfapi/fpdf_resource.h b/core/include/fpdfapi/fpdf_resource.h
new file mode 100644
index 0000000..eea3afc
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_resource.h
@@ -0,0 +1,960 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_RESOURCE_

+#define _FPDF_RESOURCE_

+#ifndef _FPDF_PARSER_

+#include "fpdf_parser.h"

+#endif

+#ifndef _FX_FONT_H_

+#include "../fxge/fx_font.h"

+#endif

+class CPDF_Font;

+class CPDF_Type1Font;

+class CPDF_TrueTypeFont;

+class CPDF_CIDFont;

+class CPDF_Type3Font;

+class CPDF_FontEncoding;

+class CPDF_CMap;

+class CPDF_CID2UnicodeMap;

+class CPDF_ColorSpace;

+class CPDF_Color;

+class CPDF_Function;

+class CPDF_Pattern;

+class CPDF_TilingPattern;

+class CPDF_ShadingPattern;

+class CPDF_Image;

+class CPDF_Face;

+class CPDF_ToUnicodeMap;

+class CFX_SubstFont;

+class CFX_Font;

+class CPDF_RenderContext;

+class CPDF_Form;

+class CPDF_ImageObject;

+class CFX_DIBitmap;

+typedef struct FT_FaceRec_* FXFT_Face;

+class CFX_CTTGSUBTable;

+class CPDF_Page;

+#define PDFFONT_TYPE1			1

+#define PDFFONT_TRUETYPE		2

+#define PDFFONT_TYPE3			3

+#define PDFFONT_CIDFONT			4

+#define PDFFONT_FIXEDPITCH		1

+#define PDFFONT_SERIF			2

+#define PDFFONT_SYMBOLIC		4

+#define PDFFONT_SCRIPT			8

+#define PDFFONT_NONSYMBOLIC		32

+#define PDFFONT_ITALIC			64

+#define PDFFONT_ALLCAP			0x10000

+#define PDFFONT_SMALLCAP		0x20000

+#define PDFFONT_FORCEBOLD		0x40000

+#define PDFFONT_USEEXTERNATTR	0x80000

+FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name);

+CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode);

+class CPDF_Font : public CFX_Object

+{

+public:

+

+    static CPDF_Font*		CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict);

+

+    static CPDF_Font*		GetStockFont(CPDF_Document* pDoc, FX_BSTR fontname);

+

+    virtual ~CPDF_Font();

+

+

+

+

+    int						GetFontType() const

+    {

+        return m_FontType;

+    }

+

+    CFX_ByteString			GetFontTypeName() const;

+

+    const CFX_ByteString&	GetBaseFont() const

+    {

+        return m_BaseFont;

+    }

+

+    const CFX_SubstFont*	GetSubstFont() const

+    {

+        return m_Font.GetSubstFont();

+    }

+

+    FX_DWORD				GetFlags() const

+    {

+        return m_Flags;

+    }

+

+    virtual FX_BOOL			IsVertWriting()const;

+

+

+

+

+    CPDF_Type1Font*			GetType1Font() const

+    {

+        return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL;

+    }

+

+    CPDF_TrueTypeFont*		GetTrueTypeFont() const

+    {

+        return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this : NULL;

+    }

+

+    CPDF_CIDFont*			GetCIDFont() const

+    {

+        return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL;

+    }

+

+    CPDF_Type3Font*			GetType3Font() const

+    {

+        return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL;

+    }

+

+

+    FX_BOOL					IsEmbedded() const

+    {

+        return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL;

+    }

+

+    virtual FX_BOOL			IsUnicodeCompatible() const

+    {

+        return FALSE;

+    }

+

+    CPDF_StreamAcc*			GetFontFile() const

+    {

+        return m_pFontFile;

+    }

+

+    CPDF_Dictionary*		GetFontDict() const

+    {

+        return m_pFontDict;

+    }

+

+    FX_BOOL					IsStandardFont() const;

+

+    FXFT_Face				GetFace() const

+    {

+        return m_Font.GetFace();

+    }

+

+

+

+    virtual FX_DWORD		GetNextChar(FX_LPCSTR pString, int& offset) const

+    {

+        return (FX_BYTE)pString[offset++];

+    }

+

+    virtual int				CountChar(FX_LPCSTR pString, int size) const

+    {

+        return size;

+    }

+

+    void					AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;

+

+    virtual int				AppendChar(FX_LPSTR buf, FX_DWORD charcode) const

+    {

+        *buf = (FX_CHAR)charcode;

+        return 1;

+    }

+

+    virtual int				GetCharSize(FX_DWORD charcode) const

+    {

+        return 1;

+    }

+

+

+

+

+    virtual int				GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) = 0;

+    virtual int				GlyphFromCharCodeExt(FX_DWORD charcode)

+    {

+        return GlyphFromCharCode(charcode);

+    }

+

+    CFX_WideString			UnicodeFromCharCode(FX_DWORD charcode) const;

+

+    FX_DWORD				CharCodeFromUnicode(FX_WCHAR Unicode) const;

+

+    CFX_CharMap*			GetCharMap()

+    {

+        return m_pCharMap;

+    }

+

+    CFX_ByteString			EncodeString(const CFX_WideString& str) const;

+

+    CFX_WideString			DecodeString(const CFX_ByteString& str) const;

+

+

+

+

+    void					GetFontBBox(FX_RECT& rect) const

+    {

+        rect = m_FontBBox;

+    }

+

+    int						GetTypeAscent() const

+    {

+        return m_Ascent;

+    }

+

+    int						GetTypeDescent() const

+    {

+        return m_Descent;

+    }

+

+    int						GetItalicAngle() const

+    {

+        return m_ItalicAngle;

+    }

+

+    int						GetStemV() const

+    {

+        return m_StemV;

+    }

+

+    int						GetStringWidth(const FX_CHAR* pString, int size);

+

+    virtual int				GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;

+

+    virtual int				GetCharTypeWidth(FX_DWORD charcode);

+

+    virtual void			GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0;

+

+

+

+    CPDF_Document*			m_pDocument;

+

+    class CFX_PathData*		LoadGlyphPath(FX_DWORD charcode, int dest_width = 0);

+

+    CFX_Font				m_Font;

+protected:

+

+    CPDF_Font();

+

+    FX_BOOL					Initialize();

+

+    FX_BOOL					Load();

+

+    virtual FX_BOOL			_Load() = 0;

+

+    virtual FX_WCHAR		_UnicodeFromCharCode(FX_DWORD charcode) const = 0;

+

+    virtual FX_DWORD		_CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;

+

+    void					LoadUnicodeMap();

+

+    void					LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding,

+                                            CFX_ByteString*& pCharNames, FX_BOOL bEmbedded, FX_BOOL bTrueType);

+

+    void					LoadFontDescriptor(CPDF_Dictionary*);

+

+    void					LoadCharWidths(FX_WORD* pWidths);

+

+    void					CheckFontMetrics();

+

+    CFX_CharMap*			m_pCharMap;

+

+

+

+    int						m_FontType;

+

+    CFX_ByteString			m_BaseFont;

+

+    CPDF_StreamAcc*			m_pFontFile;

+

+    CPDF_Dictionary*		m_pFontDict;

+

+    CPDF_ToUnicodeMap*		m_pToUnicodeMap;

+

+    FX_BOOL					m_bToUnicodeLoaded;

+

+

+

+

+    int						m_Flags;

+

+    FX_RECT					m_FontBBox;

+

+    int						m_StemV;

+

+    int						m_Ascent;

+

+    int						m_Descent;

+

+    int						m_ItalicAngle;

+

+};

+#define PDFFONT_ENCODING_BUILTIN		0

+#define PDFFONT_ENCODING_WINANSI		1

+#define PDFFONT_ENCODING_MACROMAN		2

+#define PDFFONT_ENCODING_MACEXPERT		3

+#define PDFFONT_ENCODING_STANDARD		4

+#define PDFFONT_ENCODING_ADOBE_SYMBOL	5

+#define PDFFONT_ENCODING_ZAPFDINGBATS	6

+#define PDFFONT_ENCODING_PDFDOC			7

+#define PDFFONT_ENCODING_MS_SYMBOL		8

+#define PDFFONT_ENCODING_UNICODE		9

+class CPDF_FontEncoding : public CFX_Object

+{

+public:

+

+    CPDF_FontEncoding();

+

+    CPDF_FontEncoding(int PredefinedEncoding);

+

+    void					LoadEncoding(CPDF_Object* pEncoding);

+

+    FX_BOOL					IsIdentical(CPDF_FontEncoding* pAnother) const;

+

+    FX_WCHAR				UnicodeFromCharCode(FX_BYTE charcode) const

+    {

+        return m_Unicodes[charcode];

+    }

+

+    int						CharCodeFromUnicode(FX_WCHAR unicode) const;

+

+    void					SetUnicode(FX_BYTE charcode, FX_WCHAR unicode)

+    {

+        m_Unicodes[charcode] = unicode;

+    }

+

+    CPDF_Object*			Realize();

+public:

+

+    FX_WCHAR				m_Unicodes[256];

+};

+class CPDF_SimpleFont : public CPDF_Font

+{

+public:

+

+    CPDF_SimpleFont();

+

+    virtual ~CPDF_SimpleFont();

+

+    CPDF_FontEncoding*		GetEncoding()

+    {

+        return &m_Encoding;

+    }

+    virtual int				GetCharWidthF(FX_DWORD charcode, int level = 0);

+    virtual void			GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0);

+    virtual int				GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL);

+    virtual FX_BOOL			IsUnicodeCompatible() const;

+protected:

+

+    FX_BOOL					LoadCommon();

+

+    void					LoadSubstFont();

+

+    void					LoadFaceMetrics();

+

+    virtual void			LoadGlyphMap() = 0;

+    virtual FX_WCHAR		_UnicodeFromCharCode(FX_DWORD charcode) const

+    {

+        return m_Encoding.UnicodeFromCharCode((FX_BYTE)charcode);

+    }

+    virtual FX_DWORD		_CharCodeFromUnicode(FX_WCHAR Unicode) const

+    {

+        return m_Encoding.CharCodeFromUnicode(Unicode);

+    }

+

+

+

+    CPDF_FontEncoding		m_Encoding;

+

+    FX_WORD					m_GlyphIndex[256];

+    FX_WORD					m_ExtGID[256];

+

+

+

+

+    CFX_ByteString*			m_pCharNames;

+

+    int						m_BaseEncoding;

+

+

+

+

+    FX_WORD					m_CharWidth[256];

+

+    FX_SMALL_RECT			m_CharBBox[256];

+

+    FX_BOOL					m_bUseFontWidth;

+

+    void					LoadCharMetrics(int charcode);

+

+};

+class CPDF_Type1Font : public CPDF_SimpleFont

+{

+public:

+

+    CPDF_Type1Font();

+

+    int						GetBase14Font()

+    {

+        return m_Base14Font;

+    }

+    virtual int				GlyphFromCharCodeExt(FX_DWORD charcode);

+protected:

+    virtual FX_BOOL			_Load();

+

+    int						m_Base14Font;

+    virtual void			LoadGlyphMap();

+};

+class CPDF_TrueTypeFont : public CPDF_SimpleFont

+{

+public:

+

+    CPDF_TrueTypeFont();

+protected:

+    virtual FX_BOOL			_Load();

+    virtual void			LoadGlyphMap();

+};

+class CPDF_Type3Char : public CFX_Object

+{

+public:

+

+    CPDF_Type3Char();

+

+    ~CPDF_Type3Char();

+

+    FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);

+

+    FX_BOOL					m_bColored;

+

+    FX_BOOL					m_bPageRequired;

+

+

+

+    CPDF_Form*				m_pForm;

+

+    CFX_AffineMatrix		m_ImageMatrix;

+

+    CFX_DIBitmap*			m_pBitmap;

+

+

+    int						m_Width;

+

+    FX_RECT					m_BBox;

+};

+class CPDF_Type3Font : public CPDF_SimpleFont

+{

+public:

+    CPDF_Type3Font();

+    virtual ~CPDF_Type3Font();

+    void					SetPageResources(CPDF_Dictionary* pResources)

+    {

+        m_pPageResources = pResources;

+    }

+    CPDF_Type3Char*			LoadChar(FX_DWORD charcode, int level = 0);

+    virtual int				GetCharWidthF(FX_DWORD charcode, int level = 0);

+    virtual int				GetCharTypeWidth(FX_DWORD charcode)

+    {

+        return GetCharWidthF(charcode);

+    }

+    virtual void			GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0);

+    CFX_AffineMatrix&		GetFontMatrix()

+    {

+        return m_FontMatrix;

+    }

+    void					CheckType3FontMetrics();

+private:

+    virtual FX_BOOL			_Load();

+    virtual void			LoadGlyphMap() {}

+    int						m_CharWidthL[256];

+    CPDF_Dictionary*		m_pCharProcs;

+    CPDF_Dictionary*		m_pPageResources;

+    CPDF_Dictionary*		m_pFontResources;

+    CFX_MapPtrToPtr			m_CacheMap;

+    CFX_MapPtrToPtr			m_DeletedMap;

+protected:

+    CFX_AffineMatrix		m_FontMatrix;

+};

+#define CIDSET_UNKNOWN		0

+#define CIDSET_GB1			1

+#define CIDSET_CNS1			2

+#define CIDSET_JAPAN1		3

+#define CIDSET_KOREA1		4

+#define CIDSET_UNICODE		5

+class CPDF_CIDFont : public CPDF_Font

+{

+public:

+

+    CPDF_CIDFont();

+

+    virtual ~CPDF_CIDFont();

+

+    FX_BOOL					LoadGB2312();

+    virtual int				GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL);

+    virtual int				GetCharWidthF(FX_DWORD charcode, int level = 0);

+    virtual void			GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0);

+

+    FX_WORD					CIDFromCharCode(FX_DWORD charcode) const;

+

+    FX_BOOL					IsTrueType()

+    {

+        return !m_bType1;

+    }

+

+

+    virtual FX_DWORD		GetNextChar(const FX_CHAR* pString, int& offset) const;

+    virtual int				CountChar(const FX_CHAR* pString, int size) const;

+    virtual int				AppendChar(FX_LPSTR str, FX_DWORD charcode) const;

+    virtual int				GetCharSize(FX_DWORD charcode) const;

+

+

+    int						GetCharset() const

+    {

+        return m_Charset;

+    }

+

+    FX_LPCBYTE				GetCIDTransform(FX_WORD CID) const;

+

+

+

+    virtual FX_BOOL			IsVertWriting() const;

+

+    short					GetVertWidth(FX_WORD CID) const;

+

+    void					GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;

+

+    virtual FX_BOOL			IsUnicodeCompatible() const;

+    virtual FX_BOOL			IsFontStyleFromCharCode(FX_DWORD charcode) const;

+protected:

+    friend class			CPDF_Font;

+    virtual FX_BOOL			_Load();

+    virtual FX_WCHAR		_UnicodeFromCharCode(FX_DWORD charcode) const;

+    virtual FX_DWORD		_CharCodeFromUnicode(FX_WCHAR Unicode) const;

+    int				GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph);

+

+    CPDF_CMap*				m_pCMap;

+

+    CPDF_CMap*				m_pAllocatedCMap;

+

+    CPDF_CID2UnicodeMap*	m_pCID2UnicodeMap;

+

+    int						m_Charset;

+

+    FX_BOOL					m_bType1;

+

+    CPDF_StreamAcc*			m_pCIDToGIDMap;

+    FX_BOOL					m_bCIDIsGID;

+

+

+

+    FX_WORD					m_DefaultWidth;

+

+    FX_WORD*				m_pAnsiWidths;

+

+    FX_SMALL_RECT			m_CharBBox[256];

+

+    CFX_DWordArray			m_WidthList;

+

+    short					m_DefaultVY;

+

+    short					m_DefaultW1;

+

+    CFX_DWordArray			m_VertMetrics;

+

+

+    void					LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements);

+

+    void					LoadSubstFont();

+

+    FX_BOOL					m_bAdobeCourierStd;

+

+    CFX_CTTGSUBTable*			m_pTTGSUBTable;

+};

+#define PDFCS_DEVICEGRAY		1

+

+#define PDFCS_DEVICERGB			2

+#define PDFCS_DEVICECMYK		3

+#define PDFCS_CALGRAY			4

+#define PDFCS_CALRGB			5

+#define PDFCS_LAB				6

+#define PDFCS_ICCBASED			7

+#define PDFCS_SEPARATION		8

+#define PDFCS_DEVICEN			9

+#define PDFCS_INDEXED			10

+#define PDFCS_PATTERN			11

+class CPDF_ColorSpace : public CFX_Object

+{

+public:

+

+    static CPDF_ColorSpace* GetStockCS(int Family);

+

+    static CPDF_ColorSpace*	Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);

+

+    void					ReleaseCS();

+

+    int						GetBufSize() const;

+

+    FX_FLOAT*			CreateBuf();

+

+    void					GetDefaultColor(FX_FLOAT* buf) const;

+

+    int						CountComponents() const

+    {

+        return m_nComponents;

+    }

+

+    int						GetFamily() const

+    {

+        return m_Family;

+    }

+

+    virtual void			GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const

+    {

+        value = 0;

+        min = 0;

+        max = 1.0f;

+    }

+

+    FX_BOOL					sRGB() const;

+

+

+

+    virtual FX_BOOL			GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const = 0;

+

+    virtual FX_BOOL			SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const

+    {

+        return FALSE;

+    }

+

+

+

+

+    FX_BOOL					GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const;

+

+    FX_BOOL					SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const;

+

+

+    virtual void			TranslateImageLine(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels,

+            int image_width, int image_height, FX_BOOL bTransMask = FALSE) const;

+

+    CPDF_Array*&			GetArray()

+    {

+        return m_pArray;

+    }

+

+    int						GetMaxIndex() const;

+

+    virtual CPDF_ColorSpace*	GetBaseCS() const

+    {

+        return NULL;

+    }

+

+    virtual void			EnableStdConversion(FX_BOOL bEnabled);

+    CPDF_Document*			m_pDocument;

+protected:

+

+    CPDF_ColorSpace();

+

+    virtual ~CPDF_ColorSpace() {}

+    virtual FX_BOOL			v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)

+    {

+        return TRUE;

+    }

+    virtual FX_BOOL			v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const

+    {

+        return FALSE;

+    }

+    virtual FX_BOOL			v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const

+    {

+        return FALSE;

+    }

+

+    int						m_Family;

+

+    int						m_nComponents;

+

+    CPDF_Array*				m_pArray;

+

+    FX_DWORD				m_dwStdConversion;

+};

+class CPDF_Color : public CFX_Object

+{

+public:

+

+    CPDF_Color()

+    {

+        m_pBuffer = NULL;

+        m_pCS = NULL;

+    }

+

+    CPDF_Color(int family);

+

+    ~CPDF_Color();

+

+    FX_BOOL					IsNull() const

+    {

+        return m_pBuffer == NULL;

+    }

+

+    FX_BOOL					IsEqual(const CPDF_Color& other) const;

+

+    FX_BOOL					IsPattern() const

+    {

+        return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;

+    }

+

+    void					Copy(const CPDF_Color* pSrc);

+

+    void					SetColorSpace(CPDF_ColorSpace* pCS);

+

+    void					SetValue(FX_FLOAT* comp);

+

+    void					SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);

+

+    FX_BOOL					GetRGB(int& R, int& G, int& B) const;

+

+    CPDF_Pattern*			GetPattern() const;

+

+    CPDF_ColorSpace*		GetPatternCS() const;

+

+    FX_FLOAT*			GetPatternColor() const;

+

+    CPDF_ColorSpace*		m_pCS;

+

+    FX_FLOAT*			m_pBuffer;

+protected:

+    void	ReleaseBuffer();

+    void	ReleaseColorSpace();

+};

+#define PATTERN_TILING		1

+#define PATTERN_SHADING		2

+class CPDF_Pattern : public CFX_Object

+{

+public:

+

+    virtual ~CPDF_Pattern() {}

+

+    CPDF_Object*			m_pPatternObj;

+

+    int						m_PatternType;

+

+    CFX_AffineMatrix		m_Pattern2Form;

+    CFX_AffineMatrix		m_ParentMatrix;

+

+    CPDF_Document*			m_pDocument;

+

+protected:

+

+    CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix)

+    {

+        if (pParentMatrix) {

+            m_ParentMatrix = *pParentMatrix;

+        }

+    }

+};

+class CPDF_TilingPattern : public CPDF_Pattern

+{

+public:

+

+    CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix);

+

+    virtual ~CPDF_TilingPattern();

+

+    FX_BOOL				Load();

+

+

+

+    FX_BOOL				m_bColored;

+

+    CFX_FloatRect		m_BBox;

+

+    FX_FLOAT			m_XStep;

+

+    FX_FLOAT			m_YStep;

+

+

+

+    CPDF_Form*			m_pForm;

+};

+class CPDF_ShadingPattern : public CPDF_Pattern

+{

+public:

+

+    CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix);

+

+    virtual ~CPDF_ShadingPattern();

+

+    CPDF_Object*		m_pShadingObj;

+

+    FX_BOOL				m_bShadingObj;

+

+    FX_BOOL				Load();

+

+    FX_BOOL				Reload();

+

+    int					m_ShadingType;

+

+    CPDF_ColorSpace*	m_pCS;

+

+

+    CPDF_Function*		m_pFunctions[4];

+

+    int					m_nFuncs;

+protected:

+    void	Clear();

+};

+struct CPDF_MeshVertex {

+    FX_FLOAT x, y;

+    FX_FLOAT r, g, b;

+};

+class CPDF_MeshStream : public CFX_Object

+{

+public:

+

+    FX_BOOL				Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS);

+

+    FX_DWORD			GetFlag();

+

+    void				GetCoords(FX_FLOAT& x, FX_FLOAT& y);

+

+    void				GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);

+

+    FX_DWORD 			GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);

+

+    FX_BOOL				GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap);

+    CPDF_Function**	m_pFuncs;

+    CPDF_ColorSpace*	m_pCS;

+    FX_DWORD			m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;

+    FX_DWORD			m_CoordMax, m_CompMax;

+    FX_FLOAT			m_xmin, m_xmax, m_ymin, m_ymax;

+    FX_FLOAT			m_ColorMin[8], m_ColorMax[8];

+    CPDF_StreamAcc		m_Stream;

+    CFX_BitStream		m_BitStream;

+};

+#define PDF_IMAGE_NO_COMPRESS				0x0000

+#define PDF_IMAGE_LOSSY_COMPRESS			0x0001

+#define PDF_IMAGE_LOSSLESS_COMPRESS			0x0002

+#define PDF_IMAGE_MASK_LOSSY_COMPRESS		0x0004

+#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS	0x0008

+class CPDF_ImageSetParam

+{

+public:

+    CPDF_ImageSetParam()

+        : pMatteColor(NULL)

+        , nQuality(80)

+    {

+    }

+    FX_ARGB* pMatteColor;

+    FX_INT32 nQuality;

+};

+class CPDF_Image : public CFX_Object

+{

+public:

+

+    CPDF_Image(CPDF_Document* pDoc);

+

+    ~CPDF_Image();

+

+    FX_BOOL					LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);

+

+    void					Release();

+

+    CPDF_Image*				Clone();

+

+    FX_BOOL					IsInline()

+    {

+        return m_bInline;

+    }

+

+    void					SetInlineDict(CPDF_Dictionary* pDict)

+    {

+        m_pInlineDict = pDict;

+    }

+

+    CPDF_Dictionary*		GetInlineDict() const

+    {

+        return m_pInlineDict;

+    }

+

+    CPDF_Stream*			GetStream() const

+    {

+        return m_pStream;

+    }

+

+    CPDF_Dictionary*		GetDict() const

+    {

+        return m_pStream->GetDict();

+    }

+

+    CPDF_Dictionary*		GetOC() const

+    {

+        return m_pOC;

+    }

+

+    CPDF_Document*			GetDocument() const

+    {

+        return m_pDocument;

+    }

+

+

+

+    FX_INT32				GetPixelHeight() const

+    {

+        return m_Height;

+    }

+

+    FX_INT32				GetPixelWidth() const

+    {

+        return m_Width;

+    }

+

+

+    FX_BOOL					IsMask() const

+    {

+        return m_bIsMask;

+    }

+

+    FX_BOOL					IsInterpol() const

+    {

+        return m_bInterpolate;

+    }

+

+    CFX_DIBSource*			LoadDIBSource(CFX_DIBSource** ppMask = NULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const;

+

+

+

+    void					SetImage(const CFX_DIBitmap* pDIBitmap, FX_INT32 iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFileRead = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam = NULL);

+

+    void					SetJpegImage(FX_BYTE* pImageData, FX_DWORD size);

+

+    void					SetJpegImage(IFX_FileRead *pFile);

+

+    void					ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);

+

+public:

+    FX_BOOL					StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);

+    FX_BOOL					Continue(IFX_Pause* pPause);

+    CFX_DIBSource*			DetachBitmap();

+    CFX_DIBSource*			DetachMask();

+    CFX_DIBSource*			m_pDIBSource;

+    CFX_DIBSource*			m_pMask;

+    FX_DWORD				m_MatteColor;

+private:

+

+    CPDF_Stream*			m_pStream;

+    FX_BOOL					m_bInline;

+    CPDF_Dictionary*		m_pInlineDict;

+

+    FX_INT32				m_Height;

+

+    FX_INT32				m_Width;

+

+    FX_BOOL					m_bIsMask;

+

+    FX_BOOL					m_bInterpolate;

+

+    CPDF_Document*			m_pDocument;

+

+    CPDF_Dictionary*		m_pOC;

+    CPDF_Dictionary*	InitJPEG(FX_LPBYTE pData, FX_DWORD size);

+};

+#endif

diff --git a/core/include/fpdfapi/fpdf_serial.h b/core/include/fpdfapi/fpdf_serial.h
new file mode 100644
index 0000000..9b1642e
--- /dev/null
+++ b/core/include/fpdfapi/fpdf_serial.h
@@ -0,0 +1,203 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_SERIAL_

+#define _FPDF_SERIAL_

+#ifndef _FPDF_PAGE_

+#include "fpdf_page.h"

+#endif

+#ifndef _FPDF_PAGEOBJ_H_

+#include "fpdf_pageobj.h"

+#endif

+class CPDF_ObjectStream;

+class CPDF_XRefStream;

+CFX_ByteTextBuf& operator << (CFX_ByteTextBuf& buf, const CPDF_Object* pObj);

+class CPDF_ObjArchiveSaver : public CFX_ArchiveSaver

+{

+public:

+

+    friend CPDF_ObjArchiveSaver&	operator << (CPDF_ObjArchiveSaver& ar, const CPDF_Object* pObj);

+protected:

+

+    CFX_MapPtrToPtr			m_ObjectMap;

+};

+class CPDF_ObjArchiveLoader : public CFX_ArchiveLoader

+{

+public:

+

+    CPDF_ObjArchiveLoader(FX_LPCBYTE pData, FX_DWORD dwSize) : CFX_ArchiveLoader(pData, dwSize),

+        m_IndirectObjects(NULL) {}

+

+    friend CPDF_ObjArchiveLoader&	operator >> (CPDF_ObjArchiveLoader& ar, CPDF_Object*& pObj);

+protected:

+

+    CPDF_IndirectObjects		m_IndirectObjects;

+};

+class CPDF_PageArchiveSaver : public CPDF_ObjArchiveSaver

+{

+public:

+

+    CPDF_PageArchiveSaver(CPDF_PageObjects* pPageObjs);

+

+    friend CPDF_PageArchiveSaver&	operator << (CPDF_PageArchiveSaver& ar, CPDF_PageObject* pObj);

+

+

+

+    friend CPDF_PageArchiveSaver&	operator << (CPDF_PageArchiveSaver& ar, CPDF_ClipPath clip_path);

+

+    friend CPDF_PageArchiveSaver&	operator << (CPDF_PageArchiveSaver& ar, CPDF_GraphState graph_state);

+

+    friend CPDF_PageArchiveSaver&	operator << (CPDF_PageArchiveSaver& ar, CPDF_TextState text_state);

+

+    friend CPDF_PageArchiveSaver&	operator << (CPDF_PageArchiveSaver& ar, CPDF_ColorState color_state);

+

+    friend CPDF_PageArchiveSaver&	operator << (CPDF_PageArchiveSaver& ar, CPDF_GeneralState general_state);

+

+protected:

+

+    CPDF_ClipPath		m_LastClipPath;

+

+    CPDF_GraphState		m_LastGraphState;

+

+    CPDF_ColorState		m_LastColorState;

+

+    CPDF_TextState		m_LastTextState;

+

+    CPDF_GeneralState	m_LastGeneralState;

+

+    CPDF_PageObjects*	m_pCurPage;

+};

+class CPDF_PageArchiveLoader : public CPDF_ObjArchiveLoader

+{

+public:

+

+    CPDF_PageArchiveLoader(CPDF_PageObjects* pPageObjs, FX_LPCBYTE pData, FX_DWORD dwSize);

+

+    friend CPDF_PageArchiveLoader&	operator >> (CPDF_PageArchiveLoader& ar, CPDF_PageObject*& pObj);

+

+

+

+    friend CPDF_PageArchiveLoader&	operator >> (CPDF_PageArchiveLoader& ar, CPDF_ClipPath& clip_path);

+

+    friend CPDF_PageArchiveLoader&	operator >> (CPDF_PageArchiveLoader& ar, CPDF_GraphState& graph_state);

+

+    friend CPDF_PageArchiveLoader&	operator >> (CPDF_PageArchiveLoader& ar, CPDF_TextState& text_state);

+

+    friend CPDF_PageArchiveLoader&	operator >> (CPDF_PageArchiveLoader& ar, CPDF_ColorState& color_state);

+

+    friend CPDF_PageArchiveLoader&	operator >> (CPDF_PageArchiveLoader& ar, CPDF_GeneralState& general_state);

+

+protected:

+    void				PostProcColor(CPDF_Color& color);

+

+    CPDF_Object*		AddResource(CPDF_Object* pSrcObj, FX_LPCSTR type);

+

+    CPDF_ClipPath		m_LastClipPath;

+

+    CPDF_GraphState		m_LastGraphState;

+

+    CPDF_ColorState		m_LastColorState;

+

+    CPDF_TextState		m_LastTextState;

+

+    CPDF_GeneralState	m_LastGeneralState;

+

+    CPDF_PageObjects*	m_pCurPage;

+

+    CFX_MapPtrToPtr		m_ObjectMap;

+};

+#define FPDFCREATE_INCREMENTAL		1

+#define FPDFCREATE_NO_ORIGINAL		2

+#define FPDFCREATE_PROGRESSIVE		4

+#define FPDFCREATE_OBJECTSTREAM		8

+class CPDF_Creator : public CFX_Object

+{

+public:

+

+    CPDF_Creator(CPDF_Document* pDoc);

+

+    ~CPDF_Creator();

+

+    FX_BOOL				Create(FX_LPCWSTR filename, FX_DWORD flags = 0);

+

+    FX_BOOL				Create(FX_LPCSTR filename, FX_DWORD flags = 0);

+

+    FX_BOOL				Create(IFX_StreamWrite* pFile, FX_DWORD flags = 0);

+

+    FX_INT32			Continue(IFX_Pause *pPause = NULL);

+

+    FX_BOOL				SetFileVersion(FX_INT32 fileVersion = 17);

+protected:

+

+    CPDF_Document*		m_pDocument;

+

+    CPDF_Parser*		m_pParser;

+

+    FX_BOOL				m_bCompress;

+

+    FX_BOOL				m_bSecurityChanged;

+

+    CPDF_Dictionary*	m_pEncryptDict;

+    FX_DWORD			m_dwEnryptObjNum;

+    FX_BOOL				m_bEncryptCloned;

+

+    FX_BOOL				m_bStandardSecurity;

+

+    CPDF_CryptoHandler*	m_pCryptoHandler;

+    FX_BOOL				m_bNewCrypto;

+

+    FX_BOOL				m_bEncryptMetadata;

+

+    CPDF_Object*		m_pMetadata;

+

+    CPDF_XRefStream*	m_pXRefStream;

+

+    FX_INT32			m_ObjectStreamSize;

+

+    FX_DWORD			m_dwLastObjNum;

+    FX_BOOL				Create(FX_DWORD flags);

+    void				ResetStandardSecurity();

+    void				Clear();

+    FX_INT32			WriteDoc_Stage1(IFX_Pause *pPause);

+    FX_INT32			WriteDoc_Stage2(IFX_Pause *pPause);

+    FX_INT32			WriteDoc_Stage3(IFX_Pause *pPause);

+    FX_INT32			WriteDoc_Stage4(IFX_Pause *pPause);

+

+    CFX_FileBufferArchive	m_File;

+

+    FX_FILESIZE			m_Offset;

+    void				InitOldObjNumOffsets();

+    void				InitNewObjNumOffsets();

+    void				AppendNewObjNum(FX_DWORD objbum);

+    FX_INT32			WriteOldIndirectObject(FX_DWORD objnum);

+    FX_INT32			WriteOldObjs(IFX_Pause *pPause);

+    FX_INT32			WriteNewObjs(FX_BOOL bIncremental, IFX_Pause *pPause);

+    FX_INT32			WriteIndirectObj(const CPDF_Object* pObj);

+    FX_INT32			WriteDirectObj(FX_DWORD objnum, const CPDF_Object* pObj, FX_BOOL bEncrypt = TRUE);

+    FX_INT32			WriteIndirectObjectToStream(const CPDF_Object* pObj);

+    FX_INT32			WriteIndirectObj(FX_DWORD objnum, const CPDF_Object* pObj);

+    FX_INT32			WriteIndirectObjectToStream(FX_DWORD objnum, FX_LPCBYTE pBuffer, FX_DWORD dwSize);

+    FX_INT32			AppendObjectNumberToXRef(FX_DWORD objnum);

+    void				InitID(FX_BOOL bDefault = TRUE);

+    FX_INT32			WriteStream(const CPDF_Object* pStream, FX_DWORD objnum, CPDF_CryptoHandler* pCrypto);

+

+    FX_INT32			m_iStage;

+    FX_DWORD			m_dwFlags;

+    FX_POSITION			m_Pos;

+    FX_FILESIZE			m_XrefStart;

+

+    CFX_FileSizeListArray	m_ObjectOffset;

+

+    CFX_DWordListArray		m_ObjectSize;

+    CFX_DWordArray		m_NewObjNumArray;

+

+    CPDF_Array*			m_pIDArray;

+

+    FX_INT32			m_FileVersion;

+    friend class CPDF_ObjectStream;

+    friend class CPDF_XRefStream;

+};

+#endif

diff --git a/core/include/fpdfapi/fpdfapi.h b/core/include/fpdfapi/fpdfapi.h
new file mode 100644
index 0000000..e9fc528
--- /dev/null
+++ b/core/include/fpdfapi/fpdfapi.h
@@ -0,0 +1,15 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDFAPI_H_

+#define _FPDFAPI_H_

+#include "../../include/fxcrt/fx_basic.h"

+#include "../../include/fxge/fx_ge.h"

+#include "fpdf_module.h"

+#include "fpdf_pageobj.h"

+#include "fpdf_render.h"

+#include "fpdf_serial.h"

+#endif

diff --git a/core/include/fpdfdoc/fpdf_ap.h b/core/include/fpdfdoc/fpdf_ap.h
new file mode 100644
index 0000000..4b6a371
--- /dev/null
+++ b/core/include/fpdfdoc/fpdf_ap.h
@@ -0,0 +1,92 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#define _FPDF_AP_H_

+#include "../fxcrt/fx_basic.h"

+#include "../fpdfapi/fpdf_parser.h"

+#include "fpdf_vt.h"

+class IPVT_FontMap

+{

+public:

+

+    virtual CPDF_Font*						GetPDFFont(FX_INT32 nFontIndex) = 0;

+

+    virtual CFX_ByteString					GetPDFFontAlias(FX_INT32 nFontIndex) = 0;

+};

+struct CPVT_Dash {

+

+    CPVT_Dash(FX_INT32 dash, FX_INT32 gap, FX_INT32 phase) : nDash(dash), nGap(gap), nPhase(phase)

+    {}

+

+    FX_INT32			nDash;

+

+    FX_INT32			nGap;

+

+    FX_INT32			nPhase;

+};

+#define CT_TRANSPARENT		0

+#define	CT_GRAY				1

+#define	CT_RGB				2

+#define	CT_CMYK				3

+struct CPVT_Color {

+

+    CPVT_Color(FX_INT32 type = 0, FX_FLOAT color1 = 0.0f, FX_FLOAT color2 = 0.0f, FX_FLOAT color3 = 0.0f, FX_FLOAT color4 = 0.0f)

+        : nColorType(type), fColor1(color1), fColor2(color2), fColor3(color3), fColor4(color4)

+    {}

+

+    FX_INT32			nColorType;

+    FX_FLOAT			fColor1;

+    FX_FLOAT			fColor2;

+    FX_FLOAT			fColor3;

+    FX_FLOAT			fColor4;

+};

+class CPVT_Provider : public IPDF_VariableText_Provider

+{

+public:

+

+    CPVT_Provider(IPVT_FontMap * pFontMap);

+

+    virtual ~CPVT_Provider();

+

+    FX_INT32						GetCharWidth(FX_INT32 nFontIndex, FX_WORD word, FX_INT32 nWordStyle);

+

+    FX_INT32						GetTypeAscent(FX_INT32 nFontIndex);

+

+    FX_INT32						GetTypeDescent(FX_INT32 nFontIndex);

+

+    FX_INT32						GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex);

+

+    FX_BOOL							IsLatinWord(FX_WORD word);

+

+    FX_INT32						GetDefaultFontIndex();

+private:

+

+    IPVT_FontMap *	m_pFontMap;

+};

+#define PBS_SOLID			0

+#define PBS_DASH			1

+#define PBS_BEVELED			2

+#define PBS_INSET			3

+#define PBS_UNDERLINED		4

+class CPVT_GenerateAP

+{

+public:

+

+    static FX_BOOL							GenerateTextFieldAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);

+

+    static FX_BOOL							GenerateComboBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);

+

+    static FX_BOOL							GenerateListBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);

+

+    static CFX_ByteString					GenerateEditAP(IPVT_FontMap * pFontMap, IPDF_VariableText_Iterator * pIterator,

+            const CPDF_Point & ptOffset, FX_BOOL bContinuous, FX_WORD SubWord = 0, const CPVT_WordRange * pVisible = NULL);

+

+    static CFX_ByteString					GenerateBorderAP(const CPDF_Rect & rect, FX_FLOAT fWidth,

+            const CPVT_Color & color, const CPVT_Color & crLeftTop, const CPVT_Color & crRightBottom,

+            FX_INT32 nStyle, const CPVT_Dash & dash);

+

+    static CFX_ByteString					GenerateColorAP(const CPVT_Color & color, const FX_BOOL & bFillOrStroke);

+};

diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h
new file mode 100644
index 0000000..fc19441
--- /dev/null
+++ b/core/include/fpdfdoc/fpdf_doc.h
@@ -0,0 +1,1792 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_DOC_H_

+#define _FPDF_DOC_H_

+#ifndef _FPDF_PARSER_

+#include "../fpdfapi/fpdf_parser.h"

+#endif

+#ifndef _FPDF_RENDER_

+#include "../fpdfapi/fpdf_render.h"

+#endif

+class CPDF_Action;

+class CPDF_Annot;

+class CPDF_AnnotList;

+class CPDF_Bookmark;

+class CPDF_BookmarkTree;

+class CPDF_Dest;

+class CPDF_Link;

+class CPDF_LinkList;

+class CPDF_Metadata;

+class CPDF_NameTree;

+class CPDF_NumberTree;

+class CPDF_TextObject;

+class CPDF_ViewerPreferences;

+class CPDF_Page;

+class CPDF_RenderOptions;

+class CXML_Element;

+class CPDF_OCContext;

+class CPDF_DocJSActions;

+class CPDF_ActionFields;

+class CPDF_AAction;

+class CPDF_FileSpec;

+class CPDF_IconFit;

+class CPDF_DefaultAppearance;

+class CPDF_InterForm;

+class CPDF_FormField;

+class CPDF_FormNotify;

+class CPDF_FormControl;

+class CPDF_LWinParam;

+class CFieldTree;

+class CPDF_ApSettings;

+class CPDF_NameTree : public CFX_Object

+{

+public:

+

+    CPDF_NameTree(CPDF_Dictionary* pRoot)

+    {

+        m_pRoot = pRoot;

+    }

+

+    CPDF_NameTree(CPDF_Document* pDoc, FX_BSTR category);

+

+    CPDF_Object*		LookupValue(int nIndex, CFX_ByteString& csName) const;

+

+    CPDF_Object*		LookupValue(const CFX_ByteString& csName) const;

+

+    CPDF_Array*			LookupNamedDest(CPDF_Document* pDoc, FX_BSTR sName);

+

+    int					GetIndex(const CFX_ByteString& csName) const;

+

+    int					GetCount() const;

+

+

+    CPDF_Dictionary*	GetRoot() const

+    {

+        return m_pRoot;

+    }

+

+protected:

+

+    CPDF_Dictionary*		m_pRoot;

+};

+class CPDF_BookmarkTree : public CFX_Object

+{

+public:

+

+    CPDF_BookmarkTree(CPDF_Document* pDoc)

+    {

+        m_pDocument = pDoc;

+    }

+public:

+

+

+

+    CPDF_Bookmark		GetFirstChild(CPDF_Bookmark parent);

+

+    CPDF_Bookmark		GetNextSibling(CPDF_Bookmark bookmark);

+

+

+    CPDF_Document*		GetDocument() const

+    {

+        return m_pDocument;

+    }

+protected:

+

+    CPDF_Document*		m_pDocument;

+};

+#define PDFBOOKMARK_ITALIC			1

+#define PDFBOOKMARK_BOLD			2

+class CPDF_Bookmark : public CFX_Object

+{

+public:

+

+    CPDF_Bookmark(CPDF_Dictionary* pDict = NULL)

+    {

+        m_pDict = pDict;

+    }

+

+    operator CPDF_Dictionary*() const

+    {

+        return m_pDict;

+    }

+

+

+

+    FX_DWORD			GetColorRef();

+

+    FX_DWORD			GetFontStyle();

+

+    CFX_WideString		GetTitle();

+

+

+

+

+    CPDF_Dest			GetDest(CPDF_Document* pDocument);

+

+    CPDF_Action			GetAction();

+

+

+    CPDF_Dictionary*	m_pDict;

+};

+#define PDFZOOM_XYZ					1

+#define PDFZOOM_FITPAGE				2

+#define PDFZOOM_FITHORZ				3

+#define PDFZOOM_FITVERT				4

+#define PDFZOOM_FITRECT				5

+#define PDFZOOM_FITBBOX				6

+#define PDFZOOM_FITBHORZ			7

+

+#define PDFZOOM_FITBVERT			8

+class CPDF_Dest : public CFX_Object

+{

+public:

+

+    CPDF_Dest(CPDF_Object* pObj = NULL)

+    {

+        m_pObj = pObj;

+    }

+

+    operator CPDF_Object* () const

+    {

+        return m_pObj;

+    }

+

+    CFX_ByteString		GetRemoteName();

+

+    int					GetPageIndex(CPDF_Document* pDoc);

+

+    FX_DWORD			GetPageObjNum();

+

+    int					GetZoomMode();

+

+    FX_FLOAT			GetParam(int index);

+

+

+    CPDF_Object*		m_pObj;

+};

+class CPDF_OCContext : public CFX_Object, public IPDF_OCContext

+{

+public:

+

+    enum UsageType {

+        View = 0,

+        Design,

+        Print,

+        Export

+    };

+

+    CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType = View);

+

+    virtual ~CPDF_OCContext();

+

+    CPDF_Document*	GetDocument() const

+    {

+        return m_pDocument;

+    }

+

+    UsageType		GetUsageType() const

+    {

+        return m_eUsageType;

+    }

+

+    FX_BOOL			CheckOCGVisible(const CPDF_Dictionary *pOCGDict);

+

+    void			ResetOCContext();

+protected:

+

+    FX_BOOL			LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;

+

+    FX_BOOL			LoadOCGState(const CPDF_Dictionary *pOCGDict) const;

+

+    FX_BOOL			GetOCGVisible(const CPDF_Dictionary *pOCGDict);

+

+    FX_BOOL			GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel = 0);

+

+    FX_BOOL			LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig);

+

+    CPDF_Document		*m_pDocument;

+

+    UsageType			m_eUsageType;

+

+    CFX_MapPtrTemplate<const CPDF_Dictionary*, void*>	m_OCGStates;

+};

+class CPDF_LWinParam : public CFX_Object

+{

+public:

+

+    CPDF_LWinParam(CPDF_Dictionary* pDict)

+    {

+        m_pDict = pDict;

+    }

+

+    operator CPDF_Dictionary* () const

+    {

+        return m_pDict;

+    }

+

+    inline CFX_ByteString	GetFileName()

+    {

+        return m_pDict->GetString("F");

+    }

+

+

+    inline CFX_ByteString	GetDefaultDirectory()

+    {

+        return m_pDict->GetString("D");

+    }

+

+

+    inline CFX_ByteString	GetOperation()

+    {

+        return m_pDict->GetString("O");

+    }

+

+

+    inline CFX_ByteString	GetParameter()

+    {

+        return m_pDict->GetString("P");

+    }

+

+    CPDF_Dictionary*		m_pDict;

+};

+class CPDF_ActionFields : public CFX_Object

+{

+public:

+

+    CPDF_ActionFields(const CPDF_Action* pAction)

+    {

+        m_pAction = (CPDF_Action*)pAction;

+    }

+

+    operator CPDF_Action*() const

+    {

+        return m_pAction;

+    }

+

+    FX_DWORD				GetFieldsCount() const;

+

+    void					GetAllFields(CFX_PtrArray& fieldObjects) const;

+

+    CPDF_Object*			GetField(FX_DWORD iIndex) const;

+

+    CPDF_Action*			m_pAction;

+};

+

+#define PDFNAMED_NEXTPAGE		1

+#define PDFNAMED_PREVPAGE		2

+#define PDFNAMED_FIRSTPAGE		3

+#define PDFNAMED_LASTPAGE		4

+#define PDFJS_MAXLENGTH			64

+class CPDF_Action : public CFX_Object

+{

+public:

+

+    CPDF_Action(CPDF_Dictionary* pDict = NULL)

+    {

+        m_pDict = pDict;

+    }

+

+    operator CPDF_Dictionary* () const

+    {

+        return m_pDict;

+    }

+

+    enum ActionType {

+        Unknown = 0,

+        GoTo,

+        GoToR,

+        GoToE,

+        Launch,

+        Thread,

+        URI,

+        Sound,

+        Movie,

+        Hide,

+        Named,

+        SubmitForm,

+        ResetForm,

+        ImportData,

+        JavaScript,

+        SetOCGState,

+        Rendition,

+        Trans,

+        GoTo3DView

+    };

+

+    CFX_ByteString		GetTypeName() const

+    {

+        return m_pDict->GetString("S");

+    }

+

+    ActionType			GetType() const;

+

+

+

+    CPDF_Dest			GetDest(CPDF_Document* pDoc) const;

+

+

+

+

+

+    CFX_WideString		GetFilePath() const;

+

+

+

+

+    FX_BOOL				GetNewWindow() const

+    {

+        return m_pDict->GetBoolean("NewWindow");

+    }

+

+

+

+

+    CPDF_LWinParam		GetWinParam() const;

+

+

+

+

+    CFX_ByteString		GetURI(CPDF_Document* pDoc) const;

+

+

+

+

+    FX_BOOL				GetMouseMap() const

+    {

+        return m_pDict->GetBoolean("IsMap");

+    }

+

+

+

+

+    CPDF_ActionFields	GetWidgets() const

+    {

+        return this;

+    }

+

+

+

+

+    FX_BOOL				GetHideStatus() const

+    {

+        return m_pDict->GetBoolean("H", TRUE);

+    }

+

+

+

+

+    CFX_ByteString		GetNamedAction() const

+    {

+        return m_pDict->GetString("N");

+    }

+

+

+

+

+    FX_DWORD			GetFlags() const

+    {

+        return m_pDict->GetInteger("Flags");

+    }

+

+

+

+

+    CFX_WideString		GetJavaScript() const;

+

+

+

+

+    CPDF_Dictionary*	GetAnnot() const;

+

+

+

+

+    FX_INT32			GetOperationType() const;

+

+

+

+

+    CPDF_Stream*		GetSoundStream() const

+    {

+        return m_pDict->GetStream("Sound");

+    }

+

+    FX_FLOAT			GetVolume() const

+    {

+        return m_pDict->GetNumber("Volume");

+    }

+

+    FX_BOOL				IsSynchronous() const

+    {

+        return m_pDict->GetBoolean("Synchronous");

+    }

+

+    FX_BOOL				IsRepeat() const

+    {

+        return m_pDict->GetBoolean("Repeat");

+    }

+

+    FX_BOOL				IsMixPlay() const

+    {

+        return m_pDict->GetBoolean("Mix");

+    }

+

+

+

+

+    FX_DWORD			GetSubActionsCount() const;

+

+    CPDF_Action			GetSubAction(FX_DWORD iIndex) const;

+

+

+    CPDF_Dictionary*	m_pDict;

+};

+class CPDF_AAction : public CFX_Object

+{

+public:

+

+    CPDF_AAction(CPDF_Dictionary* pDict = NULL)

+    {

+        m_pDict = pDict;

+    }

+

+    operator CPDF_Dictionary*()	const

+    {

+        return m_pDict;

+    }

+

+    enum AActionType {

+        CursorEnter = 0,

+        CursorExit,

+        ButtonDown,

+        ButtonUp,

+        GetFocus,

+        LoseFocus,

+        PageOpen,

+        PageClose,

+        PageVisible,

+        PageInvisible,

+        OpenPage,

+        ClosePage,

+        KeyStroke,

+        Format,

+        Validate,

+        Calculate,

+        CloseDocument,

+        SaveDocument,

+        DocumentSaved,

+        PrintDocument,

+        DocumentPrinted

+    };

+

+    FX_BOOL				ActionExist(AActionType eType) const;

+

+    CPDF_Action			GetAction(AActionType eType) const;

+

+    FX_POSITION			GetStartPos() const;

+

+    CPDF_Action			GetNextAction(FX_POSITION& pos, AActionType& eType) const;

+

+    CPDF_Dictionary*	m_pDict;

+};

+class CPDF_DocJSActions : public CFX_Object

+{

+public:

+    CPDF_DocJSActions(CPDF_Document* pDoc);

+

+

+    int					CountJSActions() const;

+

+    CPDF_Action			GetJSAction(int index, CFX_ByteString& csName) const;

+

+    CPDF_Action			GetJSAction(const CFX_ByteString& csName) const;

+

+    int					FindJSAction(const CFX_ByteString& csName) const;

+

+

+    CPDF_Document*		GetDocument() const

+    {

+        return m_pDocument;

+    }

+

+protected:

+

+    CPDF_Document*		m_pDocument;

+};

+class CPDF_FileSpec : public CFX_Object

+{

+public:

+

+    CPDF_FileSpec();

+

+    CPDF_FileSpec(CPDF_Object *pObj)

+    {

+        m_pObj = pObj;

+    }

+

+    operator CPDF_Object*() const

+    {

+        return m_pObj;

+    }

+

+    FX_BOOL			IsURL() const;

+

+    FX_BOOL			GetFileName(CFX_WideString &wsFileName) const;

+

+    CPDF_Stream*	GetFileStream() const;

+

+    void			SetFileName(FX_WSTR wsFileName, FX_BOOL bURL = FALSE);

+protected:

+

+    CPDF_Object		*m_pObj;

+};

+class CPDF_LinkList : public CFX_Object

+{

+public:

+

+    CPDF_LinkList(CPDF_Document* pDoc)

+    {

+        m_pDocument = pDoc;

+    }

+

+    ~CPDF_LinkList();

+

+    CPDF_Link			GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);

+

+    int					CountLinks(CPDF_Page* pPage);

+

+    CPDF_Link			GetLink(CPDF_Page* pPage, int index);

+

+    CPDF_Document*		GetDocument() const

+    {

+        return m_pDocument;

+    }

+protected:

+

+    CPDF_Document*		m_pDocument;

+

+    CFX_MapPtrToPtr		m_PageMap;

+

+    CFX_PtrArray*		GetPageLinks(CPDF_Page* pPage);

+

+    void				LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);

+};

+class CPDF_Link : public CFX_Object

+{

+public:

+

+    CPDF_Link(CPDF_Dictionary* pDict = NULL)

+    {

+        m_pDict = pDict;

+    }

+

+    operator CPDF_Dictionary*() const

+    {

+        return m_pDict;

+    }

+

+    CFX_FloatRect		GetRect();

+

+

+

+    CPDF_Dest			GetDest(CPDF_Document* pDoc);

+

+    CPDF_Action			GetAction();

+

+

+    CPDF_Dictionary*	m_pDict;

+};

+#define ANNOTFLAG_INVISIBLE			1

+#define ANNOTFLAG_HIDDEN			2

+#define ANNOTFLAG_PRINT				4

+#define ANNOTFLAG_NOZOOM			8

+#define ANNOTFLAG_NOROTATE			0x10

+#define ANNOTFLAG_NOVIEW			0x20

+#define ANNOTFLAG_READONLY			0x40

+#define ANNOTFLAG_LOCKED			0x80

+#define ANNOTFLAG_TOGGLENOVIEW		0x100

+class CPDF_Annot : public CFX_PrivateData, public CFX_Object

+{

+public:

+

+    CPDF_Annot(CPDF_Dictionary* pDict);

+

+    ~CPDF_Annot();

+

+    CPDF_Dictionary*	m_pAnnotDict;

+

+    CFX_ByteString		GetSubType() const;

+

+    FX_DWORD			GetFlags() const

+    {

+        return m_pAnnotDict->GetInteger("F");

+    }

+

+    void				GetRect(CFX_FloatRect& rect) const;

+

+    enum AppearanceMode	{

+        Normal,

+        Rollover,

+        Down

+    };

+

+    FX_BOOL				DrawAppearance(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,

+                                       AppearanceMode mode, const CPDF_RenderOptions* pOptions);

+

+    FX_BOOL				DrawInContext(const CPDF_Page* pPage, const CPDF_RenderContext* pContext,

+                                      const CFX_AffineMatrix* pUser2Device, AppearanceMode mode);

+

+    void				ClearCachedAP();

+

+

+    void				DrawBorder(CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,

+                                   const CPDF_RenderOptions* pOptions);

+

+    CPDF_PageObject*	GetBorder(FX_BOOL bPrint, const CPDF_RenderOptions* pOptions);

+

+

+

+    int					CountIRTNotes();

+

+    CPDF_Annot*			GetIRTNote(int index);

+

+

+    CPDF_Form*			GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);

+private:

+

+    CFX_MapPtrToPtr		m_APMap;

+protected:

+    friend class		CPDF_AnnotList;

+

+    CPDF_AnnotList*		m_pList;

+

+    CPDF_Reference*		NewAnnotRef();

+};

+class CPDF_AnnotList : public CFX_Object

+{

+public:

+

+    CPDF_AnnotList(CPDF_Page* pPage);

+

+    ~CPDF_AnnotList();

+

+    void	GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CFX_Matrix &matrix) const;

+

+    void	GetAnnotRect(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CPDF_Rect &rtAnnot) const;

+

+    void				DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,

+                                      CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,

+                                      CPDF_RenderOptions* pOptions);

+

+    void				DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,

+                                      FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,

+                                      CPDF_RenderOptions* pOptions)

+    {

+        DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, NULL);

+    }

+

+    void				DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,

+                                      FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,

+                                      CPDF_RenderOptions* pOptions, FX_RECT *pClipRect)

+    {

+        DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, pClipRect);

+    }

+

+    void				DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext,

+                                      FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_DWORD dwAnnotFlags,

+                                      CPDF_RenderOptions* pOptions, FX_RECT* pClipRect);

+

+

+

+    CPDF_Annot*			GetAt(int index)

+    {

+        return (CPDF_Annot*)m_AnnotList.GetAt(index);

+    }

+

+    int					Count()

+    {

+        return m_AnnotList.GetSize();

+    }

+

+    int					GetIndex(CPDF_Annot* pAnnot);

+

+

+    CPDF_Document*		GetDocument() const

+    {

+        return m_pDocument;

+    }

+protected:

+

+    CFX_PtrArray		m_AnnotList;

+

+    CPDF_Dictionary*	m_pPageDict;

+

+    CPDF_Document*		m_pDocument;

+

+    CFX_PtrArray		m_Borders;

+

+    void				DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,

+                                    CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix,

+                                    FX_BOOL bWidget, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect);

+    friend class		CPDF_Annot;

+};

+#define COLORTYPE_TRANSPARENT	0

+#define COLORTYPE_GRAY			1

+#define COLORTYPE_RGB			2

+#define COLORTYPE_CMYK			3

+class CPDF_DefaultAppearance : public CFX_Object

+{

+public:

+

+    CPDF_DefaultAppearance(const CFX_ByteString& csDA = "")

+    {

+        m_csDA = csDA;

+    }

+

+    CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA)

+    {

+        m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;

+    }

+

+

+    operator CFX_ByteString() const

+    {

+        return m_csDA;

+    }

+

+    const CPDF_DefaultAppearance& operator =(const CFX_ByteString& csDA)

+    {

+        m_csDA = csDA;

+        return *this;

+    }

+

+    const CPDF_DefaultAppearance& operator =(const CPDF_DefaultAppearance& cDA)

+    {

+        m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;

+        return *this;

+    }

+

+

+

+    FX_BOOL				HasFont();

+

+    CFX_ByteString		GetFontString();

+

+    void				GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);

+

+

+

+

+    FX_BOOL				HasColor(FX_BOOL bStrokingOperation = FALSE);

+

+    CFX_ByteString		GetColorString(FX_BOOL bStrokingOperation = FALSE);

+

+    void				GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation = FALSE);

+

+    void				GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation = FALSE);

+

+

+

+

+    FX_BOOL				HasTextMatrix();

+

+    CFX_ByteString		GetTextMatrixString();

+

+    CFX_AffineMatrix	GetTextMatrix();

+

+protected:

+

+    CFX_ByteString		m_csDA;

+};

+#define FIELDTYPE_UNKNOWN			0

+#define FIELDTYPE_PUSHBUTTON		1

+#define FIELDTYPE_CHECKBOX			2

+#define FIELDTYPE_RADIOBUTTON		3

+#define FIELDTYPE_COMBOBOX			4

+#define FIELDTYPE_LISTBOX			5

+#define FIELDTYPE_TEXTFIELD			6

+#define FIELDTYPE_SIGNATURE			7

+class CPDF_InterForm : public CFX_PrivateData, public CFX_Object

+{

+public:

+

+    CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);

+

+    ~CPDF_InterForm();

+

+

+

+    static void				EnableUpdateAP(FX_BOOL bUpdateAP);

+

+    static FX_BOOL			UpdatingAPEnabled();

+

+

+    static CFX_ByteString	GenerateNewResourceName(const CPDF_Dictionary* pResDict, FX_LPCSTR csType, int iMinLen = 2, FX_LPCSTR csPrefix = "");

+

+

+

+    static CPDF_Font*		AddSystemDefaultFont(const CPDF_Document* pDocument);

+

+    static CPDF_Font*		AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, FX_BYTE iCharSet = 1);

+

+    static CPDF_Font*		AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, FX_BYTE iCharSet = 1);

+

+    static CPDF_Font*		AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName);

+

+    static CFX_ByteString	GetNativeFont(FX_BYTE iCharSet, FX_LPVOID pLogFont = NULL);

+

+    static CFX_ByteString	GetNativeFont(FX_LPVOID pLogFont = NULL);

+

+    static FX_BYTE			GetNativeCharSet();

+

+    static CPDF_Font*		AddNativeFont(FX_BYTE iCharSet, const CPDF_Document* pDocument);

+

+    static CPDF_Font*		AddNativeFont(const CPDF_Document* pDocument);

+

+

+

+

+    FX_BOOL					ValidateFieldName(CFX_WideString& csNewFieldName, int iType);

+

+    FX_BOOL					ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName);

+

+    FX_BOOL					ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName);

+

+

+

+

+    FX_DWORD				CountFields(const CFX_WideString &csFieldName = L"");

+

+    CPDF_FormField*			GetField(FX_DWORD index, const CFX_WideString &csFieldName = L"");

+

+    void					GetAllFieldNames(CFX_WideStringArray& allFieldNames);

+

+    FX_BOOL					IsValidFormField(const void* pField);

+

+    CPDF_FormField*			GetFieldByDict(CPDF_Dictionary* pFieldDict) const;

+

+

+

+

+    FX_DWORD				CountControls(CFX_WideString csFieldName = L"");

+

+    CPDF_FormControl*		GetControl(FX_DWORD index, CFX_WideString csFieldName = L"");

+

+    FX_BOOL					IsValidFormControl(const void* pControl);

+

+    int						CountPageControls(CPDF_Page* pPage) const;

+

+    CPDF_FormControl*		GetPageControl(CPDF_Page* pPage, int index) const;

+

+

+    CPDF_FormControl*		GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const;

+

+    CPDF_FormControl*		GetControlByDict(CPDF_Dictionary* pWidgetDict) const;

+

+

+

+

+    FX_DWORD				CountInternalFields(const CFX_WideString& csFieldName = L"") const;

+

+    CPDF_Dictionary*		GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName = L"") const;

+

+

+

+

+

+    CPDF_Document*			GetDocument() const

+    {

+        return m_pDocument;

+    }

+

+    CPDF_Dictionary*		GetFormDict() const

+    {

+        return m_pFormDict;

+    }

+

+

+

+

+    FX_BOOL					NeedConstructAP();

+

+    void					NeedConstructAP(FX_BOOL bNeedAP);

+

+

+

+

+    int						CountFieldsInCalculationOrder();

+

+    CPDF_FormField*			GetFieldInCalculationOrder(int index);

+

+    int						FindFieldInCalculationOrder(const CPDF_FormField* pField);

+

+

+

+

+    FX_DWORD				CountFormFonts();

+

+    CPDF_Font*				GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);

+

+    CPDF_Font*				GetFormFont(CFX_ByteString csNameTag);

+

+    CPDF_Font*				GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);

+

+    CPDF_Font*				GetNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);

+

+    CPDF_Font*				GetNativeFormFont(CFX_ByteString& csNameTag);

+

+    FX_BOOL					FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);

+

+    FX_BOOL					FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag);

+

+    inline FX_BOOL			FindFormFont(CFX_WideString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)

+    {

+        return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);

+    }

+

+

+

+

+

+    void					AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);

+

+    CPDF_Font*				AddNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);

+

+    CPDF_Font*				AddNativeFormFont(CFX_ByteString& csNameTag);

+

+    void					RemoveFormFont(const CPDF_Font* pFont);

+

+    void					RemoveFormFont(CFX_ByteString csNameTag);

+

+

+

+

+    CPDF_DefaultAppearance	GetDefaultAppearance();

+

+    CPDF_Font*				GetDefaultFormFont();

+

+

+

+    int						GetFormAlignment();

+

+

+

+

+    CPDF_FormField*			CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const;

+

+    CFDF_Document* 			ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;

+

+    CFDF_Document*			ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;

+

+    FX_BOOL					ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);

+

+

+

+

+    FX_BOOL					ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bNotify = FALSE);

+

+    FX_BOOL					ResetForm(FX_BOOL bNotify = FALSE);

+

+    void					ReloadForm();

+

+    CPDF_FormNotify*		GetFormNotify() const

+    {

+        return m_pFormNotify;

+    }

+

+    void					SetFormNotify(const CPDF_FormNotify* pNotify);

+

+

+    int						GetPageWithWidget(int iCurPage, FX_BOOL bNext);

+

+

+

+    FX_BOOL					IsUpdated()

+    {

+        return m_bUpdated;

+    }

+

+    void					ClearUpdatedFlag()

+    {

+        m_bUpdated = FALSE;

+    }

+

+

+    FX_BOOL					HasXFAForm() const;

+

+    void					FixPageFields(const CPDF_Page* pPage);

+protected:

+

+    static FX_BOOL			m_bUpdateAP;

+

+    void					LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);

+

+    CPDF_Object*			GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);

+

+    CPDF_FormField*			AddTerminalField(const CPDF_Dictionary* pFieldDict);

+

+    CPDF_FormControl*		AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict);

+

+    void					FDF_ImportField(CPDF_Dictionary* pField, const CFX_WideString& parent_name, FX_BOOL bNotify = FALSE, int nLevel = 0);

+

+    FX_BOOL					ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl);

+

+    int						CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2);

+

+    int						CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2);

+

+    CPDF_Document*			m_pDocument;

+

+    FX_BOOL					m_bGenerateAP;

+

+    CPDF_Dictionary*		m_pFormDict;

+

+    CFX_MapPtrToPtr			m_ControlMap;

+

+    CFieldTree *m_pFieldTree;

+

+    CFX_ByteString			m_bsEncoding;

+

+    CPDF_FormNotify*		m_pFormNotify;

+

+    FX_BOOL					m_bUpdated;

+    friend class CPDF_FormControl;

+    friend class CPDF_FormField;

+};

+#define FORMFIELD_READONLY		0x01

+#define FORMFIELD_REQUIRED		0x02

+#define FORMFIELD_NOEXPORT		0x04

+#define FORMRADIO_NOTOGGLEOFF	0x100

+#define FORMRADIO_UNISON		0x200

+#define FORMTEXT_MULTILINE		0x100

+#define FORMTEXT_PASSWORD		0x200

+#define FORMTEXT_NOSCROLL		0x400

+#define FORMTEXT_COMB			0x800

+#define FORMCOMBO_EDIT			0x100

+#define FORMLIST_MULTISELECT	0x100

+class CPDF_FormField : public CFX_Object

+{

+public:

+

+    enum Type {

+        Unknown,

+        PushButton,

+        RadioButton,

+        CheckBox,

+        Text,

+        RichText,

+        File,

+        ListBox,

+        ComboBox,

+        Sign

+    };

+

+    CFX_WideString			GetFullName();

+

+    Type					GetType()

+    {

+        return m_Type;

+    }

+

+    FX_DWORD				GetFlags()

+    {

+        return m_Flags;

+    }

+

+    CPDF_InterForm*			GetInterForm() const

+    {

+        return m_pForm;

+    }

+

+    CPDF_Dictionary*		GetFieldDict() const

+    {

+        return m_pDict;

+    }

+

+    void					SetFieldDict(CPDF_Dictionary* pDict)

+    {

+        m_pDict = pDict;

+    }

+

+    FX_BOOL					ResetField(FX_BOOL bNotify = FALSE);

+

+

+

+    int						CountControls()

+    {

+        return m_ControlList.GetSize();

+    }

+

+    CPDF_FormControl*		GetControl(int index)

+    {

+        return (CPDF_FormControl*)m_ControlList.GetAt(index);

+    }

+

+    int						GetControlIndex(const CPDF_FormControl* pControl);

+

+

+

+

+    int						GetFieldType();

+

+

+

+

+    CPDF_AAction			GetAdditionalAction();

+

+

+

+

+    CFX_WideString			GetAlternateName();

+

+

+

+

+    CFX_WideString			GetMappingName();

+

+

+

+

+    FX_DWORD				GetFieldFlags();

+

+

+

+

+    CFX_ByteString			GetDefaultStyle();

+

+

+

+

+    CFX_WideString			GetRichTextString();

+

+

+

+    CFX_WideString			GetValue();

+

+    CFX_WideString			GetDefaultValue();

+

+    FX_BOOL					SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);

+

+

+

+

+

+    int						GetMaxLen();

+

+

+

+

+    int						CountSelectedItems();

+

+    int						GetSelectedIndex(int index);

+

+    FX_BOOL					ClearSelection(FX_BOOL bNotify = FALSE);

+

+    FX_BOOL					IsItemSelected(int index);

+

+    FX_BOOL					SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);

+

+    FX_BOOL					IsItemDefaultSelected(int index);

+

+    int						GetDefaultSelectedItem();

+

+

+

+

+    int						CountOptions();

+

+    CFX_WideString			GetOptionLabel(int index);

+

+    CFX_WideString			GetOptionValue(int index);

+

+    int						FindOption(CFX_WideString csOptLabel);

+

+    int						FindOptionValue(FX_LPCWSTR csOptValue, int iStartIndex = 0);

+

+

+

+

+    FX_BOOL					CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify = FALSE);

+

+

+

+

+    int						GetTopVisibleIndex();

+

+

+

+

+    int						CountSelectedOptions();

+

+    int						GetSelectedOptionIndex(int index);

+

+    FX_BOOL					IsOptionSelected(int iOptIndex);

+

+    FX_BOOL					SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);

+

+    FX_BOOL					ClearSelectedOptions(FX_BOOL bNotify = FALSE);

+

+

+

+

+    FX_FLOAT				GetFontSize()

+    {

+        return m_FontSize;

+    }

+

+    CPDF_Font*				GetFont()

+    {

+        return m_pFont;

+    }

+

+protected:

+

+    CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);

+

+    ~CPDF_FormField();

+

+    CPDF_FormField::Type	m_Type;

+

+    FX_DWORD				m_Flags;

+

+    CPDF_InterForm*			m_pForm;

+

+    CPDF_Dictionary*		m_pDict;

+

+    CFX_PtrArray			m_ControlList;

+    friend class			CPDF_InterForm;

+    friend class			CPDF_FormControl;

+

+

+

+    CFX_WideString			GetValue(FX_BOOL bDefault);

+

+    FX_BOOL					SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);

+

+

+    void					SyncFieldFlags();

+

+    int						FindListSel(CPDF_String* str);

+

+    CFX_WideString			GetOptionText(int index, int sub_index);

+

+    void					LoadDA();

+

+    void					UpdateAP(CPDF_FormControl* pControl);

+

+

+

+    CFX_WideString			GetCheckValue(FX_BOOL bDefault);

+

+    FX_BOOL					SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);

+

+

+    FX_FLOAT				m_FontSize;

+

+    CPDF_Font*				m_pFont;

+};

+CPDF_Object*	FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel = 0);

+class CPDF_IconFit : public CFX_Object

+{

+public:

+

+    CPDF_IconFit(CPDF_Dictionary* pDict = NULL)

+    {

+        m_pDict = pDict;

+    }

+

+    operator CPDF_Dictionary*() const

+    {

+        return m_pDict;

+    }

+

+

+

+

+    enum ScaleMethod {

+        Always = 0,

+        Bigger,

+        Smaller,

+        Never

+    };

+

+    ScaleMethod				GetScaleMethod();

+

+

+

+

+    FX_BOOL					IsProportionalScale();

+

+

+

+

+    void					GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);

+

+

+

+

+    FX_BOOL					GetFittingBounds();

+

+

+    CPDF_Dictionary*		m_pDict;

+};

+

+#define TEXTPOS_CAPTION		0

+#define TEXTPOS_ICON		1

+#define TEXTPOS_BELOW		2

+#define TEXTPOS_ABOVE		3

+#define TEXTPOS_RIGHT		4

+#define TEXTPOS_LEFT		5

+#define TEXTPOS_OVERLAID	6

+class CPDF_FormControl : public CFX_Object

+{

+public:

+

+    CPDF_FormField::Type	GetType()

+    {

+        return m_pField->GetType();

+    }

+

+    CPDF_InterForm*			GetInterForm() const

+    {

+        return m_pForm;

+    }

+

+    CPDF_FormField*			GetField() const

+    {

+        return m_pField;

+    }

+

+    CPDF_Dictionary*		GetWidget() const

+    {

+        return m_pWidgetDict;

+    }

+

+    CFX_FloatRect			GetRect();

+

+    void					DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix,

+                                        CPDF_Page* pPage, CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions = NULL);

+

+

+

+    CFX_ByteString			GetCheckedAPState();

+

+    CFX_WideString			GetExportValue();

+

+    FX_BOOL					IsChecked();

+

+    FX_BOOL					IsDefaultChecked();

+

+

+

+

+    enum HighlightingMode	{

+        None = 0,

+        Invert,

+        Outline,

+        Push,

+        Toggle

+    };

+

+    HighlightingMode		GetHighlightingMode();

+

+

+

+

+    FX_BOOL					HasMKEntry(CFX_ByteString csEntry);

+

+

+

+

+    int						GetRotation();

+

+

+

+

+    inline FX_ARGB			GetBorderColor(int& iColorType)

+    {

+        return GetColor(iColorType, "BC");

+    }

+

+    inline FX_FLOAT			GetOriginalBorderColor(int index)

+    {

+        return GetOriginalColor(index, "BC");

+    }

+

+    inline void				GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])

+    {

+        GetOriginalColor(iColorType, fc, "BC");

+    }

+

+

+

+

+    inline FX_ARGB			GetBackgroundColor(int& iColorType)

+    {

+        return GetColor(iColorType, "BG");

+    }

+

+    inline FX_FLOAT			GetOriginalBackgroundColor(int index)

+    {

+        return GetOriginalColor(index, "BG");

+    }

+

+    inline void				GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])

+    {

+        GetOriginalColor(iColorType, fc, "BG");

+    }

+

+

+

+

+    inline CFX_WideString	GetNormalCaption()

+    {

+        return GetCaption("CA");

+    }

+

+

+

+

+    inline CFX_WideString	GetRolloverCaption()

+    {

+        return GetCaption("RC");

+    }

+

+

+

+

+    inline CFX_WideString	GetDownCaption()

+    {

+        return GetCaption("AC");

+    }

+

+

+

+

+    inline CPDF_Stream*		GetNormalIcon()

+    {

+        return GetIcon("I");

+    }

+

+

+

+

+    inline CPDF_Stream*		GetRolloverIcon()

+    {

+        return GetIcon("RI");

+    }

+

+

+

+

+    inline CPDF_Stream*		GetDownIcon()

+    {

+        return GetIcon("IX");

+    }

+

+

+

+

+    CPDF_IconFit			GetIconFit();

+

+

+

+

+    int						GetTextPosition();

+

+

+

+

+    CPDF_Action				GetAction();

+

+

+

+

+    CPDF_AAction			GetAdditionalAction();

+

+

+

+

+    CPDF_DefaultAppearance	GetDefaultAppearance();

+

+    CPDF_Font*				GetDefaultControlFont();

+

+

+

+

+    int						GetControlAlignment();

+

+protected:

+

+    CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);

+

+    CFX_ByteString			GetOnStateName();

+

+    void					SetOnStateName(const CFX_ByteString& csOn);

+

+    void					CheckControl(FX_BOOL bChecked);

+

+    FX_ARGB					GetColor(int& iColorType, CFX_ByteString csEntry);

+

+    FX_FLOAT				GetOriginalColor(int index, CFX_ByteString csEntry);

+

+    void					GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry);

+

+    CFX_WideString			GetCaption(CFX_ByteString csEntry);

+

+    CPDF_Stream*			GetIcon(CFX_ByteString csEntry);

+

+    CPDF_ApSettings			GetMK(FX_BOOL bCreate);

+

+    CPDF_InterForm*			m_pForm;

+

+    CPDF_FormField*			m_pField;

+

+    CPDF_Dictionary*		m_pWidgetDict;

+    friend class			CPDF_InterForm;

+    friend class			CPDF_FormField;

+};

+class CPDF_FormNotify : public CFX_Object

+{

+public:

+

+    virtual ~CPDF_FormNotify() {}

+

+    virtual int		BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)

+    {

+        return 0;

+    }

+

+    virtual int		AfterValueChange(const CPDF_FormField* pField)

+    {

+        return 0;

+    }

+

+    virtual int		BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)

+    {

+        return 0;

+    }

+

+    virtual int		AfterSelectionChange(const CPDF_FormField* pField)

+    {

+        return 0;

+    }

+

+    virtual int		AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)

+    {

+        return 0;

+    }

+

+    virtual int		BeforeFormReset(const CPDF_InterForm* pForm)

+    {

+        return 0;

+    }

+

+    virtual int		AfterFormReset(const CPDF_InterForm* pForm)

+    {

+        return 0;

+    }

+

+    virtual int		BeforeFormImportData(const CPDF_InterForm* pForm)

+    {

+        return 0;

+    }

+

+    virtual int		AfterFormImportData(const CPDF_InterForm* pForm)

+    {

+        return 0;

+    }

+};

+FX_BOOL		FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);

+class CPDF_PageLabel : public CFX_Object

+{

+public:

+

+    CPDF_PageLabel(CPDF_Document* pDocument)

+    {

+        m_pDocument = pDocument;

+    }

+

+

+    CFX_WideString					GetLabel(int nPage) const;

+

+    FX_INT32						GetPageByLabel(FX_BSTR bsLabel) const;

+

+

+    FX_INT32						GetPageByLabel(FX_WSTR wsLabel) const;

+

+protected:

+    CPDF_Document*					m_pDocument;

+};

+class CPDF_Metadata

+{

+public:

+

+    CPDF_Metadata();

+

+

+    ~CPDF_Metadata();

+

+    void				LoadDoc(CPDF_Document *pDoc);

+

+

+    FX_INT32			GetString(FX_BSTR bsItem, CFX_WideString &wsStr);

+

+    CXML_Element*		GetRoot() const;

+

+    CXML_Element*		GetRDF() const;

+

+protected:

+    FX_LPVOID	m_pData;

+};

+class CPDF_ViewerPreferences

+{

+public:

+

+    CPDF_ViewerPreferences(CPDF_Document *pDoc);

+

+

+    ~CPDF_ViewerPreferences();

+

+

+    FX_BOOL IsDirectionR2L() const;

+

+    FX_BOOL PrintScaling() const;

+

+

+protected:

+    CPDF_Document*	m_pDoc;

+};

+class CPDF_ApSettings : public CFX_Object

+{

+public:

+

+    CPDF_ApSettings(CPDF_Dictionary* pDict = NULL)

+    {

+        m_pDict = pDict;

+    }

+

+    operator CPDF_Dictionary* () const

+    {

+        return m_pDict;

+    }

+

+    FX_BOOL					HasMKEntry(FX_BSTR csEntry);

+

+

+

+    int						GetRotation();

+

+

+

+

+    inline FX_ARGB			GetBorderColor(int& iColorType)

+    {

+        return GetColor(iColorType, FX_BSTRC("BC"));

+    }

+

+    inline FX_FLOAT			GetOriginalBorderColor(int index)

+    {

+        return GetOriginalColor(index, FX_BSTRC("BC"));

+    }

+

+    inline void				GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])

+    {

+        GetOriginalColor(iColorType, fc, FX_BSTRC("BC"));

+    }

+

+

+

+

+    inline FX_ARGB			GetBackgroundColor(int& iColorType)

+    {

+        return GetColor(iColorType, FX_BSTRC("BG"));

+    }

+

+    inline FX_FLOAT			GetOriginalBackgroundColor(int index)

+    {

+        return GetOriginalColor(index, FX_BSTRC("BG"));

+    }

+

+    inline void				GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])

+    {

+        GetOriginalColor(iColorType, fc, FX_BSTRC("BG"));

+    }

+

+

+

+

+    inline CFX_WideString	GetNormalCaption()

+    {

+        return GetCaption(FX_BSTRC("CA"));

+    }

+

+

+

+

+    inline CFX_WideString	GetRolloverCaption()

+    {

+        return GetCaption(FX_BSTRC("RC"));

+    }

+

+

+

+

+    inline CFX_WideString	GetDownCaption()

+    {

+        return GetCaption(FX_BSTRC("AC"));

+    }

+

+

+

+

+    inline CPDF_Stream*		GetNormalIcon()

+    {

+        return GetIcon(FX_BSTRC("I"));

+    }

+

+

+

+

+    inline CPDF_Stream*		GetRolloverIcon()

+    {

+        return GetIcon(FX_BSTRC("RI"));

+    }

+

+

+

+

+    inline CPDF_Stream*		GetDownIcon()

+    {

+        return GetIcon(FX_BSTRC("IX"));

+    }

+

+

+

+

+    CPDF_IconFit			GetIconFit();

+

+

+

+

+    int						GetTextPosition();

+

+    CPDF_Dictionary*		m_pDict;

+protected:

+

+    FX_ARGB					GetColor(int& iColorType, FX_BSTR csEntry);

+

+    FX_FLOAT				GetOriginalColor(int index, FX_BSTR csEntry);

+

+    void					GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry);

+

+    CFX_WideString			GetCaption(FX_BSTR csEntry);

+

+    CPDF_Stream*			GetIcon(FX_BSTR csEntry);

+    friend class			CPDF_FormControl;

+};

+#endif

diff --git a/core/include/fpdfdoc/fpdf_tagged.h b/core/include/fpdfdoc/fpdf_tagged.h
new file mode 100644
index 0000000..a44c263
--- /dev/null
+++ b/core/include/fpdfdoc/fpdf_tagged.h
@@ -0,0 +1,99 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_TAGGED_H_

+#define _FPDF_TAGGED_H_

+class CPDF_StructTree;

+class CPDF_StructElement;

+struct CPDF_StructKid;

+class CPDF_Document;

+class CPDF_Page;

+class IPDF_ReflowEngine;

+class IPDF_ReflowedPage;

+class CPDF_StructTree : public CFX_Object

+{

+public:

+

+    static CPDF_StructTree* LoadDoc(const CPDF_Document* pDoc);

+

+    static CPDF_StructTree* LoadPage(const CPDF_Document* pDoc, const CPDF_Dictionary* pPageDict);

+

+    virtual ~CPDF_StructTree() {}

+

+    virtual int			CountTopElements() const = 0;

+

+    virtual CPDF_StructElement*	GetTopElement(int i) const = 0;

+};

+struct CPDF_StructKid {

+    enum {

+        Invalid,

+        Element,

+        PageContent,

+        StreamContent,

+        Object

+    } m_Type;

+

+    union {

+        struct {

+

+            CPDF_StructElement*	m_pElement;

+

+            CPDF_Dictionary*	m_pDict;

+        } m_Element;

+        struct {

+

+            FX_DWORD			m_PageObjNum;

+

+            FX_DWORD			m_ContentId;

+        } m_PageContent;

+        struct {

+

+            FX_DWORD			m_PageObjNum;

+

+            FX_DWORD			m_ContentId;

+

+            FX_DWORD			m_RefObjNum;

+        } m_StreamContent;

+        struct {

+

+            FX_DWORD			m_PageObjNum;

+

+            FX_DWORD			m_RefObjNum;

+        } m_Object;

+    };

+};

+class CPDF_StructElement : public CFX_Object

+{

+public:

+

+    virtual CPDF_StructTree*	GetTree() const = 0;

+

+    virtual const CFX_ByteString&	GetType() const = 0;

+

+    virtual CPDF_StructElement*	GetParent() const = 0;

+

+    virtual CPDF_Dictionary *	GetDict() const = 0;

+

+    virtual int					CountKids() const = 0;

+

+    virtual const CPDF_StructKid&	GetKid(int index) const = 0;

+

+    virtual CFX_PtrArray*		GetObjectArray() = 0;

+

+    virtual CPDF_Object*		GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F) = 0;

+

+

+

+    virtual CFX_ByteString		GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;

+

+    virtual FX_ARGB				GetColor(FX_BSTR owner, FX_BSTR name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;

+

+    virtual FX_FLOAT			GetNumber(FX_BSTR owner, FX_BSTR name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;

+

+    virtual int					GetInteger(FX_BSTR owner, FX_BSTR name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;

+

+};

+#endif

diff --git a/core/include/fpdfdoc/fpdf_vt.h b/core/include/fpdfdoc/fpdf_vt.h
new file mode 100644
index 0000000..e2825c1
--- /dev/null
+++ b/core/include/fpdfdoc/fpdf_vt.h
@@ -0,0 +1,444 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_VT_H_

+#define _FPDF_VT_H_

+#include "../fxcrt/fx_basic.h"

+#include "../fpdfapi/fpdf_parser.h"

+struct CPVT_WordPlace;

+struct CPVT_WordRange;

+struct CPVT_Word;

+struct CPVT_Line;

+struct CPVT_Section;

+class IPDF_VariableText_Provider;

+class IPDF_VariableText_Iterator;

+class IPDF_VariableText;

+struct CPVT_WordPlace {

+

+    CPVT_WordPlace() : nSecIndex(-1), nLineIndex(-1), nWordIndex(-1)

+    {

+    }

+

+    CPVT_WordPlace(FX_INT32 nSecIndex, FX_INT32 nLineIndex, FX_INT32 nWordIndex)

+    {

+        this->nSecIndex = nSecIndex;

+        this->nLineIndex = nLineIndex;

+        this->nWordIndex = nWordIndex;

+    }

+

+    void Default()

+    {

+        nSecIndex = nLineIndex = nWordIndex = -1;

+    }

+

+    FX_BOOL operator == (const CPVT_WordPlace & wp) const

+    {

+        return wp.nSecIndex == this->nSecIndex && wp.nLineIndex == this->nLineIndex && wp.nWordIndex == this->nWordIndex;

+    }

+

+    FX_BOOL operator != (const CPVT_WordPlace & wp) const

+    {

+        return wp.nSecIndex != this->nSecIndex || wp.nLineIndex != this->nLineIndex || wp.nWordIndex != this->nWordIndex;

+    }

+

+    inline FX_INT32 WordCmp(const CPVT_WordPlace & wp) const

+    {

+        if (this->nSecIndex > wp.nSecIndex) {

+            return 1;

+        }

+        if (this->nSecIndex < wp.nSecIndex) {

+            return -1;

+        }

+        if (this->nLineIndex > wp.nLineIndex) {

+            return 1;

+        }

+        if (this->nLineIndex < wp.nLineIndex) {

+            return -1;

+        }

+        if (this->nWordIndex > wp.nWordIndex) {

+            return 1;

+        }

+        if (this->nWordIndex < wp.nWordIndex) {

+            return -1;

+        }

+        return 0;

+    }

+

+    inline FX_INT32 LineCmp(const CPVT_WordPlace & wp) const

+    {

+        if (this->nSecIndex > wp.nSecIndex) {

+            return 1;

+        }

+        if (this->nSecIndex < wp.nSecIndex) {

+            return -1;

+        }

+        if (this->nLineIndex > wp.nLineIndex) {

+            return 1;

+        }

+        if (this->nLineIndex < wp.nLineIndex) {

+            return -1;

+        }

+        return 0;

+    }

+

+    inline FX_INT32 SecCmp(const CPVT_WordPlace & wp) const

+    {

+        if (this->nSecIndex > wp.nSecIndex) {

+            return 1;

+        }

+        if (this->nSecIndex < wp.nSecIndex) {

+            return -1;

+        }

+        return 0;

+    }

+

+    FX_INT32							nSecIndex;

+

+    FX_INT32							nLineIndex;

+

+    FX_INT32							nWordIndex;

+};

+struct CPVT_WordRange {

+

+    CPVT_WordRange()

+    {

+    }

+

+    CPVT_WordRange(const CPVT_WordPlace & begin, const CPVT_WordPlace & end)

+    {

+        Set(begin, end);

+    }

+

+    void Default()

+    {

+        BeginPos.Default();

+        EndPos.Default();

+    }

+

+    void Set(const CPVT_WordPlace & begin, const CPVT_WordPlace & end)

+    {

+        this->BeginPos = begin;

+        this->EndPos = end;

+        SwapWordPlace();

+    }

+

+    void SetBeginPos(const CPVT_WordPlace & begin)

+    {

+        this->BeginPos = begin;

+        SwapWordPlace();

+    }

+

+    void SetEndPos(const CPVT_WordPlace & end)

+    {

+        this->EndPos = end;

+        SwapWordPlace();

+    }

+

+    FX_BOOL IsExist() const

+    {

+        return this->BeginPos != this->EndPos;

+    }

+

+    FX_BOOL operator != (const CPVT_WordRange & wr) const

+    {

+        return wr.BeginPos != this->BeginPos || wr.EndPos != this->EndPos;

+    }

+

+    void SwapWordPlace()

+    {

+        if (BeginPos.WordCmp(EndPos) > 0) {

+            CPVT_WordPlace place = EndPos;

+            EndPos = BeginPos;

+            BeginPos = place;

+        }

+    }

+

+    CPVT_WordPlace BeginPos;

+

+    CPVT_WordPlace EndPos;

+};

+struct CPVT_SecProps : public CFX_Object {

+

+    CPVT_SecProps() : fLineLeading(0.0f), fLineIndent(0.0f), nAlignment(0)

+    {

+    }

+

+    CPVT_SecProps(FX_FLOAT lineLeading, FX_FLOAT lineIndent, FX_INT32 alignment) :

+        fLineLeading(lineLeading), fLineIndent(lineIndent), nAlignment(alignment)

+    {

+    }

+

+    CPVT_SecProps(const CPVT_SecProps & other) :

+        fLineLeading(other.fLineLeading), fLineIndent(other.fLineIndent), nAlignment(other.nAlignment)

+    {

+    }

+

+    FX_FLOAT			fLineLeading;

+

+    FX_FLOAT			fLineIndent;

+

+    FX_INT32			nAlignment;

+};

+struct CPVT_WordProps : public CFX_Object {

+

+    CPVT_WordProps() : nFontIndex(-1), fFontSize(0.0f), dwWordColor(0), nScriptType(0), nWordStyle(0),

+        fCharSpace(0.0f), nHorzScale(0)

+    {

+    }

+

+    CPVT_WordProps(FX_INT32	fontIndex, FX_FLOAT fontSize, FX_COLORREF wordColor = 0, FX_INT32 scriptType = 0, FX_INT32 wordStyle = 0,

+                   FX_FLOAT charSpace = 0, FX_INT32 horzScale = 100) :

+        nFontIndex(fontIndex), fFontSize(fontSize), dwWordColor(wordColor), nScriptType(scriptType),

+        nWordStyle(wordStyle), fCharSpace(charSpace), nHorzScale(horzScale)

+    {

+    }

+

+    CPVT_WordProps(const CPVT_WordProps & other) :

+        nFontIndex(other.nFontIndex), fFontSize(other.fFontSize), dwWordColor(other.dwWordColor),

+        nScriptType(other.nScriptType), nWordStyle(other.nWordStyle), fCharSpace(other.fCharSpace),

+        nHorzScale(other.nHorzScale)

+    {

+    }

+

+    FX_INT32					nFontIndex;

+

+    FX_FLOAT					fFontSize;

+

+    FX_COLORREF					dwWordColor;

+

+    FX_INT32					nScriptType;

+

+    FX_INT32					nWordStyle;

+

+    FX_FLOAT					fCharSpace;

+

+    FX_INT32					nHorzScale;

+};

+struct CPVT_Word {

+

+    CPVT_Word() : Word(0), nCharset(0), ptWord(0, 0), fAscent(0.0f), fDescent(0.0f), fWidth(0.0f),

+        fFontSize(0), WordProps()

+    {

+    }

+

+    FX_WORD						Word;

+

+    FX_INT32					nCharset;

+

+    CPVT_WordPlace				WordPlace;

+

+    CPDF_Point					ptWord;

+

+    FX_FLOAT					fAscent;

+

+    FX_FLOAT					fDescent;

+

+    FX_FLOAT					fWidth;

+

+    FX_INT32					nFontIndex;

+

+    FX_FLOAT					fFontSize;

+

+    CPVT_WordProps				WordProps;

+};

+struct CPVT_Line {

+

+    CPVT_Line() : ptLine(0, 0), fLineWidth(0.0f), fLineAscent(0.0f), fLineDescent(0.0f)

+    {

+    }

+

+    CPVT_WordPlace				lineplace;

+

+    CPVT_WordPlace				lineEnd;

+

+    CPDF_Point					ptLine;

+

+    FX_FLOAT					fLineWidth;

+

+    FX_FLOAT					fLineAscent;

+

+    FX_FLOAT					fLineDescent;

+};

+struct CPVT_Section {

+

+    CPVT_WordPlace				secplace;

+

+    CPDF_Rect					rcSection;

+

+    CPVT_SecProps				SecProps;

+

+    CPVT_WordProps				WordProps;

+};

+class IPDF_VariableText_Provider

+{

+public:

+

+    virtual FX_INT32						GetCharWidth(FX_INT32 nFontIndex, FX_WORD word, FX_INT32 nWordStyle) = 0;

+

+    virtual FX_INT32						GetTypeAscent(FX_INT32 nFontIndex) = 0;

+

+    virtual FX_INT32						GetTypeDescent(FX_INT32 nFontIndex) = 0;

+

+    virtual FX_INT32						GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex) = 0;

+

+    virtual FX_BOOL							IsLatinWord(FX_WORD word) = 0;

+

+    virtual FX_INT32						GetDefaultFontIndex() = 0;

+};

+class IPDF_VariableText_Iterator

+{

+public:

+

+    virtual FX_BOOL							NextWord() = 0;

+

+    virtual FX_BOOL							PrevWord() = 0;

+

+    virtual FX_BOOL							NextLine() = 0;

+

+    virtual FX_BOOL							PrevLine() = 0;

+

+    virtual FX_BOOL							NextSection() = 0;

+

+    virtual FX_BOOL							PrevSection() = 0;

+

+    virtual FX_BOOL							GetWord(CPVT_Word & word) const = 0;

+

+    virtual FX_BOOL							SetWord(const CPVT_Word & word) = 0;

+

+    virtual FX_BOOL							GetLine(CPVT_Line & line) const = 0;

+

+    virtual FX_BOOL							GetSection(CPVT_Section & section) const = 0;

+

+    virtual	FX_BOOL							SetSection(const CPVT_Section & section) = 0;

+

+    virtual void							SetAt(FX_INT32 nWordIndex) = 0;

+

+    virtual void							SetAt(const CPVT_WordPlace & place) = 0;

+

+    virtual const CPVT_WordPlace &			GetAt() const = 0;

+};

+class IPDF_VariableText

+{

+public:

+

+    static IPDF_VariableText*			NewVariableText();

+

+    static void							DelVariableText(IPDF_VariableText* pVT);

+public:

+

+    virtual IPDF_VariableText_Provider*		SetProvider(IPDF_VariableText_Provider * pProvider) = 0;

+

+    virtual IPDF_VariableText_Iterator*		GetIterator() = 0;

+

+    virtual void							SetPlateRect(const CPDF_Rect & rect) = 0;

+

+    virtual void							SetAlignment(FX_INT32 nFormat = 0) = 0;

+

+    virtual void							SetPasswordChar(FX_WORD wSubWord = '*') = 0;

+

+    virtual void							SetLimitChar(FX_INT32 nLimitChar = 0) = 0;

+

+    virtual void							SetCharArray(FX_INT32 nCharArray = 0) = 0;

+

+    virtual void							SetCharSpace(FX_FLOAT fCharSpace = 0.0f) = 0;

+

+    virtual void							SetHorzScale(FX_INT32 nHorzScale = 100) = 0;

+

+    virtual void							SetMultiLine(FX_BOOL bMultiLine = TRUE) = 0;

+

+    virtual void							SetAutoReturn(FX_BOOL bAuto = TRUE) = 0;

+

+    virtual void							SetAutoFontSize(FX_BOOL bAuto = TRUE) = 0;

+

+    virtual void							SetFontSize(FX_FLOAT fFontSize) = 0;

+

+    virtual void							SetLineLeading(FX_FLOAT fLineLeading) = 0;

+

+    virtual void							SetRichText(FX_BOOL bRichText) = 0;

+

+    virtual void							Initialize() = 0;

+

+    virtual FX_BOOL							IsValid() const = 0;

+

+    virtual FX_BOOL							IsRichText() const = 0;

+

+    virtual void							RearrangeAll() = 0;

+

+    virtual void							RearrangePart(const CPVT_WordRange & PlaceRange) = 0;

+

+    virtual void							ResetAll() = 0;

+

+    virtual void							SetText(FX_LPCWSTR text, FX_INT32 charset = 1, const CPVT_SecProps * pSecProps = NULL,

+            const CPVT_WordProps * pWordProps = NULL) = 0;

+

+    virtual CPVT_WordPlace					InsertWord(const CPVT_WordPlace & place, FX_WORD word, FX_INT32 charset = 1,

+            const CPVT_WordProps * pWordProps = NULL) = 0;

+

+    virtual CPVT_WordPlace					InsertSection(const CPVT_WordPlace & place, const CPVT_SecProps * pSecProps = NULL,

+            const CPVT_WordProps * pWordProps = NULL) = 0;

+

+    virtual CPVT_WordPlace					InsertText(const CPVT_WordPlace & place, FX_LPCWSTR text, FX_INT32 charset = 1,

+            const CPVT_SecProps * pSecProps = NULL,	const CPVT_WordProps * pWordProps = NULL) = 0;

+

+    virtual CPVT_WordPlace					DeleteWords(const CPVT_WordRange & PlaceRange) = 0;

+

+    virtual CPVT_WordPlace					DeleteWord(const CPVT_WordPlace & place) = 0;

+

+    virtual CPVT_WordPlace					BackSpaceWord(const CPVT_WordPlace & place) = 0;

+

+    virtual const CPDF_Rect &				GetPlateRect() const = 0;

+

+    virtual CPDF_Rect						GetContentRect() const = 0;

+

+    virtual FX_INT32						GetTotalWords() const = 0;

+

+    virtual FX_FLOAT						GetFontSize() const = 0;

+

+    virtual FX_INT32						GetAlignment() const = 0;

+

+    virtual FX_WORD							GetPasswordChar() const = 0;

+

+    virtual FX_INT32						GetCharArray() const = 0;

+

+    virtual FX_INT32						GetLimitChar() const = 0;

+

+    virtual FX_BOOL							IsMultiLine() const = 0;

+

+    virtual FX_INT32						GetHorzScale() const = 0;

+

+    virtual FX_FLOAT						GetCharSpace() const = 0;

+

+    virtual CPVT_WordPlace					GetBeginWordPlace() const = 0;

+

+    virtual CPVT_WordPlace					GetEndWordPlace() const = 0;

+

+    virtual CPVT_WordPlace					GetPrevWordPlace(const CPVT_WordPlace & place) const = 0;

+

+    virtual CPVT_WordPlace					GetNextWordPlace(const CPVT_WordPlace & place) const = 0;

+

+    virtual CPVT_WordPlace					SearchWordPlace(const CPDF_Point & point) const = 0;

+

+    virtual CPVT_WordPlace					GetUpWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const = 0;

+

+    virtual CPVT_WordPlace					GetDownWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const = 0;

+

+    virtual CPVT_WordPlace					GetLineBeginPlace(const CPVT_WordPlace & place) const = 0;

+

+    virtual CPVT_WordPlace					GetLineEndPlace(const CPVT_WordPlace & place) const = 0;

+

+    virtual CPVT_WordPlace					GetSectionBeginPlace(const CPVT_WordPlace & place) const = 0;

+

+    virtual CPVT_WordPlace					GetSectionEndPlace(const CPVT_WordPlace & place) const = 0;

+

+    virtual void							UpdateWordPlace(CPVT_WordPlace & place) const = 0;

+

+    virtual CPVT_WordPlace					AjustLineHeader(const CPVT_WordPlace & place, FX_BOOL bPrevOrNext) const = 0;

+

+    virtual FX_INT32						WordPlaceToWordIndex(const CPVT_WordPlace & place) const = 0;

+

+    virtual CPVT_WordPlace					WordIndexToWordPlace(FX_INT32 index) const = 0;

+};

+#endif

diff --git a/core/include/fpdftext/fpdf_text.h b/core/include/fpdftext/fpdf_text.h
new file mode 100644
index 0000000..8b5edc3
--- /dev/null
+++ b/core/include/fpdftext/fpdf_text.h
@@ -0,0 +1,173 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_TEXT_H_

+#define _FPDF_TEXT_H_

+#ifndef _FPDF_PARSER_

+#include "../fpdfapi/fpdf_parser.h"

+#endif

+#ifndef _FPDF_PAGEOBJ_H_

+#include "../fpdfapi/fpdf_pageobj.h"

+#endif

+#ifndef _FPDF_PAGE_

+#include "../fpdfapi/fpdf_page.h"

+#endif

+class CPDF_PageObjects;

+#define PDF2TXT_AUTO_ROTATE		1

+#define PDF2TXT_AUTO_WIDTH		2

+#define PDF2TXT_KEEP_COLUMN		4

+#define PDF2TXT_USE_OCR			8

+#define PDF2TXT_INCLUDE_INVISIBLE	16

+void PDF_GetPageText(CFX_ByteStringArray& lines, CPDF_Document* pDoc, CPDF_Dictionary* pPage,

+                     int iMinWidth, FX_DWORD flags);

+void PDF_GetPageText_Unicode(CFX_WideStringArray& lines, CPDF_Document* pDoc, CPDF_Dictionary* pPage,

+                             int iMinWidth, FX_DWORD flags);

+void PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer, CPDF_Document* pDoc, CPDF_Dictionary* pPage,

+                               FX_DWORD flags);

+CFX_WideString PDF_GetFirstTextLine_Unicode(CPDF_Document* pDoc, CPDF_Dictionary* pPage);

+class IPDF_TextPage;

+class IPDF_LinkExtract;

+class IPDF_TextPageFind;

+#define CHAR_ERROR			-1

+#define CHAR_NORMAL			0

+#define CHAR_GENERATED		1

+#define CHAR_UNUNICODE		2

+typedef struct {

+    FX_WCHAR			m_Unicode;

+    FX_WCHAR			m_Charcode;

+    FX_INT32			m_Flag;

+    FX_FLOAT			m_FontSize;

+    FX_FLOAT			m_OriginX;

+    FX_FLOAT			m_OriginY;

+    CFX_FloatRect		m_CharBox;

+    CPDF_TextObject*	m_pTextObj;

+    CFX_AffineMatrix	m_Matrix;

+} FPDF_CHAR_INFO;

+typedef	CFX_ArrayTemplate<CFX_FloatRect> CFX_RectArray;

+#define FPDFTEXT_LRTB	0

+#define FPDFTEXT_RLTB	1

+#define FPDFTEXT_TBRL	2

+#define FPDFTEXT_LEFT			-1

+#define FPDFTEXT_RIGHT			1

+#define FPDFTEXT_UP				-2

+#define FPDFTEXT_DOWN			2

+class IPDF_ReflowedPage;

+#define FPDFTEXT_WRITINGMODE_UNKNOW	0

+#define FPDFTEXT_WRITINGMODE_LRTB	1

+#define FPDFTEXT_WRITINGMODE_RLTB	2

+#define FPDFTEXT_WRITINGMODE_TBRL	3

+class CPDFText_ParseOptions : public CFX_Object

+{

+public:

+

+    CPDFText_ParseOptions();

+    FX_BOOL			m_bGetCharCodeOnly;

+    FX_BOOL			m_bNormalizeObjs;

+    FX_BOOL			m_bOutputHyphen;

+};

+class IPDF_TextPage : public CFX_Object

+{

+public:

+

+    virtual ~IPDF_TextPage() {}

+    static IPDF_TextPage*	CreateTextPage(const CPDF_Page* pPage, CPDFText_ParseOptions ParserOptions);

+    static IPDF_TextPage*	CreateTextPage(const CPDF_Page* pPage, int flags = 0);

+    static IPDF_TextPage*	CreateTextPage(const CPDF_PageObjects* pObjs, int flags = 0);

+    static IPDF_TextPage*	CreateReflowTextPage(IPDF_ReflowedPage* pRefPage);

+

+    virtual void			NormalizeObjects(FX_BOOL bNormalize) = 0;

+

+    virtual FX_BOOL			ParseTextPage() = 0;

+

+

+    virtual FX_BOOL			IsParsered() const = 0;

+public:

+

+    virtual int CharIndexFromTextIndex(int TextIndex) const = 0;

+

+    virtual int TextIndexFromCharIndex(int CharIndex) const = 0;

+

+

+    virtual int				CountChars() const = 0;

+

+    virtual	void			GetCharInfo(int index, FPDF_CHAR_INFO & info) const = 0;

+

+    virtual void			GetRectArray(int start, int nCount, CFX_RectArray& rectArray) const = 0;

+

+

+

+    virtual int				GetIndexAtPos(CPDF_Point point, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const = 0;

+

+    virtual int				GetIndexAtPos(FX_FLOAT x, FX_FLOAT y, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const = 0;

+

+    virtual	int				GetOrderByDirection(int index, int direction) const = 0;

+

+    virtual CFX_WideString	GetTextByRect(CFX_FloatRect rect) const = 0;

+

+    virtual void			GetRectsArrayByRect(CFX_FloatRect rect, CFX_RectArray& resRectArray) const = 0;

+

+

+    virtual int				CountRects(int start, int nCount) = 0;

+

+    virtual	void			GetRect(int rectIndex, FX_FLOAT& left, FX_FLOAT& top, FX_FLOAT& right, FX_FLOAT &bottom) const = 0;

+

+    virtual FX_BOOL			GetBaselineRotate(int rectIndex, int& Rotate) = 0;

+

+    virtual FX_BOOL			GetBaselineRotate(CFX_FloatRect rect, int& Rotate) = 0;

+

+    virtual	int				CountBoundedSegments(FX_FLOAT left, FX_FLOAT top, FX_FLOAT right, FX_FLOAT bottom, FX_BOOL bContains = FALSE) = 0;

+

+    virtual	void			GetBoundedSegment(int index, int& start, int& count) const = 0;

+

+

+    virtual int				GetWordBreak(int index, int direction) const = 0;

+

+    virtual CFX_WideString	GetPageText(int start = 0, int nCount = -1 ) const = 0;

+};

+#define FPDFTEXT_MATCHCASE      0x00000001

+#define FPDFTEXT_MATCHWHOLEWORD 0x00000002

+#define FPDFTEXT_CONSECUTIVE	0x00000004

+class IPDF_TextPageFind : public CFX_Object

+{

+public:

+

+    virtual	~IPDF_TextPageFind() {}

+

+    static	IPDF_TextPageFind*	CreatePageFind(const IPDF_TextPage* pTextPage);

+public:

+

+    virtual	FX_BOOL				FindFirst(CFX_WideString findwhat, int flags, int startPos = 0) = 0;

+

+    virtual	FX_BOOL				FindNext() = 0;

+

+    virtual	FX_BOOL				FindPrev() = 0;

+

+    virtual void				GetRectArray(CFX_RectArray& rects) const = 0;

+

+    virtual int					GetCurOrder() const = 0;

+

+    virtual int					GetMatchedCount() const = 0;

+};

+class IPDF_LinkExtract : public CFX_Object

+{

+public:

+

+    virtual	~IPDF_LinkExtract() {}

+

+    static	IPDF_LinkExtract*	CreateLinkExtract();

+

+    virtual FX_BOOL				ExtractLinks(const IPDF_TextPage* pTextPage) = 0;

+public:

+

+    virtual int					CountLinks() const = 0;

+

+    virtual CFX_WideString		GetURL(int index) const = 0;

+

+    virtual	void				GetBoundedSegment(int index, int& start, int& count) const = 0;

+

+    virtual void				GetRects(int index, CFX_RectArray& rects) const = 0;

+};

+#endif

diff --git a/core/include/fxcodec/fx_codec.h b/core/include/fxcodec/fx_codec.h
new file mode 100644
index 0000000..bee9702
--- /dev/null
+++ b/core/include/fxcodec/fx_codec.h
@@ -0,0 +1,288 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_CODEC_H_

+#define _FX_CODEC_H_

+#ifndef _FXCRT_EXTENSION_

+#include "../fxcrt/fx_ext.h"

+#endif

+#include "fx_codec_def.h"

+#include "fx_codec_provider.h"

+class CFX_DIBSource;

+class ICodec_ScanlineDecoder;

+class ICodec_BasicModule;

+class ICodec_FaxModule;

+class ICodec_JpegModule;

+class ICodec_JpxModule;

+class ICodec_Jbig2Module;

+class ICodec_IccModule;

+class ICodec_FlateModule;

+class ICodec_Jbig2Encoder;

+class ICodec_ScanlineDecoder;

+class CCodec_ModuleMgr : public CFX_Object

+{

+public:

+

+    static CCodec_ModuleMgr*	Create();

+

+    void				Destroy();

+

+    void				InitJbig2Decoder();

+

+    void				InitJpxDecoder();

+

+

+    void				InitIccDecoder();

+

+    ICodec_Jbig2Encoder*		CreateJbig2Encoder();

+protected:

+    CCodec_ModuleMgr();

+    ~CCodec_ModuleMgr();

+public:

+    ICodec_BasicModule*	GetBasicModule()

+    {

+        return m_pBasicModule;

+    }

+    ICodec_FaxModule*	GetFaxModule()

+    {

+        return m_pFaxModule;

+    }

+    ICodec_JpegModule*	GetJpegModule()

+    {

+        return m_pJpegModule;

+    }

+    ICodec_JpxModule*	GetJpxModule()

+    {

+        return m_pJpxModule;

+    }

+    ICodec_Jbig2Module*	GetJbig2Module()

+    {

+        return m_pJbig2Module;

+    }

+    ICodec_IccModule*	GetIccModule()

+    {

+        return m_pIccModule;

+    }

+    ICodec_FlateModule*	GetFlateModule()

+    {

+        return m_pFlateModule;

+    }

+protected:

+    ICodec_BasicModule*	m_pBasicModule;

+    ICodec_FaxModule*	m_pFaxModule;

+    ICodec_JpegModule*	m_pJpegModule;

+    ICodec_JpxModule*	m_pJpxModule;

+    ICodec_Jbig2Module*	m_pJbig2Module;

+    ICodec_IccModule*	m_pIccModule;

+    ICodec_FlateModule*	m_pFlateModule;

+

+};

+class ICodec_BasicModule : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_BasicModule() {}

+    virtual FX_BOOL	RunLengthEncode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf,

+                                    FX_DWORD& dest_size) = 0;

+    virtual FX_BOOL	A85Encode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf,

+                              FX_DWORD& dest_size) = 0;

+    virtual ICodec_ScanlineDecoder*	CreateRunLengthDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height,

+            int nComps, int bpc) = 0;

+};

+class ICodec_ScanlineDecoder : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_ScanlineDecoder() {}

+

+    virtual FX_DWORD	GetSrcOffset() = 0;

+

+    virtual void		DownScale(int dest_width, int dest_height) = 0;

+

+    virtual FX_LPBYTE	GetScanline(int line) = 0;

+

+    virtual FX_BOOL		SkipToScanline(int line, IFX_Pause* pPause) = 0;

+

+    virtual int			GetWidth() = 0;

+

+    virtual int			GetHeight() = 0;

+

+    virtual int			CountComps() = 0;

+

+    virtual int			GetBPC() = 0;

+

+    virtual FX_BOOL		IsColorTransformed() = 0;

+

+    virtual void		ClearImageData() = 0;

+};

+class ICodec_FlateModule : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_FlateModule() {}

+    virtual ICodec_ScanlineDecoder*	CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height,

+            int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, int Columns) = 0;

+    virtual FX_DWORD	FlateOrLZWDecode(FX_BOOL bLZW, const FX_BYTE* src_buf, FX_DWORD src_size, FX_BOOL bEarlyChange,

+                                         int predictor, int Colors, int BitsPerComponent, int Columns,

+                                         FX_DWORD estimated_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0;

+    virtual FX_BOOL		Encode(const FX_BYTE* src_buf, FX_DWORD src_size,

+                               int predictor, int Colors, int BitsPerComponent, int Columns,

+                               FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0;

+    virtual FX_BOOL		Encode(FX_LPCBYTE src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0;

+};

+class ICodec_FaxModule : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_FaxModule() {}

+

+    virtual ICodec_ScanlineDecoder*	CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height,

+            int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows) = 0;

+

+

+    virtual FX_BOOL		Encode(FX_LPCBYTE src_buf, int width, int height, int pitch,

+                               FX_LPBYTE& dest_buf, FX_DWORD& dest_size) = 0;

+};

+class ICodec_JpegModule : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_JpegModule() {}

+

+    virtual void		SetPovider(IFX_JpegProvider* pJP) = 0;

+

+    virtual ICodec_ScanlineDecoder*	CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size,

+            int width, int height, int nComps, FX_BOOL ColorTransform) = 0;

+

+    virtual FX_BOOL		LoadInfo(FX_LPCBYTE src_buf, FX_DWORD src_size, int& width, int& height,

+                                 int& num_components, int& bits_per_components, FX_BOOL& color_transform,

+                                 FX_LPBYTE* icc_buf_ptr = NULL, FX_DWORD* icc_length = NULL) = 0;

+

+    virtual FX_BOOL		Encode(const class CFX_DIBSource* pSource, FX_LPBYTE& dest_buf, FX_STRSIZE& dest_size, int quality = 75,

+                               FX_LPCBYTE icc_buf = NULL, FX_DWORD icc_length = 0) = 0;

+

+    virtual void*		Start() = 0;

+

+    virtual void		Finish(void* pContext) = 0;

+

+    virtual void		Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0;

+

+    virtual int			ReadHeader(void* pContext, int* width, int* height, int* nComps) = 0;

+

+

+    virtual int			StartScanline(void* pContext, int down_scale) = 0;

+

+

+    virtual FX_BOOL		ReadScanline(void* pContext, FX_LPBYTE dest_buf) = 0;

+

+

+    virtual FX_DWORD	GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr = NULL) = 0;

+};

+class ICodec_JpxModule : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_JpxModule() {}

+

+    virtual FX_LPVOID 	CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, FX_BOOL useColorSpace = FALSE) = 0;

+

+    virtual void		GetImageInfo(FX_LPVOID ctx, FX_DWORD& width, FX_DWORD& height,

+                                     FX_DWORD& codestream_nComps, FX_DWORD& output_nComps) = 0;

+

+    virtual FX_BOOL		Decode(FX_LPVOID ctx, FX_LPBYTE dest_data, int pitch,

+                               FX_BOOL bTranslateColor, FX_LPBYTE offsets) = 0;

+

+    virtual void		DestroyDecoder(FX_LPVOID ctx) = 0;

+};

+class ICodec_Jbig2Module : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_Jbig2Module() {}

+

+    virtual FX_BOOL		Decode(FX_DWORD width, FX_DWORD height, FX_LPCBYTE src_buf, FX_DWORD src_size,

+                               FX_LPCBYTE global_data, FX_DWORD global_size, FX_LPBYTE dest_buf, FX_DWORD dest_pitch)  = 0;

+

+    virtual FX_BOOL		Decode(IFX_FileRead* file_ptr, FX_DWORD& width, FX_DWORD& height,

+                               FX_DWORD& pitch, FX_LPBYTE& dest_buf) = 0;

+    virtual void*				CreateJbig2Context() = 0;

+

+    virtual FXCODEC_STATUS		StartDecode(void* pJbig2Context, FX_DWORD width, FX_DWORD height, FX_LPCBYTE src_buf, FX_DWORD src_size,

+                                            FX_LPCBYTE global_data, FX_DWORD global_size, FX_LPBYTE dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause) = 0;

+

+    virtual FXCODEC_STATUS		StartDecode(void* pJbig2Context, IFX_FileRead* file_ptr,

+                                            FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, FX_LPBYTE& dest_buf, IFX_Pause* pPause) = 0;

+    virtual FXCODEC_STATUS		ContinueDecode(void* pJbig2Content, IFX_Pause* pPause) = 0;

+    virtual void				DestroyJbig2Context(void* pJbig2Content) = 0;

+};

+class ICodec_Jbig2Encoder : public CFX_Object

+{

+public:

+

+    virtual ~ICodec_Jbig2Encoder() {}

+};

+class ICodec_IccModule : public CFX_Object

+{

+public:

+    typedef enum {

+        IccCS_Unknown = 0,

+        IccCS_XYZ,

+        IccCS_Lab,

+        IccCS_Luv,

+        IccCS_YCbCr,

+        IccCS_Yxy,

+        IccCS_Hsv,

+        IccCS_Hls,

+        IccCS_Gray,

+        IccCS_Rgb,

+        IccCS_Cmyk,

+        IccCS_Cmy

+    } IccCS;

+    typedef struct _IccParam {

+        FX_DWORD	Version;

+        IccCS		ColorSpace;

+        FX_DWORD	dwProfileType;

+        FX_DWORD	dwFormat;

+        FX_LPBYTE	pProfileData;

+        FX_DWORD	dwProfileSize;

+        double		Gamma;

+    } IccParam;

+

+    virtual ~ICodec_IccModule() {}

+

+    virtual IccCS			GetProfileCS(FX_LPCBYTE pProfileData, unsigned int dwProfileSize) = 0;

+

+    virtual IccCS			GetProfileCS(IFX_FileRead* pFile) = 0;

+

+    virtual FX_LPVOID	CreateTransform(ICodec_IccModule::IccParam* pInputParam,

+                                        ICodec_IccModule::IccParam* pOutputParam,

+                                        ICodec_IccModule::IccParam* pProofParam = NULL,

+                                        FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL,

+                                        FX_DWORD dwFlag = Icc_FLAGS_DEFAULT,

+                                        FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,

+                                        FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING

+                                     ) = 0;

+

+

+    virtual FX_LPVOID	CreateTransform_sRGB(FX_LPCBYTE pProfileData, unsigned int dwProfileSize, int nComponents, int intent = 0,

+            FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT) = 0;

+

+    virtual FX_LPVOID	CreateTransform_CMYK(FX_LPCBYTE pSrcProfileData, unsigned int dwSrcProfileSize, int nSrcComponents,

+            FX_LPCBYTE pDstProfileData, unsigned int dwDstProfileSize, int intent = 0,

+            FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,

+            FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT

+                                          ) = 0;

+

+    virtual void			DestroyTransform(FX_LPVOID pTransform) = 0;

+

+    virtual void			Translate(FX_LPVOID pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues) = 0;

+

+    virtual void			TranslateScanline(FX_LPVOID pTransform, FX_LPBYTE pDest, FX_LPCBYTE pSrc, int pixels) = 0;

+};

+void AdobeCMYK_to_sRGB(FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B);

+void AdobeCMYK_to_sRGB1(FX_BYTE c, FX_BYTE m, FX_BYTE y, FX_BYTE k, FX_BYTE& R, FX_BYTE& G, FX_BYTE& B);

+FX_BOOL MD5ComputeID(FX_LPCVOID buf, FX_DWORD dwSize, FX_BYTE ID[16]);

+#endif

diff --git a/core/include/fxcodec/fx_codec_def.h b/core/include/fxcodec/fx_codec_def.h
new file mode 100644
index 0000000..72b10bd
--- /dev/null
+++ b/core/include/fxcodec/fx_codec_def.h
@@ -0,0 +1,71 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_CODEC_DEF_H_

+#define _FX_CODEC_DEF_H_

+enum FXCODEC_STATUS {

+    FXCODEC_STATUS_ERROR = -1,

+    FXCODEC_STATUS_FRAME_READY,

+    FXCODEC_STATUS_FRAME_TOBECONTINUE,

+    FXCODEC_STATUS_DECODE_READY,

+    FXCODEC_STATUS_DECODE_TOBECONTINUE,

+    FXCODEC_STATUS_DECODE_FINISH,

+    FXCODEC_STATUS_ERR_MEMORY,

+    FXCODEC_STATUS_ERR_READ,

+    FXCODEC_STATUS_ERR_FLUSH,

+    FXCODEC_STATUS_ERR_FORMAT,

+    FXCODEC_STATUS_ERR_PARAMS

+};

+#define JP2_SPACE_INVALID	-1

+#define JPX_SPACE_INVALID	-1

+#define JP2_SPACE_bilevel1	0

+#define JP2_SPACE_YCbCr1	1

+#define JP2_SPACE_YCbCr2	3

+#define JP2_SPACE_YCbCr3	4

+#define JP2_SPACE_PhotoYCC	9

+#define JP2_SPACE_CMY		11

+#define JP2_SPACE_CMYK		12

+#define JP2_SPACE_YCCK		13

+#define JP2_SPACE_CIELab	14

+#define JP2_SPACE_bilevel2	15

+#define JP2_SPACE_sRGB		16

+#define JP2_SPACE_sLUM		17

+#define JP2_SPACE_sYCC		18

+#define JP2_SPACE_CIEJab	19

+#define JP2_SPACE_esRGB		20

+#define JP2_SPACE_ROMMRGB	21

+#define JP2_SPACE_YPbPr60	22

+#define JP2_SPACE_YPbPr50	23

+#define JP2_SPACE_esYCC		24

+#define JP2_SPACE_iccLUM	100

+#define JP2_SPACE_iccRGB	101

+#define Icc_INTENT_PERCEPTUAL				0

+#define Icc_INTENT_RELATIVE_COLORIMETRIC	1

+#define Icc_INTENT_SATURATION				2

+#define Icc_INTENT_ABSOLUTE_COLORIMETRIC	3

+#define Icc_FORMAT_DEFAULT					0

+#define Icc_FORMAT_SWAP						(1<<10)

+#define Icc_FLAGS_DEFAULT					0x0000

+#define Icc_FLAGS_BLACKPOINTCOMPENSATION	0x2000

+#define Icc_FLAGS_NOWHITEONWHITEFIXUP		0x0004

+#define Icc_FLAGS_HIGHRESPRECALC			0x0400

+#define Icc_FLAGS_LOWRESPRECALC				0x0800

+#define Icc_FLAGS_GAMUTCHECK				0x1000

+#define Icc_FLAGS_SOFTPROOFING				0x4000

+#define Icc_PARAMTYPE_NONE					0

+#define Icc_PARAMTYPE_BUFFER				1

+#define Icc_PARAMTYPE_PARAM					2

+#define EXIFTAG_USHORT_RESUNIT				296

+#define EXIFTAG_FLOAT_DPIX					282

+#define EXIFTAG_FLOAT_DPIY					283

+#define EXIFTAG_USHORT_ORIENTATION			274

+#define EXIFTAG_STRING_MANUFACTURER			271

+#define EXIFTAG_STRING_MODULE				272

+#define EXIFTAG_STRING_SOFTWARE				305

+#define EXIFTAG_STRING_IAMGEDESCRIPTION		270

+#define EXIFTAG_STRING_DATETIME				306

+#define EXIFTAG_STRING_COPYRIGHT			33432

+#endif

diff --git a/core/include/fxcodec/fx_codec_provider.h b/core/include/fxcodec/fx_codec_provider.h
new file mode 100644
index 0000000..4ef61d8
--- /dev/null
+++ b/core/include/fxcodec/fx_codec_provider.h
@@ -0,0 +1,53 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_CODEC_PROVIDER_H_

+#define _FX_CODEC_PROVIDER_H_

+class IFX_JpegProvider

+{

+public:

+

+    virtual void		Release() = 0;

+

+    virtual void*		CreateDecoder(FX_LPCBYTE src_buf, FX_DWORD src_size, int width, int height, int nComps, FX_BOOL ColorTransform) = 0;

+

+

+    virtual void		DestroyDecoder(void* pDecoder) = 0;

+

+    virtual void		DownScale(void* pDecoder, int dest_width, int dest_height) = 0;

+

+    virtual FX_BOOL		Rewind(void* pDecoder) = 0;

+

+    virtual FX_LPBYTE	GetNextLine(void* pDecoder) = 0;

+

+    virtual FX_DWORD	GetSrcOffset(void* pDecoder) = 0;

+

+

+    virtual FX_BOOL		LoadInfo(FX_LPCBYTE src_buf, FX_DWORD src_size, int& width, int& height,

+                                 int& num_components, int& bits_per_components, FX_BOOL& color_transform,

+                                 FX_LPBYTE* icc_buf_ptr = NULL, FX_DWORD* icc_length = NULL) = 0;

+

+    virtual FX_BOOL		Encode(const class CFX_DIBSource* pSource, FX_LPBYTE& dest_buf, FX_STRSIZE& dest_size, int quality = 75,

+                               FX_LPCBYTE icc_buf = NULL, FX_DWORD icc_length = 0) = 0;

+

+    virtual void*		Start() = 0;

+

+    virtual void		Finish(void* pContext) = 0;

+

+    virtual void		Input(void* pContext, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0;

+

+    virtual int			ReadHeader(void* pContext, int* width, int* height, int* nComps) = 0;

+

+

+    virtual int			StartScanline(void* pContext, int down_scale) = 0;

+

+

+    virtual FX_BOOL		ReadScanline(void* pContext, FX_LPBYTE dest_buf) = 0;

+

+

+    virtual FX_DWORD	GetAvailInput(void* pContext, FX_LPBYTE* avail_buf_ptr = NULL) = 0;

+};

+#endif

diff --git a/core/include/fxcrt/fx_arb.h b/core/include/fxcrt/fx_arb.h
new file mode 100644
index 0000000..4950f81
--- /dev/null
+++ b/core/include/fxcrt/fx_arb.h
@@ -0,0 +1,20 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef _FX_ARABIC_
+#define _FX_ARABIC_
+class IFX_BidiChar
+{
+public:
+    static IFX_BidiChar*	Create();
+    virtual void			Release() = 0;
+    virtual void			SetPolicy(FX_BOOL bSeparateNeutral = TRUE) = 0;
+    virtual FX_BOOL			AppendChar(FX_WCHAR wch) = 0;
+    virtual FX_BOOL			EndChar() = 0;
+    virtual FX_INT32		GetBidiInfo(FX_INT32 &iStart, FX_INT32 &iCount) = 0;
+    virtual void			Reset() = 0;
+};
+#endif
diff --git a/core/include/fxcrt/fx_basic.h b/core/include/fxcrt/fx_basic.h
new file mode 100644
index 0000000..29bc221
--- /dev/null
+++ b/core/include/fxcrt/fx_basic.h
@@ -0,0 +1,1642 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_BASIC_H_

+#define _FX_BASIC_H_

+#ifndef _FX_SYSTEM_H_

+#include "fx_system.h"

+#endif

+#ifndef _FX_MEMORY_H_

+#include "fx_memory.h"

+#endif

+#ifndef _FX_STRING_H_

+#include "fx_string.h"

+#endif

+#ifndef _FX_STREAM_H_

+#include "fx_stream.h"

+#endif

+class CFX_BinaryBuf : public CFX_Object

+{

+public:

+

+    CFX_BinaryBuf(IFX_Allocator* pAllocator = NULL);

+

+    CFX_BinaryBuf(FX_STRSIZE size, IFX_Allocator* pAllocator = NULL);

+

+    ~CFX_BinaryBuf();

+

+    void					Clear();

+

+    void					EstimateSize(FX_STRSIZE size, FX_STRSIZE alloc_step = 0);

+

+    void					AppendBlock(const void* pBuf, FX_STRSIZE size);

+

+    void					AppendFill(FX_BYTE byte, FX_STRSIZE count);

+

+    void					AppendString(FX_BSTR str)

+    {

+        AppendBlock(str.GetPtr(), str.GetLength());

+    }

+

+    inline void				AppendByte(FX_BYTE byte)

+    {

+        if (m_AllocSize <= m_DataSize) {

+            ExpandBuf(1);

+        }

+        m_pBuffer[m_DataSize++] = byte;

+    }

+

+    void					InsertBlock(FX_STRSIZE pos, const void* pBuf, FX_STRSIZE size);

+

+    void					AttachData(void* pBuf, FX_STRSIZE size);

+

+    void					CopyData(const void* pBuf, FX_STRSIZE size);

+

+    void					TakeOver(CFX_BinaryBuf& other);

+

+    void					Delete(int start_index, int count);

+

+    FX_LPBYTE				GetBuffer() const

+    {

+        return m_pBuffer;

+    }

+

+    FX_STRSIZE				GetSize() const

+    {

+        return m_DataSize;

+    }

+

+    CFX_ByteStringC			GetByteString() const;

+    void					GetByteStringL(CFX_ByteStringL &str) const;

+

+    void					DetachBuffer();

+

+    IFX_Allocator*			m_pAllocator;

+protected:

+

+    FX_STRSIZE				m_AllocStep;

+

+    FX_LPBYTE				m_pBuffer;

+

+    FX_STRSIZE				m_DataSize;

+

+    FX_STRSIZE				m_AllocSize;

+

+    void					ExpandBuf(FX_STRSIZE size);

+};

+class CFX_ByteTextBuf : public CFX_BinaryBuf

+{

+public:

+

+    CFX_ByteTextBuf(IFX_Allocator* pAllocator = NULL) : CFX_BinaryBuf(pAllocator) {}

+

+    void					operator = (FX_BSTR str);

+

+    void					AppendChar(int ch)

+    {

+        AppendByte((FX_BYTE)ch);

+    }

+

+    CFX_ByteTextBuf&		operator << (int i);

+

+    CFX_ByteTextBuf&		operator << (FX_DWORD i);

+

+    CFX_ByteTextBuf&		operator << (double f);

+

+    CFX_ByteTextBuf&		operator << (FX_BSTR lpsz);

+

+    CFX_ByteTextBuf&		operator << (const CFX_ByteTextBuf& buf);

+

+    FX_STRSIZE				GetLength() const

+    {

+        return m_DataSize;

+    }

+};

+class CFX_WideTextBuf : public CFX_BinaryBuf

+{

+public:

+

+    CFX_WideTextBuf(IFX_Allocator* pAllocator = NULL) : CFX_BinaryBuf(pAllocator) {}

+

+    void					operator = (FX_LPCWSTR lpsz);

+

+    void					operator = (FX_WSTR str);

+

+    void					AppendChar(FX_WCHAR wch);

+

+    CFX_WideTextBuf&		operator << (int i);

+

+    CFX_WideTextBuf&		operator << (double f);

+

+    CFX_WideTextBuf&		operator << (FX_LPCWSTR lpsz);

+

+    CFX_WideTextBuf&		operator << (FX_WSTR str);

+    CFX_WideTextBuf&		operator << (const CFX_WideString &str);

+

+    CFX_WideTextBuf&		operator << (const CFX_WideTextBuf& buf);

+

+    FX_STRSIZE				GetLength() const

+    {

+        return m_DataSize / sizeof(FX_WCHAR);

+    }

+

+    FX_LPWSTR				GetBuffer() const

+    {

+        return (FX_LPWSTR)m_pBuffer;

+    }

+

+    void					Delete(int start_index, int count)

+    {

+        CFX_BinaryBuf::Delete(start_index * sizeof(FX_WCHAR), count * sizeof(FX_WCHAR));

+    }

+

+    CFX_WideStringC			GetWideString() const;

+    void					GetWideStringL(CFX_WideStringL& wideText) const;

+};

+class CFX_ArchiveSaver : public CFX_Object

+{

+public:

+

+    CFX_ArchiveSaver(IFX_Allocator* pAllocator = NULL) : m_SavingBuf(pAllocator), m_pStream(NULL) {}

+

+    CFX_ArchiveSaver&		operator << (FX_BYTE i);

+

+    CFX_ArchiveSaver&		operator << (int i);

+

+    CFX_ArchiveSaver&		operator << (FX_DWORD i);

+

+    CFX_ArchiveSaver&		operator << (FX_FLOAT i);

+

+    CFX_ArchiveSaver&		operator << (double i);

+

+    CFX_ArchiveSaver&		operator << (FX_BSTR bstr);

+

+    CFX_ArchiveSaver&		operator << (FX_LPCWSTR bstr);

+

+    CFX_ArchiveSaver&		operator << (const CFX_WideString& wstr);

+

+    void					Write(const void* pData, FX_STRSIZE dwSize);

+

+    FX_INTPTR				GetLength()

+    {

+        return m_SavingBuf.GetSize();

+    }

+

+    FX_LPCBYTE				GetBuffer()

+    {

+        return m_SavingBuf.GetBuffer();

+    }

+

+    void					SetStream(IFX_FileStream* pStream)

+    {

+        m_pStream = pStream;

+    }

+protected:

+

+    CFX_BinaryBuf			m_SavingBuf;

+

+    IFX_FileStream*			m_pStream;

+};

+class CFX_ArchiveLoader : public CFX_Object

+{

+public:

+

+    CFX_ArchiveLoader(FX_LPCBYTE pData, FX_DWORD dwSize);

+

+    CFX_ArchiveLoader&		operator >> (FX_BYTE& i);

+

+    CFX_ArchiveLoader&		operator >> (int& i);

+

+    CFX_ArchiveLoader&		operator >> (FX_DWORD& i);

+

+    CFX_ArchiveLoader&		operator >> (FX_FLOAT& i);

+

+    CFX_ArchiveLoader&		operator >> (double& i);

+

+    CFX_ArchiveLoader&		operator >> (CFX_ByteString& bstr);

+

+    CFX_ArchiveLoader&		operator >> (CFX_WideString& wstr);

+

+    FX_BOOL					IsEOF();

+

+    FX_BOOL					Read(void* pBuf, FX_DWORD dwSize);

+protected:

+

+    FX_DWORD				m_LoadingPos;

+

+    FX_LPCBYTE				m_pLoadingBuf;

+

+    FX_DWORD				m_LoadingSize;

+};

+class IFX_BufferArchive

+{

+public:

+

+    IFX_BufferArchive(FX_STRSIZE size, IFX_Allocator* pAllocator = NULL);

+

+

+    virtual void			Clear();

+

+

+    FX_BOOL					Flush();

+

+

+    FX_INT32				AppendBlock(const void* pBuf, size_t size);

+

+    FX_INT32				AppendByte(FX_BYTE byte);

+

+    FX_INT32				AppendDWord(FX_DWORD i);

+

+

+    FX_INT32				AppendString(FX_BSTR lpsz);

+

+protected:

+

+    virtual	FX_BOOL			DoWork(const void* pBuf, size_t size) = 0;

+

+

+    IFX_Allocator*			m_pAllocator;

+

+    FX_STRSIZE				m_BufSize;

+

+    FX_LPBYTE				m_pBuffer;

+

+    FX_STRSIZE				m_Length;

+};

+class CFX_FileBufferArchive : public IFX_BufferArchive, public CFX_Object

+{

+public:

+    CFX_FileBufferArchive(FX_STRSIZE size = 32768, IFX_Allocator* pAllocator = NULL);

+    ~CFX_FileBufferArchive();

+    virtual void			Clear();

+

+    FX_BOOL					AttachFile(IFX_StreamWrite *pFile, FX_BOOL bTakeover = FALSE);

+

+    FX_BOOL					AttachFile(FX_LPCWSTR filename);

+

+    FX_BOOL					AttachFile(FX_LPCSTR filename);

+private:

+

+    virtual FX_BOOL			DoWork(const void* pBuf, size_t size);

+

+    IFX_StreamWrite			*m_pFile;

+

+    FX_BOOL					m_bTakeover;

+};

+struct CFX_CharMap {

+

+    static CFX_CharMap*		GetDefaultMapper(FX_INT32 codepage = 0);

+

+

+    CFX_WideString	(*m_GetWideString)(CFX_CharMap* pMap, const CFX_ByteString& bstr);

+

+    CFX_ByteString	(*m_GetByteString)(CFX_CharMap* pMap, const CFX_WideString& wstr);

+

+    FX_INT32		(*m_GetCodePage)();

+};

+class CFX_UTF8Decoder

+{

+public:

+

+    CFX_UTF8Decoder(IFX_Allocator* pAllocator = NULL) : m_Buffer(pAllocator)

+    {

+        m_PendingBytes = 0;

+    }

+

+    void			Clear();

+

+    void			Input(FX_BYTE byte);

+

+    void			AppendChar(FX_DWORD ch);

+

+    void			ClearStatus()

+    {

+        m_PendingBytes = 0;

+    }

+

+    CFX_WideStringC	GetResult() const

+    {

+        return m_Buffer.GetWideString();

+    }

+    void			GetResult(CFX_WideStringL &result) const

+    {

+        m_Buffer.GetWideStringL(result);

+    }

+protected:

+

+    int				m_PendingBytes;

+

+    FX_DWORD		m_PendingChar;

+

+    CFX_WideTextBuf	m_Buffer;

+};

+class CFX_UTF8Encoder

+{

+public:

+

+    CFX_UTF8Encoder(IFX_Allocator* pAllocator = NULL) : m_Buffer(pAllocator)

+    {

+        m_UTF16First = 0;

+    }

+

+    void			Input(FX_WCHAR unicode);

+

+    void			AppendStr(FX_BSTR str)

+    {

+        m_UTF16First = 0;

+        m_Buffer << str;

+    }

+

+    CFX_ByteStringC	GetResult() const

+    {

+        return m_Buffer.GetByteString();

+    }

+    void			GetResult(CFX_ByteStringL &result) const

+    {

+        m_Buffer.GetByteStringL(result);

+    }

+protected:

+

+    CFX_ByteTextBuf	m_Buffer;

+

+    FX_DWORD		m_UTF16First;

+};

+CFX_ByteString FX_UrlEncode(const CFX_WideString& wsUrl);

+CFX_WideString FX_UrlDecode(const CFX_ByteString& bsUrl);

+CFX_ByteString FX_EncodeURI(const CFX_WideString& wsURI);

+CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI);

+class CFX_BasicArray : public CFX_Object

+{

+public:

+

+    IFX_Allocator*	m_pAllocator;

+protected:

+

+    CFX_BasicArray(int unit_size, IFX_Allocator* pAllocator = NULL);

+

+    ~CFX_BasicArray();

+

+    FX_BOOL			SetSize(int nNewSize, int nGrowBy);

+

+    FX_BOOL			Append(const CFX_BasicArray& src);

+

+    FX_BOOL			Copy(const CFX_BasicArray& src);

+

+    FX_LPBYTE		InsertSpaceAt(int nIndex, int nCount);

+

+    FX_BOOL			RemoveAt(int nIndex, int nCount);

+

+    FX_BOOL			InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray);

+

+    const void*		GetDataPtr(int index) const;

+protected:

+

+    FX_LPBYTE		m_pData;

+

+    int				m_nSize;

+

+    int				m_nMaxSize;

+

+    int				m_nGrowBy;

+

+    int				m_nUnitSize;

+};

+template<class TYPE>

+class CFX_ArrayTemplate : public CFX_BasicArray

+{

+public:

+

+    CFX_ArrayTemplate(IFX_Allocator* pAllocator = NULL) : CFX_BasicArray(sizeof(TYPE), pAllocator) {}

+

+    int			GetSize() const

+    {

+        return m_nSize;

+    }

+

+    int			GetUpperBound() const

+    {

+        return m_nSize - 1;

+    }

+

+    FX_BOOL		SetSize(int nNewSize, int nGrowBy = -1)

+    {

+        return CFX_BasicArray::SetSize(nNewSize, nGrowBy);

+    }

+

+    void		RemoveAll()

+    {

+        SetSize(0, -1);

+    }

+

+    const TYPE	GetAt(int nIndex) const

+    {

+        if (nIndex < 0 || nIndex >= m_nSize) {

+            return (const TYPE&)(*(volatile const TYPE*)NULL);

+        }

+        return ((const TYPE*)m_pData)[nIndex];

+    }

+

+    FX_BOOL		SetAt(int nIndex, TYPE newElement)

+    {

+        if (nIndex < 0 || nIndex >= m_nSize) {

+            return FALSE;

+        }

+        ((TYPE*)m_pData)[nIndex] = newElement;

+        return TRUE;

+    }

+

+    TYPE&		ElementAt(int nIndex)

+    {

+        if (nIndex < 0 || nIndex >= m_nSize) {

+            return *(TYPE*)NULL;

+        }

+        return ((TYPE*)m_pData)[nIndex];

+    }

+

+    const TYPE*	GetData() const

+    {

+        return (const TYPE*)m_pData;

+    }

+

+    TYPE*		GetData()

+    {

+        return (TYPE*)m_pData;

+    }

+

+    FX_BOOL		SetAtGrow(int nIndex, TYPE newElement)

+    {

+        if (nIndex < 0) {

+            return FALSE;

+        }

+        if (nIndex >= m_nSize)

+            if (!SetSize(nIndex + 1, -1)) {

+                return FALSE;

+            }

+        ((TYPE*)m_pData)[nIndex] = newElement;

+        return TRUE;

+    }

+

+    FX_BOOL		Add(TYPE newElement)

+    {

+        if (m_nSize < m_nMaxSize) {

+            m_nSize ++;

+        } else if (!SetSize(m_nSize + 1, -1)) {

+            return FALSE;

+        }

+        ((TYPE*)m_pData)[m_nSize - 1] = newElement;

+        return TRUE;

+    }

+

+    FX_BOOL		Append(const CFX_ArrayTemplate& src)

+    {

+        return CFX_BasicArray::Append(src);

+    }

+

+    FX_BOOL		Copy(const CFX_ArrayTemplate& src)

+    {

+        return CFX_BasicArray::Copy(src);

+    }

+

+    TYPE*		GetDataPtr(int index)

+    {

+        return (TYPE*)CFX_BasicArray::GetDataPtr(index);

+    }

+

+    TYPE*		AddSpace()

+    {

+        return (TYPE*)CFX_BasicArray::InsertSpaceAt(m_nSize, 1);

+    }

+

+    TYPE*		InsertSpaceAt(int nIndex, int nCount)

+    {

+        return (TYPE*)CFX_BasicArray::InsertSpaceAt(nIndex, nCount);

+    }

+

+    const TYPE	operator[](int nIndex) const

+    {

+        if (nIndex < 0 || nIndex >= m_nSize) {

+            *(volatile char*)0 = '\0';

+        }

+        return ((const TYPE*)m_pData)[nIndex];

+    }

+

+    TYPE&		operator[](int nIndex)

+    {

+        if (nIndex < 0 || nIndex >= m_nSize) {

+            *(volatile char*)0 = '\0';

+        }

+        return ((TYPE*)m_pData)[nIndex];

+    }

+

+    FX_BOOL		InsertAt(int nIndex, TYPE newElement, int nCount = 1)

+    {

+        if (!InsertSpaceAt(nIndex, nCount)) {

+            return FALSE;

+        }

+        while (nCount--) {

+            ((TYPE*)m_pData)[nIndex++] = newElement;

+        }

+        return TRUE;

+    }

+

+    FX_BOOL		RemoveAt(int nIndex, int nCount = 1)

+    {

+        return CFX_BasicArray::RemoveAt(nIndex, nCount);

+    }

+

+    FX_BOOL		InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray)

+    {

+        return CFX_BasicArray::InsertAt(nStartIndex, pNewArray);

+    }

+

+    int			Find(TYPE data, int iStart = 0) const

+    {

+        if (iStart < 0) {

+            return -1;

+        }

+        for (; iStart < (int)m_nSize; iStart ++)

+            if (((TYPE*)m_pData)[iStart] == data) {

+                return iStart;

+            }

+        return -1;

+    }

+};

+typedef CFX_ArrayTemplate<FX_BYTE>		CFX_ByteArray;

+typedef CFX_ArrayTemplate<FX_WORD>		CFX_WordArray;

+typedef CFX_ArrayTemplate<FX_DWORD>		CFX_DWordArray;

+typedef CFX_ArrayTemplate<void*>		CFX_PtrArray;

+typedef CFX_ArrayTemplate<FX_FILESIZE>	CFX_FileSizeArray;

+typedef CFX_ArrayTemplate<FX_FLOAT>		CFX_FloatArray;

+typedef CFX_ArrayTemplate<FX_INT32>		CFX_Int32Array;

+template <class ObjectClass>

+class CFX_ObjectArray : public CFX_BasicArray

+{

+public:

+

+    CFX_ObjectArray(IFX_Allocator* pAllocator = NULL) : CFX_BasicArray(sizeof(ObjectClass), pAllocator) {}

+

+    ~CFX_ObjectArray()

+    {

+        RemoveAll();

+    }

+

+    void			Add(const ObjectClass& data)

+    {

+        new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass(data);

+    }

+

+    ObjectClass&	Add()

+    {

+        return *(ObjectClass*) new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass();

+    }

+

+    void*			AddSpace()

+    {

+        return InsertSpaceAt(m_nSize, 1);

+    }

+

+    FX_INT32		Append(const CFX_ObjectArray& src, FX_INT32 nStart = 0, FX_INT32 nCount = -1)

+    {

+        if (nCount == 0) {

+            return 0;

+        }

+        FX_INT32 nSize = src.GetSize();

+        if (!nSize) {

+            return 0;

+        }

+        FXSYS_assert(nStart > -1 && nStart < nSize);

+        if (nCount < 0) {

+            nCount = nSize;

+        }

+        if (nStart + nCount > nSize) {

+            nCount = nSize - nStart;

+        }

+        if (nCount < 1) {

+            return 0;

+        }

+        nSize = m_nSize;

+        InsertSpaceAt(m_nSize, nCount);

+        ObjectClass* pStartObj = (ObjectClass*)GetDataPtr(nSize);

+        nSize = nStart + nCount;

+        for (FX_INT32 i = nStart; i < nSize; i ++, pStartObj++) {

+            new ((void*)pStartObj) ObjectClass(src[i]);

+        }

+        return nCount;

+    }

+

+    FX_INT32		Copy(const CFX_ObjectArray& src, FX_INT32 nStart = 0, FX_INT32 nCount = -1)

+    {

+        if (nCount == 0) {

+            return 0;

+        }

+        FX_INT32 nSize = src.GetSize();

+        if (!nSize) {

+            return 0;

+        }

+        FXSYS_assert(nStart > -1 && nStart < nSize);

+        if (nCount < 0) {

+            nCount = nSize;

+        }

+        if (nStart + nCount > nSize) {

+            nCount = nSize - nStart;

+        }

+        if (nCount < 1) {

+            return 0;

+        }

+        RemoveAll();

+        SetSize(nCount, -1);

+        ObjectClass* pStartObj = (ObjectClass*)m_pData;

+        nSize = nStart + nCount;

+        for (FX_INT32 i = nStart; i < nSize; i ++, pStartObj++) {

+            new ((void*)pStartObj) ObjectClass(src[i]);

+        }

+        return nCount;

+    }

+

+    int				GetSize() const

+    {

+        return m_nSize;

+    }

+

+    ObjectClass&	operator[] (int index) const

+    {

+        FXSYS_assert(index < m_nSize);

+        return *(ObjectClass*)CFX_BasicArray::GetDataPtr(index);

+    }

+

+    ObjectClass*	GetDataPtr(int index)

+    {

+        return (ObjectClass*)CFX_BasicArray::GetDataPtr(index);

+    }

+

+    void			RemoveAt(int index)

+    {

+        FXSYS_assert(index < m_nSize);

+        ((ObjectClass*)GetDataPtr(index))->~ObjectClass();

+        CFX_BasicArray::RemoveAt(index, 1);

+    }

+

+    void			RemoveAll()

+    {

+        for (int i = 0; i < m_nSize; i ++) {

+            ((ObjectClass*)GetDataPtr(i))->~ObjectClass();

+        }

+        CFX_BasicArray::SetSize(0, -1);

+    }

+};

+typedef CFX_ObjectArray<CFX_ByteString> CFX_ByteStringArray;

+typedef CFX_ObjectArray<CFX_WideString> CFX_WideStringArray;

+class CFX_BaseSegmentedArray : public CFX_Object

+{

+public:

+

+    CFX_BaseSegmentedArray(int unit_size = 1, int segment_units = 512, int index_size = 8, IFX_Allocator* pAllocator = NULL);

+

+    ~CFX_BaseSegmentedArray();

+

+    void	SetUnitSize(int unit_size, int segment_units, int index_size = 8);

+

+    void*	Add();

+

+    void*	GetAt(int index) const;

+

+    void	RemoveAll();

+

+    void	Delete(int index, int count = 1);

+

+    int		GetSize() const

+    {

+        return m_DataSize;

+    }

+

+    int		GetSegmentSize() const

+    {

+        return m_SegmentSize;

+    }

+

+    int		GetUnitSize() const

+    {

+        return m_UnitSize;

+    }

+

+    void*	Iterate(FX_BOOL (*callback)(void* param, void* pData), void* param) const;

+

+    IFX_Allocator*	m_pAllocator;

+private:

+

+    int				m_UnitSize;

+

+    short			m_SegmentSize;

+

+    FX_BYTE			m_IndexSize;

+

+    FX_BYTE			m_IndexDepth;

+

+    int				m_DataSize;

+

+    void*			m_pIndex;

+    void**	GetIndex(int seg_index) const;

+    void*	IterateIndex(int level, int& start, void** pIndex, FX_BOOL (*callback)(void* param, void* pData), void* param) const;

+    void*	IterateSegment(FX_LPCBYTE pSegment, int count, FX_BOOL (*callback)(void* param, void* pData), void* param) const;

+};

+template <class ElementType>

+class CFX_SegmentedArray : public CFX_BaseSegmentedArray

+{

+public:

+

+    CFX_SegmentedArray(int segment_units, int index_size = 8, IFX_Allocator* pAllocator = NULL)

+        : CFX_BaseSegmentedArray(sizeof(ElementType), segment_units, index_size, pAllocator)

+    {}

+

+    void	Add(ElementType data)

+    {

+        *(ElementType*)CFX_BaseSegmentedArray::Add() = data;

+    }

+

+    ElementType& operator [] (int index)

+    {

+        return *(ElementType*)CFX_BaseSegmentedArray::GetAt(index);

+    }

+};

+template <class DataType, int FixedSize>

+class CFX_FixedBufGrow : public CFX_Object

+{

+public:

+    CFX_FixedBufGrow(IFX_Allocator* pAllocator = NULL)

+        : m_pAllocator(pAllocator)

+        , m_pData(NULL)

+    {}

+    CFX_FixedBufGrow(int data_size, IFX_Allocator* pAllocator = NULL)

+        : m_pAllocator(pAllocator)

+        , m_pData(NULL)

+    {

+        if (data_size > FixedSize) {

+            m_pData = FX_Allocator_Alloc(m_pAllocator, DataType, data_size);

+        } else {

+            FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize);

+        }

+    }

+    void SetDataSize(int data_size)

+    {

+        if (m_pData) {

+            FX_Allocator_Free(m_pAllocator, m_pData);

+        }

+        m_pData = NULL;

+        if (data_size > FixedSize) {

+            m_pData = FX_Allocator_Alloc(m_pAllocator, DataType, data_size);

+        } else {

+            FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize);

+        }

+    }

+    ~CFX_FixedBufGrow()

+    {

+        if (m_pData) {

+            FX_Allocator_Free(m_pAllocator, m_pData);

+        }

+    }

+    operator DataType*()

+    {

+        return m_pData ? m_pData : m_Data;

+    }

+private:

+    IFX_Allocator*	m_pAllocator;

+    DataType		m_Data[FixedSize];

+    DataType*		m_pData;

+};

+template <class DataType>

+class CFX_TempBuf

+{

+public:

+    CFX_TempBuf(int size, IFX_Allocator* pAllocator = NULL) : m_pAllocator(pAllocator)

+    {

+        m_pData = FX_Allocator_Alloc(m_pAllocator, DataType, size);

+    }

+    ~CFX_TempBuf()

+    {

+        if (m_pData) {

+            FX_Allocator_Free(m_pAllocator, m_pData);

+        }

+    }

+    DataType&	operator[](int i)

+    {

+        FXSYS_assert(m_pData != NULL);

+        return m_pData[i];

+    }

+    operator DataType*()

+    {

+        return m_pData;

+    }

+private:

+    IFX_Allocator*	m_pAllocator;

+    DataType*		m_pData;

+};

+class CFX_MapPtrToPtr : public CFX_Object

+{

+protected:

+

+    struct CAssoc {

+

+        CAssoc* pNext;

+

+        void* key;

+

+        void* value;

+    };

+public:

+

+    CFX_MapPtrToPtr(int nBlockSize = 10, IFX_Allocator* pAllocator = NULL);

+

+    ~CFX_MapPtrToPtr();

+

+    int GetCount() const

+    {

+        return m_nCount;

+    }

+

+    FX_BOOL IsEmpty() const

+    {

+        return m_nCount == 0;

+    }

+

+    FX_BOOL Lookup(void* key, void*& rValue) const;

+

+    void* GetValueAt(void* key) const;

+

+    void*& operator[](void* key);

+

+    void SetAt(void* key, void* newValue)

+    {

+        (*this)[key] = newValue;

+    }

+

+    FX_BOOL RemoveKey(void* key);

+

+    void RemoveAll();

+

+    FX_POSITION GetStartPosition() const

+    {

+        return (m_nCount == 0) ? NULL : (FX_POSITION) - 1;

+    }

+

+    void GetNextAssoc(FX_POSITION& rNextPosition, void*& rKey, void*& rValue) const;

+

+    FX_DWORD GetHashTableSize() const

+    {

+        return m_nHashTableSize;

+    }

+

+    void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);

+protected:

+

+    IFX_Allocator*	m_pAllocator;

+

+    CAssoc** m_pHashTable;

+

+    FX_DWORD m_nHashTableSize;

+

+    int m_nCount;

+

+    CAssoc* m_pFreeList;

+

+    struct CFX_Plex* m_pBlocks;

+

+    int m_nBlockSize;

+

+    FX_DWORD HashKey(void* key) const;

+

+    CAssoc* NewAssoc();

+

+    void FreeAssoc(CAssoc* pAssoc);

+

+    CAssoc* GetAssocAt(void* key, FX_DWORD& hash) const;

+};

+template <class KeyType, class ValueType>

+class CFX_MapPtrTemplate : public CFX_MapPtrToPtr

+{

+public:

+

+    CFX_MapPtrTemplate(IFX_Allocator* pAllocator = NULL) : CFX_MapPtrToPtr(10, pAllocator) {}

+

+    FX_BOOL	Lookup(KeyType key, ValueType& rValue) const

+    {

+        FX_LPVOID pValue = NULL;

+        if (!CFX_MapPtrToPtr::Lookup((void*)(FX_UINTPTR)key, pValue)) {

+            return FALSE;

+        }

+        rValue = (ValueType)(FX_UINTPTR)pValue;

+        return TRUE;

+    }

+

+    ValueType& operator[](KeyType key)

+    {

+        return (ValueType&)CFX_MapPtrToPtr::operator []((void*)(FX_UINTPTR)key);

+    }

+

+    void SetAt(KeyType key, ValueType newValue)

+    {

+        CFX_MapPtrToPtr::SetAt((void*)(FX_UINTPTR)key, (void*)(FX_UINTPTR)newValue);

+    }

+

+    FX_BOOL	RemoveKey(KeyType key)

+    {

+        return CFX_MapPtrToPtr::RemoveKey((void*)(FX_UINTPTR)key);

+    }

+

+    void GetNextAssoc(FX_POSITION& rNextPosition, KeyType& rKey, ValueType& rValue) const

+    {

+        void* pKey = NULL;

+        void* pValue = NULL;

+        CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue);

+        rKey = (KeyType)(FX_UINTPTR)pKey;

+        rValue = (ValueType)(FX_UINTPTR)pValue;

+    }

+};

+class CFX_CMapDWordToDWord : public CFX_Object

+{

+public:

+

+    CFX_CMapDWordToDWord(IFX_Allocator* pAllocator = NULL) : m_Buffer(pAllocator) {}

+

+    FX_BOOL			Lookup(FX_DWORD key, FX_DWORD& value) const;

+

+    void			SetAt(FX_DWORD key, FX_DWORD value);

+

+    void			EstimateSize(FX_DWORD size, FX_DWORD grow_by);

+

+    FX_POSITION		GetStartPosition() const;

+

+    void			GetNextAssoc(FX_POSITION& pos, FX_DWORD& key, FX_DWORD& value) const;

+protected:

+

+    CFX_BinaryBuf	m_Buffer;

+};

+class CFX_MapByteStringToPtr : public CFX_Object

+{

+protected:

+

+    struct CAssoc {

+

+        CAssoc* pNext;

+

+        FX_DWORD nHashValue;

+

+        CFX_ByteString key;

+

+        void* value;

+    };

+public:

+

+    CFX_MapByteStringToPtr(int nBlockSize = 10, IFX_Allocator* pAllocator = NULL);

+

+    int GetCount() const

+    {

+        return m_nCount;

+    }

+

+    FX_BOOL IsEmpty() const

+    {

+        return m_nCount == 0;

+    }

+

+    FX_BOOL Lookup(FX_BSTR key, void*& rValue) const;

+

+    void*& operator[](FX_BSTR key);

+

+    void SetAt(FX_BSTR key, void* newValue)

+    {

+        (*this)[key] = newValue;

+    }

+

+    FX_BOOL RemoveKey(FX_BSTR key);

+

+    void RemoveAll();

+

+    FX_POSITION GetStartPosition() const

+    {

+        return (m_nCount == 0) ? NULL : (FX_POSITION) - 1;

+    }

+

+    void GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const;

+

+    FX_LPVOID		GetNextValue(FX_POSITION& rNextPosition) const;

+

+    FX_DWORD GetHashTableSize() const

+    {

+        return m_nHashTableSize;

+    }

+

+    void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);

+

+    FX_DWORD HashKey(FX_BSTR key) const;

+protected:

+

+    IFX_Allocator*	m_pAllocator;

+

+    CAssoc** m_pHashTable;

+

+    FX_DWORD m_nHashTableSize;

+

+    int m_nCount;

+

+    CAssoc* m_pFreeList;

+

+    struct CFX_Plex* m_pBlocks;

+

+    int m_nBlockSize;

+

+    CAssoc* NewAssoc();

+

+    void FreeAssoc(CAssoc* pAssoc);

+

+    CAssoc* GetAssocAt(FX_BSTR key, FX_DWORD& hash) const;

+public:

+

+    ~CFX_MapByteStringToPtr();

+};

+class CFX_CMapByteStringToPtr : public CFX_Object

+{

+public:

+

+    CFX_CMapByteStringToPtr(IFX_Allocator* pAllocator = NULL);

+

+    ~CFX_CMapByteStringToPtr();

+

+    void			RemoveAll();

+

+    FX_POSITION		GetStartPosition() const;

+

+    void			GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const;

+

+    FX_LPVOID		GetNextValue(FX_POSITION& rNextPosition) const;

+

+    FX_BOOL			Lookup(FX_BSTR key, void*& rValue) const;

+

+    void			SetAt(FX_BSTR key, void* value);

+

+    void			RemoveKey(FX_BSTR key);

+

+    int				GetCount() const;

+

+    void			AddValue(FX_BSTR key, void* pValue);

+private:

+

+    CFX_BaseSegmentedArray			m_Buffer;

+};

+class CFX_PtrList : public CFX_Object

+{

+protected:

+

+    struct CNode {

+

+        CNode* pNext;

+

+        CNode* pPrev;

+

+        void* data;

+    };

+public:

+

+    CFX_PtrList(int nBlockSize = 10, IFX_Allocator* pAllocator = NULL);

+

+    FX_POSITION GetHeadPosition() const

+    {

+        return (FX_POSITION)m_pNodeHead;

+    }

+

+    FX_POSITION GetTailPosition() const

+    {

+        return (FX_POSITION)m_pNodeTail;

+    }

+

+    void*	GetNext(FX_POSITION& rPosition) const

+    {

+        CNode* pNode = (CNode*) rPosition;

+        rPosition = (FX_POSITION) pNode->pNext;

+        return pNode->data;

+    }

+

+    void*	GetPrev(FX_POSITION& rPosition) const

+    {

+        CNode* pNode = (CNode*) rPosition;

+        rPosition = (FX_POSITION) pNode->pPrev;

+        return pNode->data;

+    }

+

+    FX_POSITION	GetNextPosition(FX_POSITION pos) const

+    {

+        return ((CNode*)pos)->pNext;

+    }

+

+    FX_POSITION	GetPrevPosition(FX_POSITION pos) const

+    {

+        return ((CNode*)pos)->pPrev;

+    }

+

+    void*	GetAt(FX_POSITION rPosition) const

+    {

+        CNode* pNode = (CNode*) rPosition;

+        return pNode->data;

+    }

+

+    int		GetCount() const

+    {

+        return m_nCount;

+    }

+

+    FX_POSITION	AddTail(void* newElement);

+

+    FX_POSITION AddHead(void* newElement);

+

+    void	SetAt(FX_POSITION pos, void* newElement)

+    {

+        CNode* pNode = (CNode*) pos;

+        pNode->data = newElement;

+    }

+

+    FX_POSITION InsertAfter(FX_POSITION pos, void* newElement);

+

+    FX_POSITION Find(void* searchValue, FX_POSITION startAfter = NULL ) const;

+

+    FX_POSITION FindIndex(int index) const;

+

+    void	RemoveAt(FX_POSITION pos);

+

+    void	RemoveAll();

+protected:

+

+    IFX_Allocator*	m_pAllocator;

+

+    CNode* m_pNodeHead;

+

+    CNode* m_pNodeTail;

+

+    int m_nCount;

+

+    CNode* m_pNodeFree;

+

+    struct CFX_Plex* m_pBlocks;

+

+    int m_nBlockSize;

+

+    CNode* NewNode(CNode* pPrev, CNode* pNext);

+

+    void FreeNode(CNode* pNode);

+public:

+

+    ~CFX_PtrList();

+};

+typedef void (*PD_CALLBACK_FREEDATA)(FX_LPVOID pData);

+struct FX_PRIVATEDATA {

+

+    void					FreeData();

+

+    FX_LPVOID				m_pModuleId;

+

+    FX_LPVOID				m_pData;

+

+    PD_CALLBACK_FREEDATA	m_pCallback;

+

+    FX_BOOL					m_bSelfDestruct;

+};

+class CFX_PrivateData

+{

+public:

+

+    CFX_PrivateData(IFX_Allocator* pAllocator = NULL) : m_DataList(pAllocator) {}

+

+    ~CFX_PrivateData();

+

+    void					ClearAll();

+

+    void					SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback);

+

+    void					SetPrivateObj(FX_LPVOID module_id, CFX_DestructObject* pObj);

+

+    FX_LPVOID				GetPrivateData(FX_LPVOID module_id);

+

+    FX_BOOL					LookupPrivateData(FX_LPVOID module_id, FX_LPVOID &pData) const

+    {

+        if (!module_id) {

+            return FALSE;

+        }

+        FX_DWORD nCount = m_DataList.GetSize();

+        for (FX_DWORD n = 0; n < nCount; n ++) {

+            if (m_DataList[n].m_pModuleId == module_id) {

+                pData = m_DataList[n].m_pData;

+                return TRUE;

+            }

+        }

+        return FALSE;

+    }

+

+    FX_BOOL					RemovePrivateData(FX_LPVOID module_id);

+protected:

+

+    CFX_ArrayTemplate<FX_PRIVATEDATA>	m_DataList;

+

+    void					AddData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback, FX_BOOL bSelfDestruct);

+};

+class CFX_BitStream : public CFX_Object

+{

+public:

+

+    void				Init(FX_LPCBYTE pData, FX_DWORD dwSize);

+

+

+    FX_DWORD			GetBits(FX_DWORD nBits);

+

+    void				ByteAlign();

+

+    FX_BOOL				IsEOF()

+    {

+        return m_BitPos >= m_BitSize;

+    }

+

+    void				SkipBits(FX_DWORD nBits)

+    {

+        m_BitPos += nBits;

+    }

+

+    void				Rewind()

+    {

+        m_BitPos = 0;

+    }

+protected:

+

+    FX_DWORD			m_BitPos;

+

+    FX_DWORD			m_BitSize;

+

+    FX_LPCBYTE			m_pData;

+};

+template <class ObjClass> class CFX_CountRef : public CFX_Object

+{

+public:

+

+    typedef CFX_CountRef<ObjClass> Ref;

+

+    class CountedObj : public ObjClass

+    {

+    public:

+

+        CountedObj() {}

+

+        CountedObj(const CountedObj& src) : ObjClass(src) {}

+

+        int			m_RefCount;

+    };

+

+    CFX_CountRef()

+    {

+        m_pObject = NULL;

+    }

+

+    CFX_CountRef(const Ref& ref)

+    {

+        m_pObject = ref.m_pObject;

+        if (m_pObject) {

+            m_pObject->m_RefCount ++;

+        }

+    }

+

+    ~CFX_CountRef()

+    {

+        if (!m_pObject) {

+            return;

+        }

+        m_pObject->m_RefCount --;

+        if (m_pObject->m_RefCount <= 0) {

+            delete m_pObject;

+        }

+    }

+

+    ObjClass*			New()

+    {

+        if (m_pObject) {

+            m_pObject->m_RefCount --;

+            if (m_pObject->m_RefCount <= 0) {

+                delete m_pObject;

+            }

+            m_pObject = NULL;

+        }

+        m_pObject = FX_NEW CountedObj;

+        if (!m_pObject) {

+            return NULL;

+        }

+        m_pObject->m_RefCount = 1;

+        return m_pObject;

+    }

+

+    void				operator = (const Ref& ref)

+    {

+        if (ref.m_pObject) {

+            ref.m_pObject->m_RefCount ++;

+        }

+        if (m_pObject) {

+            m_pObject->m_RefCount --;

+            if (m_pObject->m_RefCount <= 0) {

+                delete m_pObject;

+            }

+        }

+        m_pObject = ref.m_pObject;

+    }

+

+    void				operator = (void* p)

+    {

+        FXSYS_assert(p == 0);

+        if (m_pObject == NULL) {

+            return;

+        }

+        m_pObject->m_RefCount --;

+        if (m_pObject->m_RefCount <= 0) {

+            delete m_pObject;

+        }

+        m_pObject = NULL;

+    }

+

+    const ObjClass*		GetObject() const

+    {

+        return m_pObject;

+    }

+

+    operator			const ObjClass*() const

+    {

+        return m_pObject;

+    }

+

+    FX_BOOL				IsNull() const

+    {

+        return m_pObject == NULL;

+    }

+

+    FX_BOOL				NotNull() const

+    {

+        return m_pObject != NULL;

+    }

+

+    ObjClass*			GetModify()

+    {

+        if (m_pObject == NULL) {

+            m_pObject = FX_NEW CountedObj;

+            if (m_pObject) {

+                m_pObject->m_RefCount = 1;

+            }

+        } else if (m_pObject->m_RefCount > 1) {

+            m_pObject->m_RefCount --;

+            CountedObj* pOldObject = m_pObject;

+            m_pObject = NULL;

+            m_pObject = FX_NEW CountedObj(*pOldObject);

+            if (m_pObject) {

+                m_pObject->m_RefCount = 1;

+            }

+        }

+        return m_pObject;

+    }

+

+    void				SetNull()

+    {

+        if (m_pObject == NULL) {

+            return;

+        }

+        m_pObject->m_RefCount --;

+        if (m_pObject->m_RefCount <= 0) {

+            delete m_pObject;

+        }

+        m_pObject = NULL;

+    }

+

+    FX_BOOL				operator == (const Ref& ref) const

+    {

+        return m_pObject == ref.m_pObject;

+    }

+protected:

+

+    CountedObj*			m_pObject;

+};

+class IFX_Pause

+{

+public:

+

+    virtual FX_BOOL	NeedToPauseNow() = 0;

+};

+class CFX_DataFilter : public CFX_Object

+{

+public:

+

+    virtual ~CFX_DataFilter();

+

+    void			SetDestFilter(CFX_DataFilter* pFilter);

+

+    FX_BOOL			IsEOF() const

+    {

+        return m_bEOF;

+    }

+

+    FX_DWORD		GetSrcPos()

+    {

+        return m_SrcPos;

+    }

+

+    void			FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);

+

+    void			FilterFinish(CFX_BinaryBuf& dest_buf);

+protected:

+

+    CFX_DataFilter();

+    virtual void	v_FilterIn(FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;

+    virtual void	v_FilterFinish(CFX_BinaryBuf& dest_buf) = 0;

+    void			ReportEOF(FX_DWORD left_input);

+

+    FX_BOOL			m_bEOF;

+

+    FX_DWORD		m_SrcPos;

+

+    CFX_DataFilter*	m_pDestFilter;

+};

+template <class T>

+class CFX_SmartPointer

+{

+public:

+    CFX_SmartPointer(T *pObj) : m_pObj(pObj) {}

+    ~CFX_SmartPointer()

+    {

+        m_pObj->Release();

+    }

+    operator T*(void)

+    {

+        return m_pObj;

+    }

+    T&		operator *(void)

+    {

+        return *m_pObj;

+    }

+    T*		operator ->(void)

+    {

+        return m_pObj;

+    }

+protected:

+    T *m_pObj;

+};

+#define FX_DATALIST_LENGTH	1024

+template<size_t unit>

+class CFX_SortListArray : public CFX_Object

+{

+protected:

+

+    struct DataList {

+

+        FX_INT32	start;

+

+        FX_INT32	count;

+        FX_LPBYTE	data;

+    };

+public:

+

+    CFX_SortListArray(IFX_Allocator* pAllocator = NULL) : m_CurList(0), m_DataLists(pAllocator) {}

+

+    ~CFX_SortListArray()

+    {

+        Clear();

+    }

+

+

+    void			Clear()

+    {

+        IFX_Allocator* pAllocator = m_DataLists.m_pAllocator;

+        for (FX_INT32 i = m_DataLists.GetUpperBound(); i >= 0; i--) {

+            DataList list = m_DataLists.ElementAt(i);

+            if (list.data) {

+                FX_Allocator_Free(pAllocator, list.data);

+            }

+        }

+        m_DataLists.RemoveAll();

+        m_CurList = 0;

+    }

+

+    void			Append(FX_INT32 nStart, FX_INT32 nCount)

+    {

+        if (nStart < 0) {

+            return;

+        }

+        IFX_Allocator* pAllocator = m_DataLists.m_pAllocator;

+        while (nCount > 0) {

+            FX_INT32 temp_count = FX_MIN(nCount, FX_DATALIST_LENGTH);

+            DataList list;

+            list.data = FX_Allocator_Alloc(pAllocator, FX_BYTE, temp_count * unit);

+            if (!list.data) {

+                break;

+            }

+            FXSYS_memset32(list.data, 0, temp_count * unit);

+            list.start = nStart;

+            list.count = temp_count;

+            Append(list);

+            nCount -= temp_count;

+            nStart += temp_count;

+        }

+    }

+

+    FX_LPBYTE		GetAt(FX_INT32 nIndex)

+    {

+        if (nIndex < 0) {

+            return NULL;

+        }

+        if (m_CurList < 0 || m_CurList >= m_DataLists.GetSize()) {

+            return NULL;

+        }

+        DataList *pCurList = m_DataLists.GetDataPtr(m_CurList);

+        if (!pCurList || nIndex < pCurList->start || nIndex >= pCurList->start + pCurList->count) {

+            pCurList = NULL;

+            FX_INT32 iStart = 0;

+            FX_INT32 iEnd = m_DataLists.GetUpperBound();

+            FX_INT32 iMid = 0;

+            while (iStart <= iEnd) {

+                iMid = (iStart + iEnd) / 2;

+                DataList* list = m_DataLists.GetDataPtr(iMid);

+                if (nIndex < list->start) {

+                    iEnd = iMid - 1;

+                } else if (nIndex >= list->start + list->count) {

+                    iStart = iMid + 1;

+                } else {

+                    pCurList = list;

+                    m_CurList = iMid;

+                    break;

+                }

+            }

+        }

+        return pCurList ? pCurList->data + (nIndex - pCurList->start) * unit : NULL;

+    }

+protected:

+    void			Append(const DataList& list)

+    {

+        FX_INT32 iStart = 0;

+        FX_INT32 iEnd = m_DataLists.GetUpperBound();

+        FX_INT32 iFind = 0;

+        while (iStart <= iEnd) {

+            FX_INT32 iMid = (iStart + iEnd) / 2;

+            DataList* cur_list = m_DataLists.GetDataPtr(iMid);

+            if (list.start < cur_list->start + cur_list->count) {

+                iEnd = iMid - 1;

+            } else {

+                if (iMid == iEnd) {

+                    iFind = iMid + 1;

+                    break;

+                }

+                DataList* next_list = m_DataLists.GetDataPtr(iMid + 1);

+                if (list.start < next_list->start) {

+                    iFind = iMid + 1;

+                    break;

+                } else {

+                    iStart = iMid + 1;

+                }

+            }

+        }

+        m_DataLists.InsertAt(iFind, list);

+    }

+    FX_INT32		m_CurList;

+    CFX_ArrayTemplate<DataList>	m_DataLists;

+};

+template<typename T1, typename T2>

+class CFX_ListArrayTemplate : public CFX_Object

+{

+public:

+

+    void			Clear()

+    {

+        m_Data.Clear();

+    }

+

+    void			Add(FX_INT32 nStart, FX_INT32 nCount)

+    {

+        m_Data.Append(nStart, nCount);

+    }

+

+    T2&				operator [] (FX_INT32 nIndex)

+    {

+        FX_LPBYTE data = m_Data.GetAt(nIndex);

+        FXSYS_assert(data != NULL);

+        return (T2&)(*(volatile T2*)data);

+    }

+

+    T2*				GetPtrAt(FX_INT32 nIndex)

+    {

+        return (T2*)m_Data.GetAt(nIndex);

+    }

+protected:

+    T1			m_Data;

+};

+typedef CFX_ListArrayTemplate<CFX_SortListArray<sizeof(FX_FILESIZE)>, FX_FILESIZE>	CFX_FileSizeListArray;

+typedef CFX_ListArrayTemplate<CFX_SortListArray<sizeof(FX_DWORD)>, FX_DWORD>		CFX_DWordListArray;

+typedef enum {

+    Ready,

+    ToBeContinued,

+    Found,

+    NotFound,

+    Failed,

+    Done

+} FX_ProgressiveStatus;

+#define ProgressiveStatus	FX_ProgressiveStatus

+#define FX_NAMESPACE_DECLARE(namespace, type)       namespace::type

+#endif

diff --git a/core/include/fxcrt/fx_coordinates.h b/core/include/fxcrt/fx_coordinates.h
new file mode 100644
index 0000000..eee0dfb
--- /dev/null
+++ b/core/include/fxcrt/fx_coordinates.h
@@ -0,0 +1,900 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FXCRT_COORDINATES_

+#define _FXCRT_COORDINATES_

+template<class baseType> class CFX_PSVTemplate;

+template<class baseType> class CFX_VTemplate;

+template<class baseType> class CFX_PRLTemplate;

+template<class baseType> class CFX_RTemplate;

+template<class baseType> class CFX_ETemplate;

+template<class baseType> class CFX_ATemplate;

+template<class baseType> class CFX_RRTemplate;

+class CFX_Matrix;

+template<class baseType>

+class CFX_PSVTemplate : public CFX_Object

+{

+public:

+    typedef CFX_PSVTemplate<baseType>	FXT_PSV;

+    typedef CFX_PSVTemplate<baseType>	FXT_POINT;

+    typedef CFX_PSVTemplate<baseType>	FXT_SIZE;

+    void		Set(baseType x, baseType y)

+    {

+        FXT_PSV::x = x, FXT_PSV::y = y;

+    }

+    void		Set(const FXT_PSV &psv)

+    {

+        FXT_PSV::x = psv.x, FXT_PSV::y = psv.y;

+    }

+    void		Add(baseType x, baseType y)

+    {

+        FXT_PSV::x += x, FXT_PSV::y += y;

+    }

+    void		Subtract(baseType x, baseType y)

+    {

+        FXT_PSV::x -= x, FXT_PSV::y -= y;

+    }

+    void		Reset()

+    {

+        FXT_PSV::x = FXT_PSV::y = 0;

+    }

+    FXT_PSV&	operator += (const FXT_PSV &obj)

+    {

+        x += obj.x;

+        y += obj.y;

+        return *this;

+    }

+    FXT_PSV&	operator -= (const FXT_PSV &obj)

+    {

+        x -= obj.x;

+        y -= obj.y;

+        return *this;

+    }

+    FXT_PSV&	operator *= (baseType lamda)

+    {

+        x *= lamda;

+        y *= lamda;

+        return *this;

+    }

+    FXT_PSV&	operator /= (baseType lamda)

+    {

+        x /= lamda;

+        y /= lamda;

+        return *this;

+    }

+    friend	FX_BOOL		operator == (const FXT_PSV &obj1, const FXT_PSV &obj2)

+    {

+        return obj1.x == obj2.x && obj1.y == obj2.y;

+    }

+    friend	FX_BOOL		operator != (const FXT_PSV &obj1, const FXT_PSV &obj2)

+    {

+        return obj1.x != obj2.x || obj1.y != obj2.y;

+    }

+    friend	FXT_PSV		operator + (const FXT_PSV &obj1, const FXT_PSV &obj2)

+    {

+        CFX_PSVTemplate obj;

+        obj.x = obj1.x + obj2.x;

+        obj.y = obj1.y + obj2.y;

+        return obj;

+    }

+    friend	FXT_PSV		operator - (const FXT_PSV &obj1, const FXT_PSV &obj2)

+    {

+        CFX_PSVTemplate obj;

+        obj.x = obj1.x - obj2.x;

+        obj.y = obj1.y - obj2.y;

+        return obj;

+    }

+    friend	FXT_PSV		operator * (const FXT_PSV &obj, baseType lamda)

+    {

+        CFX_PSVTemplate t;

+        t.x = obj.x * lamda;

+        t.y = obj.y * lamda;

+        return t;

+    }

+    friend	FXT_PSV		operator * (baseType lamda, const FXT_PSV &obj)

+    {

+        CFX_PSVTemplate t;

+        t.x = lamda * obj.x;

+        t.y = lamda * obj.y;

+        return t;

+    }

+    friend	FXT_PSV		operator / (const FXT_PSV &obj, baseType lamda)

+    {

+        CFX_PSVTemplate t;

+        t.x = obj.x / lamda;

+        t.y = obj.y / lamda;

+        return t;

+    }

+    baseType x, y;

+};

+typedef CFX_PSVTemplate<FX_INT32>			CFX_Point;

+typedef CFX_PSVTemplate<FX_FLOAT>			CFX_PointF;

+typedef CFX_PSVTemplate<FX_INT32>			CFX_Size;

+typedef CFX_PSVTemplate<FX_FLOAT>			CFX_SizeF;

+typedef CFX_ArrayTemplate<CFX_Point>		CFX_Points;

+typedef CFX_ArrayTemplate<CFX_PointF>		CFX_PointsF;

+typedef CFX_PSVTemplate<FX_INT32> *			FX_LPPOINT;

+typedef CFX_PSVTemplate<FX_FLOAT> *			FX_LPPOINTF;

+typedef CFX_PSVTemplate<FX_INT32> const *	FX_LPCPOINT;

+typedef CFX_PSVTemplate<FX_FLOAT> const *	FX_LPCPOINTF;

+#define CFX_FloatPoint	CFX_PointF

+template<class baseType>

+class CFX_VTemplate: public CFX_PSVTemplate<baseType>

+{

+public:

+    typedef CFX_PSVTemplate<baseType>	FXT_PSV;

+    typedef CFX_PSVTemplate<baseType>	FXT_POINT;

+    typedef CFX_PSVTemplate<baseType>	FXT_SIZE;

+    typedef CFX_VTemplate<baseType>		FXT_VECTOR;

+    void		Set(baseType x, baseType y)

+    {

+        FXT_PSV::x = x, FXT_PSV::y = y;

+    }

+    void		Set(const FXT_PSV &psv)

+    {

+        FXT_PSV::x = psv.x, FXT_PSV::y = psv.y;

+    }

+    void		Set(const FXT_POINT &p1, const FXT_POINT &p2)

+    {

+        FXT_PSV::x = p2.x - p1.x, FXT_PSV::y = p2.y - p1.y;

+    }

+    void		Reset()

+    {

+        FXT_PSV::x = FXT_PSV::y = 0;

+    }

+    baseType	SquareLength() const

+    {

+        return FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y;

+    }

+    baseType	Length() const

+    {

+        return FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);

+    }

+    void		Normalize()

+    {

+        FX_FLOAT fLen = FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);

+        FXSYS_assert(fLen >= 0.0001f);

+        FXT_PSV::x = ((baseType)FXT_PSV::x) / fLen;

+        FXT_PSV::y = ((baseType)FXT_PSV::y) / fLen;

+    }

+    baseType	DotProduct(baseType x, baseType y) const

+    {

+        return FXT_PSV::x * x + FXT_PSV::y * y;

+    }

+    baseType	DotProduct(const FXT_VECTOR &v) const

+    {

+        return FXT_PSV::x * v.x + FXT_PSV::y * v.y;

+    }

+    FX_BOOL		IsParallel(baseType x, baseType y) const

+    {

+        baseType t = FXT_PSV::x * y - FXT_PSV::y * x;

+        return FXSYS_fabs(t) < 0x0001f;

+    }

+    FX_BOOL		IsParallel(const FXT_VECTOR &v) const

+    {

+        return IsParallel(v.x, v.y);

+    }

+    FX_BOOL		IsPerpendicular(baseType x, baseType y) const

+    {

+        baseType t = DotProduct(x, y);

+        return FXSYS_fabs(t) < 0x0001f;

+    }

+    FX_BOOL		IsPerpendicular(const FXT_VECTOR &v) const

+    {

+        return IsPerpendicular(v.x, v.y);

+    }

+    void		Translate(baseType dx, baseType dy)

+    {

+        FXT_PSV::x += dx, FXT_PSV::y += dy;

+    }

+    void		Scale(baseType sx, baseType sy)

+    {

+        FXT_PSV::x *= sx, FXT_PSV::y *= sy;

+    }

+    void		Rotate(FX_FLOAT fRadian)

+    {

+        FX_FLOAT xx = (FX_FLOAT)FXT_PSV::x;

+        FX_FLOAT yy = (FX_FLOAT)FXT_PSV::y;

+        FX_FLOAT cosValue = FXSYS_cos(fRadian);

+        FX_FLOAT sinValue = FXSYS_sin(fRadian);

+        FXT_PSV::x = xx * cosValue - yy * sinValue;

+        FXT_PSV::y = xx * sinValue + yy * cosValue;

+    }

+    friend	FX_FLOAT	Cosine(const FXT_VECTOR &v1, const FXT_VECTOR &v2)

+    {

+        FXSYS_assert(v1.SquareLength() != 0 && v2.SquareLength() != 0);

+        FX_FLOAT dotProduct = v1.DotProduct(v2);

+        return dotProduct / (FX_FLOAT)FXSYS_sqrt(v1.SquareLength() * v2.SquareLength());

+    }

+    friend	FX_FLOAT	ArcCosine(const FXT_VECTOR &v1, const FXT_VECTOR &v2)

+    {

+        return (FX_FLOAT)FXSYS_acos(Cosine(v1, v2));

+    }

+    friend	FX_FLOAT	SlopeAngle(const FXT_VECTOR &v)

+    {

+        CFX_VTemplate vx;

+        vx.Set(1, 0);

+        FX_FLOAT fSlope = ArcCosine(v, vx);

+        return v.y < 0 ? -fSlope : fSlope;

+    }

+};

+typedef CFX_VTemplate<FX_INT32> CFX_Vector;

+typedef CFX_VTemplate<FX_FLOAT> CFX_VectorF;

+template<class baseType>

+class CFX_RTemplate: public CFX_Object

+{

+public:

+    typedef CFX_PSVTemplate<baseType>	FXT_POINT;

+    typedef CFX_PSVTemplate<baseType>	FXT_SIZE;

+    typedef CFX_VTemplate<baseType>		FXT_VECTOR;

+    typedef CFX_PRLTemplate<baseType>	FXT_PARAL;

+    typedef CFX_RTemplate<baseType>		FXT_RECT;

+    void		Set(baseType left, baseType top, baseType width, baseType height)

+    {

+        FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width, FXT_RECT::height = height;

+    }

+    void		Set(baseType left, baseType top, const FXT_SIZE &size)

+    {

+        FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::Size(size);

+    }

+    void		Set(const FXT_POINT &p, baseType width, baseType height)

+    {

+        TopLeft(p), FXT_RECT::width = width, FXT_RECT::height = height;

+    }

+    void		Set(const FXT_POINT &p1, const FXT_POINT &p2)

+    {

+        TopLeft(p1), FXT_RECT::width = p2.x - p1.x, FXT_RECT::height = p2.y - p1.y, FXT_RECT::Normalize();

+    }

+    void		Set(const FXT_POINT &p, const FXT_VECTOR &v)

+    {

+        TopLeft(p), FXT_RECT::width = v.x, FXT_RECT::height = v.y, FXT_RECT::Normalize();

+    }

+    void		Reset()

+    {

+        FXT_RECT::left = FXT_RECT::top = FXT_RECT::width = FXT_RECT::height = 0;

+    }

+    FXT_RECT&	operator += (const FXT_POINT &p)

+    {

+        left += p.x, top += p.y;

+        return *this;

+    }

+    FXT_RECT&	operator -= (const FXT_POINT &p)

+    {

+        left -= p.x, top -= p.y;

+        return *this;

+    }

+    baseType	right() const

+    {

+        return left + width;

+    }

+    baseType	bottom() const

+    {

+        return top + height;

+    }

+    void		Normalize()

+    {

+        if (width < 0) {

+            left += width;

+            width = -width;

+        }

+        if (height < 0) {

+            top += height;

+            height = -height;

+        }

+    }

+    void		Offset(baseType dx, baseType dy)

+    {

+        left += dx;

+        top += dy;

+    }

+    void		Inflate(baseType x, baseType y)

+    {

+        left -= x;

+        width += x * 2;

+        top -= y;

+        height += y * 2;

+    }

+    void		Inflate(const FXT_POINT &p)

+    {

+        Inflate(p.x, p.y);

+    }

+    void		Inflate(baseType left, baseType top, baseType right, baseType bottom)

+    {

+        FXT_RECT::left -= left;

+        FXT_RECT::top -= top;

+        FXT_RECT::width += left + right;

+        FXT_RECT::height += top + bottom;

+    }

+    void		Inflate(const FXT_RECT &rt)

+    {

+        Inflate(rt.left, rt.top, rt.left + rt.width, rt.top + rt.height);

+    }

+    void		Deflate(baseType x, baseType y)

+    {

+        left += x;

+        width -= x * 2;

+        top += y;

+        height -= y * 2;

+    }

+    void		Deflate(const FXT_POINT &p)

+    {

+        Deflate(p.x, p.y);

+    }

+    void		Deflate(baseType left, baseType top, baseType right, baseType bottom)

+    {

+        FXT_RECT::left += left;

+        FXT_RECT::top += top;

+        FXT_RECT::width -= left + right;

+        FXT_RECT::height -= top + bottom;

+    }

+    void		Deflate(const FXT_RECT &rt)

+    {

+        Deflate(rt.left, rt.top, rt.top + rt.width, rt.top + rt.height);

+    }

+    FX_BOOL		IsEmpty() const

+    {

+        return width <= 0 || height <= 0;

+    }

+    FX_BOOL		IsEmpty(FX_FLOAT fEpsilon) const

+    {

+        return width <= fEpsilon || height <= fEpsilon;

+    }

+    void		Empty()

+    {

+        width = height = 0;

+    }

+    FX_BOOL		Contains(baseType x, baseType y) const

+    {

+        return x >= left && x < left + width && y >= top && y < top + height;

+    }

+    FX_BOOL		Contains(const FXT_POINT &p) const

+    {

+        return Contains(p.x, p.y);

+    }

+    FX_BOOL		Contains(const FXT_RECT &rt) const

+    {

+        return rt.left >= left && rt.right() <= right() && rt.top >= top && rt.bottom() <= bottom();

+    }

+    baseType	Width() const

+    {

+        return width;

+    }

+    baseType	Height() const

+    {

+        return height;

+    }

+    FXT_SIZE	Size() const

+    {

+        FXT_SIZE size;

+        size.Set(width, height);

+        return size;

+    }

+    void		Size(FXT_SIZE s)

+    {

+        width = s.x, height = s.y;

+    }

+    FXT_POINT	TopLeft() const

+    {

+        FXT_POINT p;

+        p.x = left;

+        p.y = top;

+        return p;

+    }

+    FXT_POINT	TopRight() const

+    {

+        FXT_POINT p;

+        p.x = left + width;

+        p.y = top;

+        return p;

+    }

+    FXT_POINT	BottomLeft() const

+    {

+        FXT_POINT p;

+        p.x = left;

+        p.y = top + height;

+        return p;

+    }

+    FXT_POINT	BottomRight() const

+    {

+        FXT_POINT p;

+        p.x = left + width;

+        p.y = top + height;

+        return p;

+    }

+    void		TopLeft(FXT_POINT tl)

+    {

+        left = tl.x;

+        top = tl.y;

+    }

+    void		TopRight(FXT_POINT tr)

+    {

+        width = tr.x - left;

+        top = tr.y;

+    }

+    void		BottomLeft(FXT_POINT bl)

+    {

+        left = bl.x;

+        height = bl.y - top;

+    }

+    void		BottomRight(FXT_POINT br)

+    {

+        width = br.x - left;

+        height = br.y - top;

+    }

+    FXT_POINT	Center() const

+    {

+        FXT_POINT p;

+        p.x = left + width / 2;

+        p.y = top + height / 2;

+        return p;

+    }

+    void		GetParallelogram(FXT_PARAL &pg) const

+    {

+        pg.x = left, pg.y = top;

+        pg.x1 = width, pg.y1 = 0;

+        pg.x2 = 0, pg.y2 = height;

+    }

+    void		Union(baseType x, baseType y)

+    {

+        baseType r = right(), b = bottom();

+        if (left > x) {

+            left = x;

+        }

+        if (r < x) {

+            r = x;

+        }

+        if (top > y) {

+            top = y;

+        }

+        if (b < y) {

+            b = y;

+        }

+        width = r - left;

+        height = b - top;

+    }

+    void		Union(const FXT_POINT &p)

+    {

+        Union(p.x, p.y);

+    }

+    void		Union(const FXT_RECT &rt)

+    {

+        baseType r = right(), b = bottom();

+        if (left > rt.left) {

+            left = rt.left;

+        }

+        if (r < rt.right()) {

+            r = rt.right();

+        }

+        if (top > rt.top) {

+            top = rt.top;

+        }

+        if (b < rt.bottom()) {

+            b = rt.bottom();

+        }

+        width = r - left;

+        height = b - top;

+    }

+    void		Intersect(const FXT_RECT &rt)

+    {

+        baseType r = right(), b = bottom();

+        if (left < rt.left) {

+            left = rt.left;

+        }

+        if (r > rt.right()) {

+            r = rt.right();

+        }

+        if (top < rt.top) {

+            top = rt.top;

+        }

+        if (b > rt.bottom()) {

+            b = rt.bottom();

+        }

+        width = r - left;

+        height = b - top;

+    }

+    FX_BOOL		IntersectWith(const FXT_RECT &rt) const

+    {

+        FXT_RECT rect = rt;

+        rect.Intersect(*this);

+        return !rect.IsEmpty();

+    }

+    FX_BOOL		IntersectWith(const FXT_RECT &rt, FX_FLOAT fEpsilon) const

+    {

+        FXT_RECT rect = rt;

+        rect.Intersect(*this);

+        return !rect.IsEmpty(fEpsilon);

+    }

+    friend	FX_BOOL	operator == (const FXT_RECT &rc1, const FXT_RECT &rc2)

+    {

+        return rc1.left == rc2.left && rc1.top == rc2.top && rc1.width == rc2.width && rc1.height == rc2.height;

+    }

+    friend	FX_BOOL	operator != (const FXT_RECT &rc1, const FXT_RECT &rc2)

+    {

+        return rc1.left != rc2.left || rc1.top != rc2.top || rc1.width != rc2.width || rc1.height != rc2.height;

+    }

+    baseType left, top;

+    baseType width, height;

+};

+typedef CFX_RTemplate<FX_INT32>			CFX_Rect;

+typedef CFX_RTemplate<FX_FLOAT>			CFX_RectF;

+typedef CFX_RTemplate<FX_INT32> *		FX_LPRECT;

+typedef CFX_RTemplate<FX_FLOAT> *		FX_LPRECTF;

+typedef CFX_RTemplate<FX_INT32> const *	FX_LPCRECT;

+typedef CFX_RTemplate<FX_FLOAT> const *	FX_LPCRECTF;

+typedef CFX_ArrayTemplate<CFX_RectF>	CFX_RectFArray;

+struct FX_RECT {

+

+    int			left;

+

+    int			top;

+

+    int			right;

+

+    int			bottom;

+

+    FX_RECT() {}

+

+    FX_RECT(int left1, int top1, int right1, int bottom1)

+    {

+        left = left1;

+        top = top1;

+        right = right1;

+        bottom = bottom1;

+    }

+

+    int			Width() const

+    {

+        return right - left;

+    }

+

+    int			Height() const

+    {

+        return bottom - top;

+    }

+

+    FX_BOOL		IsEmpty() const

+    {

+        return right <= left || bottom <= top;

+    }

+

+    void		Normalize();

+

+    void		Intersect(const FX_RECT& src);

+

+    void		Intersect(int left1, int top1, int right1, int bottom1)

+    {

+        Intersect(FX_RECT(left1, top1, right1, bottom1));

+    }

+

+    void		Union(const FX_RECT& other_rect);

+

+    FX_BOOL		operator == (const FX_RECT& src) const

+    {

+        return left == src.left && right == src.right && top == src.top && bottom == src.bottom;

+    }

+

+    void		Offset(int dx, int dy)

+    {

+        left += dx;

+        right += dx;

+        top += dy;

+        bottom += dy;

+    }

+

+    FX_BOOL		Contains(const FX_RECT& other_rect) const

+    {

+        return other_rect.left >= left && other_rect.right <= right && other_rect.top >= top && other_rect.bottom <= bottom;

+    }

+

+    FX_BOOL		Contains(int x, int y) const

+    {

+        return x >= left && x < right && y >= top && y < bottom;

+    }

+};

+struct FX_SMALL_RECT {

+

+    FX_SHORT	Left;

+

+    FX_SHORT	Top;

+

+    FX_SHORT	Right;

+

+    FX_SHORT	Bottom;

+};

+class CFX_FloatRect : public CFX_Object

+{

+public:

+

+    CFX_FloatRect()

+    {

+        left = right = bottom = top = 0;

+    }

+

+    CFX_FloatRect(FX_FLOAT left1, FX_FLOAT bottom1, FX_FLOAT right1, FX_FLOAT top1)

+    {

+        left = left1;

+        bottom = bottom1;

+        right = right1;

+        top = top1;

+    }

+

+    CFX_FloatRect(const FX_FLOAT* pArray)

+    {

+        left = pArray[0];

+        bottom = pArray[1];

+        right = pArray[2];

+        top = pArray[3];

+    }

+

+    CFX_FloatRect(const FX_RECT& rect);

+

+    FX_BOOL				IsEmpty() const

+    {

+        return left >= right || bottom >= top;

+    }

+

+    void				Normalize();

+

+    void				Reset()

+    {

+        left = right = bottom = top = 0;

+    }

+

+    FX_BOOL				Contains(const CFX_FloatRect& other_rect) const;

+

+    FX_BOOL				Contains(FX_FLOAT x, FX_FLOAT y) const;

+

+    void				Transform(const CFX_Matrix* pMatrix);

+

+    void				Intersect(const CFX_FloatRect& other_rect);

+

+    void				Union(const CFX_FloatRect& other_rect);

+

+    FX_RECT				GetInnerRect() const;

+

+    FX_RECT				GetOutterRect() const;

+

+    FX_RECT				GetClosestRect() const;

+

+    int					Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);

+

+    void				InitRect(FX_FLOAT x, FX_FLOAT y)

+    {

+        left = right = x;

+        bottom = top = y;

+    }

+

+    void				UpdateRect(FX_FLOAT x, FX_FLOAT y);

+

+    FX_FLOAT			Width() const

+    {

+        return right - left;

+    }

+

+    FX_FLOAT			Height() const

+    {

+        return top - bottom;

+    }

+

+    void				Inflate(FX_FLOAT x, FX_FLOAT y)

+    {

+        Normalize();

+        left -= x;

+        right += x;

+        bottom -= y;

+        top += y;

+    }

+

+    void				Inflate(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top)

+    {

+        Normalize();

+        this->left -= left;

+        this->bottom -= bottom;

+        this->right += right;

+        this->top += top;

+    }

+

+    void				Inflate(const CFX_FloatRect &rt)

+    {

+        Inflate(rt.left, rt.bottom, rt.right, rt.top);

+    }

+

+    void				Deflate(FX_FLOAT x, FX_FLOAT y)

+    {

+        Normalize();

+        left += x;

+        right -= x;

+        bottom += y;

+        top -= y;

+    }

+

+    void				Deflate(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top)

+    {

+        Normalize();

+        this->left += left;

+        this->bottom += bottom;

+        this->right -= right;

+        this->top -= top;

+    }

+

+    void				Deflate(const CFX_FloatRect &rt)

+    {

+        Deflate(rt.left, rt.bottom, rt.right, rt.top);

+    }

+

+    void				Translate(FX_FLOAT e, FX_FLOAT f)

+    {

+        left += e;

+        right += e;

+        top += f;

+        bottom += f;

+    }

+

+    static CFX_FloatRect	GetBBox(const CFX_FloatPoint* pPoints, int nPoints);

+

+    FX_FLOAT			left;

+

+    FX_FLOAT			right;

+

+    FX_FLOAT			bottom;

+

+    FX_FLOAT			top;

+};

+class CFX_Matrix : public CFX_Object

+{

+public:

+

+    CFX_Matrix()

+    {

+        a = d = 1;

+        b = c = e = f = 0;

+    }

+

+    CFX_Matrix(FX_FLOAT a1, FX_FLOAT b1, FX_FLOAT c1, FX_FLOAT d1, FX_FLOAT e1, FX_FLOAT f1)

+    {

+        a = a1;

+        b = b1;

+        c = c1;

+        d = d1;

+        e = e1;

+        f = f1;

+    }

+

+    void			Set(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f);

+    void			Set(const FX_FLOAT n[6]);

+

+    void			SetIdentity()

+    {

+        a = d = 1;

+        b = c = e = f = 0;

+    }

+

+    void			SetReverse(const CFX_Matrix &m);

+

+    void			Concat(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f, FX_BOOL bPrepended = FALSE);

+

+    void			Concat(const CFX_Matrix &m, FX_BOOL bPrepended = FALSE);

+

+    void			ConcatInverse(const CFX_Matrix& m, FX_BOOL bPrepended = FALSE);

+    void			Reset()

+    {

+        SetIdentity();

+    }

+

+    void			Copy(const CFX_Matrix& m)

+    {

+        *this = m;

+    }

+

+    FX_BOOL			IsIdentity() const

+    {

+        return a == 1 && b == 0 && c == 0 && d == 1 && e == 0 && f == 0;

+    }

+    FX_BOOL			IsInvertible() const;

+

+    FX_BOOL			Is90Rotated() const;

+

+    FX_BOOL			IsScaled() const;

+

+    void			Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);

+

+    void			TranslateI(FX_INT32 x, FX_INT32 y, FX_BOOL bPrepended = FALSE)

+    {

+        Translate((FX_FLOAT)x, (FX_FLOAT)y, bPrepended);

+    }

+

+    void			Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended = FALSE);

+

+    void			Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended = FALSE);

+

+    void			RotateAt(FX_FLOAT fRadian, FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);

+

+    void			Shear(FX_FLOAT fAlphaRadian, FX_FLOAT fBetaRadian, FX_BOOL bPrepended = FALSE);

+

+    void			MatchRect(const CFX_FloatRect &dest, const CFX_FloatRect &src);

+

+    FX_FLOAT		GetXUnit() const;

+

+    FX_FLOAT		GetYUnit() const;

+    void			GetUnitRect(CFX_RectF &rect) const;

+

+    CFX_FloatRect	GetUnitRect() const;

+

+    FX_FLOAT		GetUnitArea() const;

+    FX_FLOAT		TransformXDistance(FX_FLOAT dx) const;

+    FX_INT32		TransformXDistance(FX_INT32 dx) const;

+    FX_FLOAT		TransformYDistance(FX_FLOAT dy) const;

+    FX_INT32		TransformYDistance(FX_INT32 dy) const;

+    FX_FLOAT		TransformDistance(FX_FLOAT dx, FX_FLOAT dy) const;

+    FX_INT32		TransformDistance(FX_INT32 dx, FX_INT32 dy) const;

+

+    FX_FLOAT		TransformDistance(FX_FLOAT distance) const;

+    void			TransformPoint(FX_FLOAT &x, FX_FLOAT &y) const;

+    void			TransformPoint(FX_INT32 &x, FX_INT32 &y) const;

+    void			TransformPoints(CFX_PointF *points, FX_INT32 iCount) const;

+    void			TransformPoints(CFX_Point *points, FX_INT32 iCount) const;

+

+    void			Transform(FX_FLOAT& x, FX_FLOAT& y) const

+    {

+        TransformPoint(x, y);

+    }

+

+    void			Transform(FX_FLOAT x, FX_FLOAT y, FX_FLOAT& x1, FX_FLOAT& y1) const

+    {

+        x1 = x, y1 = y;

+        TransformPoint(x1, y1);

+    }

+    void			TransformVector(CFX_VectorF &v) const;

+    void			TransformVector(CFX_Vector &v) const;

+    void			TransformRect(CFX_RectF &rect) const;

+    void			TransformRect(CFX_Rect &rect) const;

+

+    void			TransformRect(FX_FLOAT& left, FX_FLOAT& right, FX_FLOAT& top, FX_FLOAT& bottom) const;

+

+    void			TransformRect(CFX_FloatRect& rect) const

+    {

+        TransformRect(rect.left, rect.right, rect.top, rect.bottom);

+    }

+

+    FX_FLOAT		GetA() const

+    {

+        return a;

+    }

+

+    FX_FLOAT		GetB() const

+    {

+        return b;

+    }

+

+    FX_FLOAT		GetC() const

+    {

+        return c;

+    }

+

+    FX_FLOAT		GetD() const

+    {

+        return d;

+    }

+

+    FX_FLOAT		GetE() const

+    {

+        return e;

+    }

+

+    FX_FLOAT		GetF() const

+    {

+        return f;

+    }

+public:

+    FX_FLOAT a;

+    FX_FLOAT b;

+    FX_FLOAT c;

+    FX_FLOAT d;

+    FX_FLOAT e;

+    FX_FLOAT f;

+};

+#define CFX_AffineMatrix	CFX_Matrix

+#endif

diff --git a/core/include/fxcrt/fx_ext.h b/core/include/fxcrt/fx_ext.h
new file mode 100644
index 0000000..7fdbfcd
--- /dev/null
+++ b/core/include/fxcrt/fx_ext.h
@@ -0,0 +1,103 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FXCRT_EXTENSION_

+#define _FXCRT_EXTENSION_

+#ifndef _FX_BASIC_H_

+#include "fx_basic.h"

+#endif

+#ifndef _FXCRT_COORDINATES_

+#include "fx_coordinates.h"

+#endif

+#ifndef _FX_XML_H_

+#include "fx_xml.h"

+#endif

+#ifndef _FX_UNICODE_

+#include "fx_ucd.h"

+#endif

+#ifndef _FX_ARABIC_

+#include "fx_arb.h"

+#endif

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+

+FX_FLOAT		FXSYS_tan(FX_FLOAT a);

+FX_FLOAT		FXSYS_logb(FX_FLOAT b, FX_FLOAT x);

+FX_FLOAT		FXSYS_strtof(FX_LPCSTR pcsStr, FX_INT32 iLength = -1, FX_INT32 *pUsedLen = NULL);

+FX_FLOAT		FXSYS_wcstof(FX_LPCWSTR pwsStr, FX_INT32 iLength = -1, FX_INT32 *pUsedLen = NULL);

+FX_LPWSTR		FXSYS_wcsncpy(FX_LPWSTR dstStr, FX_LPCWSTR srcStr, size_t count);

+FX_INT32		FXSYS_wcsnicmp(FX_LPCWSTR s1, FX_LPCWSTR s2, size_t count);

+FX_INT32		FXSYS_strnicmp(FX_LPCSTR s1, FX_LPCSTR s2, size_t count);

+inline FX_BOOL	FXSYS_islower(FX_INT32 ch)

+{

+    return ch >= 'a' && ch <= 'z';

+}

+inline FX_BOOL	FXSYS_isupper(FX_INT32 ch)

+{

+    return ch >= 'A' && ch <= 'Z';

+}

+inline FX_INT32	FXSYS_tolower(FX_INT32 ch)

+{

+    return ch < 'A' || ch > 'Z' ? ch : (ch + 0x20);

+}

+inline FX_INT32 FXSYS_toupper(FX_INT32 ch)

+{

+    return ch < 'a' || ch > 'z' ? ch : (ch - 0x20);

+}

+

+

+

+FX_DWORD	FX_HashCode_String_GetA(FX_LPCSTR pStr, FX_INT32 iLength, FX_BOOL bIgnoreCase = FALSE);

+FX_DWORD	FX_HashCode_String_GetW(FX_LPCWSTR pStr, FX_INT32 iLength, FX_BOOL bIgnoreCase = FALSE);

+

+#ifdef __cplusplus

+}

+#endif

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+FX_LPVOID	FX_Random_MT_Start(FX_DWORD dwSeed);

+

+FX_DWORD	FX_Random_MT_Generate(FX_LPVOID pContext);

+

+void		FX_Random_MT_Close(FX_LPVOID pContext);

+

+void		FX_Random_GenerateBase(FX_LPDWORD pBuffer, FX_INT32 iCount);

+

+void		FX_Random_GenerateMT(FX_LPDWORD pBuffer, FX_INT32 iCount);

+

+void		FX_Random_GenerateCrypto(FX_LPDWORD pBuffer, FX_INT32 iCount);

+#ifdef __cplusplus

+}

+#endif

+template<class baseType>

+class CFX_SSortTemplate

+{

+public:

+    void ShellSort(baseType *pArray, FX_INT32 iCount)

+    {

+        FXSYS_assert(pArray != NULL && iCount > 0);

+        FX_INT32 i, j, gap;

+        baseType v1, v2;

+        gap = iCount >> 1;

+        while (gap > 0) {

+            for (i = gap; i < iCount; i ++) {

+                j = i - gap;

+                v1 = pArray[i];

+                while (j > -1 && (v2 = pArray[j]) > v1) {

+                    pArray[j + gap] = v2;

+                    j -= gap;

+                }

+                pArray[j + gap] = v1;

+            }

+            gap >>= 1;

+        }

+    }

+};

+#endif

diff --git a/core/include/fxcrt/fx_memory.h b/core/include/fxcrt/fx_memory.h
new file mode 100644
index 0000000..b0c94c4
--- /dev/null
+++ b/core/include/fxcrt/fx_memory.h
@@ -0,0 +1,300 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_MEMORY_H_

+#define _FX_MEMORY_H_

+#ifndef _FX_SYSTEM_H_

+#include "fx_system.h"

+#endif

+#define FXMEM_NONLEAVE			1

+#define FXMEM_MOVABLE			2

+#define FXMEM_DISCARDABLE		4

+#ifdef __cplusplus

+extern "C" {

+#endif

+typedef struct _FXMEM_SystemMgr {

+

+    void* (*Alloc)(struct _FXMEM_SystemMgr* pMgr, size_t size, int flags);

+

+    void* (*AllocDebug)(struct _FXMEM_SystemMgr* pMgr, size_t size, int flags, FX_LPCSTR file, int line);

+

+    void* (*Realloc)(struct _FXMEM_SystemMgr* pMgr, void* pointer, size_t size, int flags);

+

+    void* (*ReallocDebug)(struct _FXMEM_SystemMgr* pMgr, void* pointer, size_t size, int flags, FX_LPCSTR file, int line);

+

+    void* (*Lock)(struct _FXMEM_SystemMgr* pMgr, void* handle);

+

+    void  (*Unlock)(struct _FXMEM_SystemMgr* pMgr, void* handle);

+

+    void  (*Free)(struct _FXMEM_SystemMgr* pMgr, void* pointer, int flags);

+

+    void  (*Purge)(struct _FXMEM_SystemMgr* pMgr);

+

+    void  (*CollectAll)(struct _FXMEM_SystemMgr* pMgr);

+

+

+    void* user;

+} FXMEM_SystemMgr;

+FX_DEFINEHANDLE(FXMEM_FoxitMgr)

+typedef struct _FXMEM_SystemMgr2 {

+

+    FX_BOOL	(*More)(struct _FXMEM_SystemMgr2* pMgr, size_t alloc_size, void** new_memory, size_t* new_size);

+

+    void	(*Free)(struct _FXMEM_SystemMgr2* pMgr, void* memory);

+} FXMEM_SystemMgr2;

+FXMEM_FoxitMgr* FXMEM_CreateMemoryMgr(size_t size, FX_BOOL extensible);

+void	FXMEM_DestroyFoxitMgr(FXMEM_FoxitMgr* pFoxitMgr);

+void*	FXMEM_DefaultAlloc(size_t byte_size, int flags);

+void*	FXMEM_DefaultAlloc2(size_t units, size_t unit_size, int flags);

+void*	FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags);

+void*	FXMEM_DefaultRealloc2(void* pointer, size_t units, size_t unit_size, int flags);

+void	FXMEM_DefaultFree(void* pointer, int flags);

+#define FX_Alloc(type, size)			(type*)FXMEM_DefaultAlloc2(size, sizeof(type), 0)

+#define FX_Realloc(type, ptr, size)		(type*)FXMEM_DefaultRealloc2(ptr, size, sizeof(type), 0)

+#define FX_AllocNL(type, size)			(type*)FXMEM_DefaultAlloc2(size, sizeof(type), FXMEM_NONLEAVE)

+#define FX_ReallocNL(type, ptr, size)	(type*)FXMEM_DefaultRealloc2(ptr, size, sizeof(type), FXMEM_NONLEAVE)

+#define FX_Free(pointer) FXMEM_DefaultFree(pointer, 0)

+#ifdef __cplusplus

+}

+#endif

+#ifdef __cplusplus

+#if defined(_DEBUG)

+#define FX_NEW new(__FILE__, __LINE__)

+#else

+

+#define FX_NEW new

+#endif

+class CFX_Object

+{

+public:

+

+    void*			operator new (size_t size, FX_LPCSTR file, int line);

+

+    void			operator delete (void* p, FX_LPCSTR file, int line);

+

+    void*			operator new (size_t size);

+

+    void			operator delete (void* p);

+

+    void*			operator new[] (size_t size, FX_LPCSTR file, int line);

+

+    void			operator delete[] (void* p, FX_LPCSTR file, int line);

+

+    void*			operator new[] (size_t size);

+

+    void			operator delete[] (void* p);

+

+    void*			operator new (size_t, void* buf)

+    {

+        return buf;

+    }

+

+    void			operator delete (void*, void*) {}

+};

+#define FX_NEW_VECTOR(Pointer, Class, Count) \

+    { \

+        Pointer = FX_Alloc(Class, Count); \

+        if (Pointer) { \

+            for (int i = 0; i < (Count); i ++) new (Pointer + i) Class; \

+        } \

+    }

+#define FX_DELETE_VECTOR(Pointer, Class, Count) \

+    { \

+        for (int i = 0; i < (Count); i ++) Pointer[i].~Class(); \

+        FX_Free(Pointer); \

+    }

+class CFX_DestructObject : public CFX_Object

+{

+public:

+

+    virtual ~CFX_DestructObject() {}

+};

+#ifdef __cplusplus

+extern "C" {

+#endif

+typedef struct _IFX_Allocator {

+

+    void*	(*m_AllocDebug)(struct _IFX_Allocator* pAllocator, size_t size, FX_LPCSTR file, int line);

+

+    void*	(*m_Alloc)(struct _IFX_Allocator* pAllocator, size_t size);

+

+    void*	(*m_ReallocDebug)(struct _IFX_Allocator* pAllocator, void* p, size_t size, FX_LPCSTR file, int line);

+

+    void*	(*m_Realloc)(struct _IFX_Allocator* pAllocator, void* p, size_t size);

+

+    void	(*m_Free)(struct _IFX_Allocator* pAllocator, void* p);

+} IFX_Allocator;

+IFX_Allocator* FXMEM_GetDefAllocator();

+#ifdef __cplusplus

+}

+#endif

+#ifdef _DEBUG

+

+#define FX_Allocator_Alloc(fxAllocator, type, size) \

+    ((fxAllocator) ? (type*)(fxAllocator)->m_AllocDebug((fxAllocator), (size) * sizeof(type), __FILE__, __LINE__) : (FX_Alloc(type, size)))

+

+#define FX_Allocator_Realloc(fxAllocator, type, ptr, new_size) \

+    ((fxAllocator) ? (type*)(fxAllocator)->m_ReallocDebug((fxAllocator), (ptr), (new_size) * sizeof(type), __FILE__, __LINE__) : (FX_Realloc(type, ptr, new_size)))

+#else

+

+#define FX_Allocator_Alloc(fxAllocator, type, size) \

+    ((fxAllocator) ? (type*)(fxAllocator)->m_Alloc((fxAllocator), (size) * sizeof(type)) : (FX_Alloc(type, size)))

+

+#define FX_Allocator_Realloc(fxAllocator, type, ptr, new_size) \

+    ((fxAllocator) ? (type*)(fxAllocator)->m_Realloc((fxAllocator), (ptr), (new_size) * sizeof(type)) : (FX_Realloc(type, ptr, new_size)))

+#endif

+#define FX_Allocator_Free(fxAllocator, ptr) \

+    ((fxAllocator) ? (fxAllocator)->m_Free((fxAllocator), (ptr)) : (FX_Free(ptr)))

+inline void* operator new(size_t size, IFX_Allocator* fxAllocator)

+{

+    return (void*)FX_Allocator_Alloc(fxAllocator, FX_BYTE, size);

+}

+inline void operator delete(void* ptr, IFX_Allocator* fxAllocator)

+{

+}

+#define FX_NewAtAllocator(fxAllocator) \

+    ::new(fxAllocator)

+#define FX_DeleteAtAllocator(pointer, fxAllocator, __class__) \

+    (pointer)->~__class__(); \

+    FX_Allocator_Free(fxAllocator, pointer)

+class CFX_AllocObject

+{

+public:

+

+    void*			operator new (size_t size, IFX_Allocator* pAllocator, FX_LPCSTR file, int line);

+#ifndef _FX_NO_EXCEPTION_

+

+    void			operator delete (void* p, IFX_Allocator* pAllocator, FX_LPCSTR file, int line);

+#endif

+

+    void*			operator new (size_t size, IFX_Allocator* pAllocator);

+

+    void			operator delete (void* p);

+#ifndef _FX_NO_EXCEPTION_

+

+    void			operator delete (void* p, IFX_Allocator* pAllocator);

+#endif

+

+    void*			operator new (size_t, void* buf)

+    {

+        return buf;

+    }

+#ifndef _FX_NO_EXCEPTION_

+

+    void			operator delete (void*, void*) {}

+#endif

+

+    IFX_Allocator*	GetAllocator() const

+    {

+        return m_pAllocator;

+    }

+private:

+

+    void*			operator new[] (size_t size, IFX_Allocator* pAllocator, FX_LPCSTR file, int line)

+    {

+        return operator new(size, pAllocator, file, line);

+    }

+#ifndef _FX_NO_EXCEPTION_

+

+    void			operator delete[] (void* p, IFX_Allocator* pAllocator, FX_LPCSTR file, int line) {}

+#endif

+

+    void*			operator new[] (size_t size, IFX_Allocator* pAllocator)

+    {

+        return operator new(size, pAllocator);

+    }

+

+    void			operator delete[] (void* p) {}

+#ifndef _FX_NO_EXCEPTION_

+

+    void			operator delete[] (void* p, IFX_Allocator* pAllocator) {}

+#endif

+protected:

+

+    IFX_Allocator*	m_pAllocator;

+};

+#if defined(_DEBUG)

+#define FX_NEWAT(pAllocator) new(pAllocator, __FILE__, __LINE__)

+#else

+

+#define FX_NEWAT(pAllocator) new(pAllocator)

+#endif

+class CFX_GrowOnlyPool : public IFX_Allocator, public CFX_Object

+{

+public:

+

+    CFX_GrowOnlyPool(IFX_Allocator* pAllocator = NULL, size_t trunk_size = 16384);

+

+    ~CFX_GrowOnlyPool();

+

+    void	SetAllocator(IFX_Allocator* pAllocator);

+

+    void	SetTrunkSize(size_t trunk_size)

+    {

+        m_TrunkSize = trunk_size;

+    }

+

+    void*	AllocDebug(size_t size, FX_LPCSTR file, int line)

+    {

+        return Alloc(size);

+    }

+

+    void*	Alloc(size_t size);

+

+    void*	ReallocDebug(void* p, size_t new_size, FX_LPCSTR file, int line)

+    {

+        return NULL;

+    }

+

+    void*	Realloc(void* p, size_t new_size)

+    {

+        return NULL;

+    }

+

+    void	Free(void*) {}

+

+    void	FreeAll();

+private:

+

+    size_t	m_TrunkSize;

+

+    void*	m_pFirstTrunk;

+

+    IFX_Allocator*	m_pAllocator;

+};

+#endif

+#ifdef __cplusplus

+extern "C" {

+#endif

+#define FX_FIXEDMEM_PAGESIZE		(4096 * 16)

+#define FX_FIXEDMEM_MIDBLOCKSIZE	(4096)

+typedef struct _FX_MEMCONFIG {

+

+    size_t	nPageNum_Init8;

+

+    size_t	nPageNum_Init16;

+

+    size_t	nPageNum_Init32;

+

+    size_t	nPageNum_More16;

+

+    size_t	nPageNum_More32;

+

+    size_t	nPageSize_Mid;

+

+    size_t	nPageNum_InitMid;

+

+    size_t	nPageNum_MoreMid;

+

+    size_t	nPageSize_Large;

+

+    size_t	nPageSize_Alone;

+} FX_MEMCONFIG;

+void	FXMEM_SetConfig(const FX_MEMCONFIG* memConfig);

+#ifdef __cplusplus

+}

+#endif

+#endif

diff --git a/core/include/fxcrt/fx_stream.h b/core/include/fxcrt/fx_stream.h
new file mode 100644
index 0000000..cda5253
--- /dev/null
+++ b/core/include/fxcrt/fx_stream.h
@@ -0,0 +1,200 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_STREAM_H_

+#define _FX_STREAM_H_

+#ifndef _FX_MEMORY_H_

+#include "fx_memory.h"

+#endif

+void* FX_OpenFolder(FX_LPCSTR path);

+void* FX_OpenFolder(FX_LPCWSTR path);

+FX_BOOL FX_GetNextFile(void* handle, CFX_ByteString& filename, FX_BOOL& bFolder);

+FX_BOOL FX_GetNextFile(void* handle, CFX_WideString& filename, FX_BOOL& bFolder);

+void FX_CloseFolder(void* handle);

+FX_WCHAR FX_GetFolderSeparator();

+FX_DEFINEHANDLE(FX_HFILE)

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+#define FX_FILESIZE			FX_INT32

+#else

+#include <fcntl.h>

+#include <unistd.h>

+#include <sys/stat.h>

+#ifndef O_BINARY

+#define O_BINARY 		0

+#endif

+#ifndef O_LARGEFILE

+#define O_LARGEFILE		0

+#endif

+#define FX_FILESIZE			off_t

+#endif

+#define FX_GETBYTEOFFSET32(a)	0

+#define FX_GETBYTEOFFSET40(a)	0

+#define FX_GETBYTEOFFSET48(a)	0

+#define FX_GETBYTEOFFSET56(a)	0

+#define FX_GETBYTEOFFSET24(a)  ((FX_BYTE)(a>>24))

+#define FX_GETBYTEOFFSET16(a)  ((FX_BYTE)(a>>16))

+#define FX_GETBYTEOFFSET8(a)   ((FX_BYTE)(a>>8))

+#define FX_GETBYTEOFFSET0(a)   ((FX_BYTE)(a))

+#define FX_FILEMODE_Write		0

+#define FX_FILEMODE_ReadOnly	1

+#define FX_FILEMODE_Truncate	2

+FX_HFILE	FX_File_Open(FX_BSTR fileName, FX_DWORD dwMode, IFX_Allocator* pAllocator = NULL);

+FX_HFILE	FX_File_Open(FX_WSTR fileName, FX_DWORD dwMode, IFX_Allocator* pAllocator = NULL);

+void		FX_File_Close(FX_HFILE hFile, IFX_Allocator* pAllocator = NULL);

+FX_FILESIZE	FX_File_GetSize(FX_HFILE hFile);

+FX_FILESIZE	FX_File_GetPosition(FX_HFILE hFile);

+FX_FILESIZE	FX_File_SetPosition(FX_HFILE hFile, FX_FILESIZE pos);

+size_t		FX_File_Read(FX_HFILE hFile, void* pBuffer, size_t szBuffer);

+size_t		FX_File_ReadPos(FX_HFILE hFile, void* pBuffer, size_t szBuffer, FX_FILESIZE pos);

+size_t		FX_File_Write(FX_HFILE hFile, const void* pBuffer, size_t szBuffer);

+size_t		FX_File_WritePos(FX_HFILE hFile, const void* pBuffer, size_t szBuffer, FX_FILESIZE pos);

+FX_BOOL		FX_File_Flush(FX_HFILE hFile);

+FX_BOOL		FX_File_Truncate(FX_HFILE hFile, FX_FILESIZE szFile);

+FX_BOOL		FX_File_Exist(FX_BSTR fileName);

+FX_BOOL		FX_File_Exist(FX_WSTR fileName);

+FX_BOOL		FX_File_Delete(FX_BSTR fileName);

+FX_BOOL		FX_File_Delete(FX_WSTR fileName);

+FX_BOOL		FX_File_Copy(FX_BSTR fileNameSrc, FX_BSTR fileNameDst);

+FX_BOOL		FX_File_Copy(FX_WSTR fileNameSrc, FX_WSTR fileNameDst);

+FX_BOOL		FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst);

+FX_BOOL		FX_File_Move(FX_WSTR fileNameSrc, FX_WSTR fileNameDst);

+class IFX_StreamWrite

+{

+public:

+

+    virtual void		Release() = 0;

+

+    virtual	FX_BOOL		WriteBlock(const void* pData, size_t size) = 0;

+};

+class IFX_FileWrite : public IFX_StreamWrite

+{

+public:

+

+    virtual void			Release() = 0;

+

+    virtual FX_FILESIZE		GetSize() = 0;

+

+    virtual FX_BOOL			Flush() = 0;

+

+    virtual	FX_BOOL			WriteBlock(const void* pData, FX_FILESIZE offset, size_t size) = 0;

+    virtual	FX_BOOL			WriteBlock(const void* pData, size_t size)

+    {

+        return WriteBlock(pData, GetSize(), size);

+    }

+};

+IFX_FileWrite* FX_CreateFileWrite(FX_LPCSTR filename, IFX_Allocator* pAllocator = NULL);

+IFX_FileWrite* FX_CreateFileWrite(FX_LPCWSTR filename, IFX_Allocator* pAllocator = NULL);

+class IFX_StreamRead

+{

+public:

+

+    virtual void			Release() = 0;

+

+    virtual FX_BOOL			IsEOF() = 0;

+

+    virtual FX_FILESIZE		GetPosition() = 0;

+

+    virtual size_t			ReadBlock(void* buffer, size_t size) = 0;

+};

+class IFX_FileRead : IFX_StreamRead

+{

+public:

+

+    virtual void			Release() = 0;

+

+    virtual FX_FILESIZE		GetSize() = 0;

+

+    virtual FX_BOOL			IsEOF()

+    {

+        return FALSE;

+    }

+

+    virtual FX_FILESIZE		GetPosition()

+    {

+        return 0;

+    }

+

+    virtual FX_BOOL			SetRange(FX_FILESIZE offset, FX_FILESIZE size)

+    {

+        return FALSE;

+    }

+

+    virtual void			ClearRange() {}

+

+    virtual FX_BOOL			ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;

+

+    virtual size_t			ReadBlock(void* buffer, size_t size)

+    {

+        return 0;

+    }

+};

+IFX_FileRead* FX_CreateFileRead(FX_LPCSTR filename, IFX_Allocator* pAllocator = NULL);

+IFX_FileRead* FX_CreateFileRead(FX_LPCWSTR filename, IFX_Allocator* pAllocator = NULL);

+class IFX_FileStream : public IFX_FileRead, public IFX_FileWrite

+{

+public:

+

+    virtual IFX_FileStream*		Retain() = 0;

+

+    virtual void				Release() = 0;

+

+    virtual FX_FILESIZE			GetSize() = 0;

+

+    virtual FX_BOOL				IsEOF() = 0;

+

+    virtual FX_FILESIZE			GetPosition() = 0;

+

+    virtual FX_BOOL				ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;

+

+    virtual size_t				ReadBlock(void* buffer, size_t size) = 0;

+

+    virtual	FX_BOOL				WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) = 0;

+    virtual	FX_BOOL				WriteBlock(const void* buffer, size_t size)

+    {

+        return WriteBlock(buffer, GetSize(), size);

+    }

+

+    virtual FX_BOOL				Flush() = 0;

+};

+IFX_FileStream*		FX_CreateFileStream(FX_LPCSTR filename, FX_DWORD dwModes, IFX_Allocator* pAllocator = NULL);

+IFX_FileStream*		FX_CreateFileStream(FX_LPCWSTR filename, FX_DWORD dwModes, IFX_Allocator* pAllocator = NULL);

+class IFX_MemoryStream : public IFX_FileStream

+{

+public:

+

+    virtual FX_BOOL			IsConsecutive() const = 0;

+

+    virtual void			EstimateSize(size_t nInitSize, size_t nGrowSize) = 0;

+

+    virtual FX_LPBYTE		GetBuffer() const = 0;

+

+    virtual void			AttachBuffer(FX_LPBYTE pBuffer, size_t nSize, FX_BOOL bTakeOver = FALSE) = 0;

+

+    virtual void			DetachBuffer() = 0;

+};

+IFX_MemoryStream*	FX_CreateMemoryStream(FX_LPBYTE pBuffer, size_t nSize, FX_BOOL bTakeOver = FALSE, IFX_Allocator* pAllocator = NULL);

+IFX_MemoryStream*	FX_CreateMemoryStream(FX_BOOL bConsecutive = FALSE, IFX_Allocator* pAllocator = NULL);

+class IFX_BufferRead : public IFX_StreamRead

+{

+public:

+

+    virtual void			Release() = 0;

+

+    virtual FX_BOOL			IsEOF() = 0;

+

+    virtual FX_FILESIZE		GetPosition() = 0;

+

+    virtual size_t			ReadBlock(void* buffer, size_t size) = 0;

+

+    virtual FX_BOOL			ReadNextBlock(FX_BOOL bRestart = FALSE) = 0;

+

+    virtual FX_LPCBYTE		GetBlockBuffer() = 0;

+

+    virtual size_t			GetBlockSize() = 0;

+

+    virtual FX_FILESIZE		GetBlockOffset() = 0;

+};

+#endif

diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h
new file mode 100644
index 0000000..563964c
--- /dev/null
+++ b/core/include/fxcrt/fx_string.h
@@ -0,0 +1,870 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_STRING_H_

+#define _FX_STRING_H_

+class CFX_ByteStringC;

+class CFX_ByteString;

+class CFX_WideStringC;

+class CFX_WideString;

+struct CFX_CharMap;

+class CFX_BinaryBuf;

+typedef int FX_STRSIZE;

+class CFX_ByteStringL;

+class CFX_WideStringL;

+class CFX_ByteStringC : public CFX_Object

+{

+public:

+

+    CFX_ByteStringC()

+    {

+        m_Ptr = NULL;

+        m_Length = 0;

+    }

+

+    CFX_ByteStringC(FX_LPCBYTE ptr, FX_STRSIZE size)

+    {

+        m_Ptr = ptr;

+        m_Length = size;

+    }

+

+    CFX_ByteStringC(FX_LPCSTR ptr)

+    {

+        m_Ptr = (FX_LPCBYTE)ptr;

+        m_Length = ptr ? (FX_STRSIZE)FXSYS_strlen(ptr) : 0;

+    }

+

+    CFX_ByteStringC(FX_CHAR& ch)

+    {

+        m_Ptr = (FX_LPCBYTE)&ch;

+        m_Length = 1;

+    }

+

+    CFX_ByteStringC(FX_LPCSTR ptr, FX_STRSIZE len)

+    {

+        m_Ptr = (FX_LPCBYTE)ptr;

+        if (len == -1) {

+            m_Length = (FX_STRSIZE)FXSYS_strlen(ptr);

+        } else {

+            m_Length = len;

+        }

+    }

+

+    CFX_ByteStringC(const CFX_ByteStringC& src)

+    {

+        m_Ptr = src.m_Ptr;

+        m_Length = src.m_Length;

+    }

+

+    CFX_ByteStringC(const CFX_ByteString& src);

+

+    CFX_ByteStringC& operator = (FX_LPCSTR src)

+    {

+        m_Ptr = (FX_LPCBYTE)src;

+        m_Length = (FX_STRSIZE)FXSYS_strlen(src);

+        return *this;

+    }

+

+    CFX_ByteStringC& operator = (const CFX_ByteStringC& src)

+    {

+        m_Ptr = src.m_Ptr;

+        m_Length = src.m_Length;

+        return *this;

+    }

+

+    CFX_ByteStringC& operator = (const CFX_ByteString& src);

+

+    bool			operator == (const CFX_ByteStringC& str) const

+    {

+        return 	str.m_Length == m_Length && FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length) == 0;

+    }

+

+    bool			operator != (const CFX_ByteStringC& str) const

+    {

+        return 	str.m_Length != m_Length || FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length) != 0;

+    }

+#define FXBSTR_ID(c1, c2, c3, c4) ((c1 << 24) | (c2 << 16) | (c3 << 8) | (c4))

+

+    FX_DWORD		GetID(FX_STRSIZE start_pos = 0) const;

+

+    FX_LPCBYTE		GetPtr() const

+    {

+        return m_Ptr;

+    }

+

+    FX_LPCSTR		GetCStr() const

+    {

+        return (FX_LPCSTR)m_Ptr;

+    }

+

+    FX_STRSIZE		GetLength() const

+    {

+        return m_Length;

+    }

+

+    bool			IsEmpty() const

+    {

+        return m_Length == 0;

+    }

+

+    operator		FX_LPCBYTE() const

+    {

+        return m_Ptr;

+    }

+

+    FX_BYTE			GetAt(FX_STRSIZE index) const

+    {

+        return m_Ptr[index];

+    }

+

+    CFX_ByteStringC	Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const

+    {

+        if (index < 0) {

+            index = 0;

+        }

+        if (index > m_Length) {

+            return CFX_ByteStringC();

+        }

+        if (count < 0 || count > m_Length - index) {

+            count = m_Length - index;

+        }

+        return CFX_ByteStringC(m_Ptr + index, count);

+    }

+protected:

+

+    FX_LPCBYTE		m_Ptr;

+

+    FX_STRSIZE		m_Length;

+private:

+

+    void*			operator new (size_t) throw()

+    {

+        return NULL;

+    }

+};

+typedef const CFX_ByteStringC& FX_BSTR;

+#define FX_BSTRC(str) CFX_ByteStringC(str, sizeof str-1)

+struct CFX_StringData {

+

+    long		m_nRefs;

+

+    FX_STRSIZE	m_nDataLength;

+

+    FX_STRSIZE	m_nAllocLength;

+

+    FX_CHAR		m_String[1];

+};

+class CFX_ByteString : public CFX_Object

+{

+public:

+

+    CFX_ByteString()

+    {

+        m_pData = NULL;

+    }

+

+    CFX_ByteString(const CFX_ByteString& str);

+

+    CFX_ByteString(char ch);

+

+    CFX_ByteString(FX_LPCSTR ptr, FX_STRSIZE len = -1);

+

+    CFX_ByteString(FX_LPCBYTE ptr, FX_STRSIZE len);

+

+    CFX_ByteString(FX_BSTR bstrc);

+

+    CFX_ByteString(FX_BSTR bstrc1, FX_BSTR bstrc2);

+

+    ~CFX_ByteString();

+

+    static CFX_ByteString	FromUnicode(FX_LPCWSTR ptr, FX_STRSIZE len = -1);

+

+    static CFX_ByteString	FromUnicode(const CFX_WideString& str);

+

+    operator				FX_LPCSTR() const

+    {

+        return m_pData ? m_pData->m_String : "";

+    }

+

+    operator				FX_LPCBYTE() const

+    {

+        return m_pData ? (FX_LPCBYTE)m_pData->m_String : NULL;

+    }

+

+    FX_STRSIZE				GetLength() const

+    {

+        return m_pData ? m_pData->m_nDataLength : 0;

+    }

+

+    bool					IsEmpty() const

+    {

+        return !GetLength();

+    }

+

+    int						Compare(FX_BSTR str) const;

+

+

+    bool					Equal(FX_BSTR str) const;

+

+

+    bool					EqualNoCase(FX_BSTR str) const;

+

+    bool					operator == (FX_LPCSTR str) const

+    {

+        return Equal(str);

+    }

+

+    bool					operator == (FX_BSTR str) const

+    {

+        return Equal(str);

+    }

+

+    bool					operator == (const CFX_ByteString& str) const;

+

+    bool					operator != (FX_LPCSTR str) const

+    {

+        return !Equal(str);

+    }

+

+    bool					operator != (FX_BSTR str) const

+    {

+        return !Equal(str);

+    }

+

+    bool					operator != (const CFX_ByteString& str) const

+    {

+        return !operator==(str);

+    }

+

+    void					Empty();

+

+    const CFX_ByteString&	operator = (FX_LPCSTR str);

+

+    const CFX_ByteString&	operator = (FX_BSTR bstrc);

+

+    const CFX_ByteString&	operator = (const CFX_ByteString& stringSrc);

+

+    const CFX_ByteString&	operator = (const CFX_BinaryBuf& buf);

+

+    void					Load(FX_LPCBYTE str, FX_STRSIZE len);

+

+    const CFX_ByteString&	operator += (FX_CHAR ch);

+

+    const CFX_ByteString&	operator += (FX_LPCSTR str);

+

+    const CFX_ByteString&	operator += (const CFX_ByteString& str);

+

+    const CFX_ByteString&	operator += (FX_BSTR bstrc);

+

+    FX_BYTE					GetAt(FX_STRSIZE nIndex) const

+    {

+        return m_pData ? m_pData->m_String[nIndex] : 0;

+    }

+

+    FX_BYTE					operator[](FX_STRSIZE nIndex) const

+    {

+        return m_pData ? m_pData->m_String[nIndex] : 0;

+    }

+

+    void					SetAt(FX_STRSIZE nIndex, FX_CHAR ch);

+

+    FX_STRSIZE				Insert(FX_STRSIZE index, FX_CHAR ch);

+

+    FX_STRSIZE				Delete(FX_STRSIZE index, FX_STRSIZE count = 1);

+

+

+    void					Format(FX_LPCSTR lpszFormat, ... );

+

+    void					FormatV(FX_LPCSTR lpszFormat, va_list argList);

+

+

+    void					Reserve(FX_STRSIZE len);

+

+    FX_LPSTR				GetBuffer(FX_STRSIZE len);

+

+    FX_LPSTR				LockBuffer();

+

+    void					ReleaseBuffer(FX_STRSIZE len = -1);

+

+    CFX_ByteString			Mid(FX_STRSIZE first) const;

+

+    CFX_ByteString			Mid(FX_STRSIZE first, FX_STRSIZE count) const;

+

+    CFX_ByteString			Left(FX_STRSIZE count) const;

+

+    CFX_ByteString			Right(FX_STRSIZE count) const;

+

+    FX_STRSIZE				Find(FX_BSTR lpszSub, FX_STRSIZE start = 0) const;

+

+    FX_STRSIZE				Find(FX_CHAR ch, FX_STRSIZE start = 0) const;

+

+    FX_STRSIZE				ReverseFind(FX_CHAR ch) const;

+

+    void					MakeLower();

+

+    void					MakeUpper();

+

+    void					TrimRight();

+

+    void					TrimRight(FX_CHAR chTarget);

+

+    void					TrimRight(FX_BSTR lpszTargets);

+

+    void					TrimLeft();

+

+    void					TrimLeft(FX_CHAR chTarget);

+

+    void					TrimLeft(FX_BSTR lpszTargets);

+

+    FX_STRSIZE				Replace(FX_BSTR lpszOld, FX_BSTR lpszNew);

+

+    FX_STRSIZE				Remove(FX_CHAR ch);

+

+    CFX_WideString			UTF8Decode() const;

+

+    void					ConvertFrom(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL);

+

+    FX_DWORD				GetID(FX_STRSIZE start_pos = 0) const;

+

+    static CFX_ByteString	LoadFromFile(FX_BSTR file_path);

+#define FXFORMAT_SIGNED			1

+#define FXFORMAT_HEX			2

+#define FXFORMAT_CAPITAL		4

+

+    static CFX_ByteString	FormatInteger(int i, FX_DWORD flags = 0);

+

+    static CFX_ByteString	FormatFloat(FX_FLOAT f, int precision = 0);

+protected:

+

+    struct CFX_StringData*	m_pData;

+    void					AllocCopy(CFX_ByteString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex, FX_STRSIZE nExtraLen) const;

+    void					AssignCopy(FX_STRSIZE nSrcLen, FX_LPCSTR lpszSrcData);

+    void					ConcatCopy(FX_STRSIZE nSrc1Len, FX_LPCSTR lpszSrc1Data, FX_STRSIZE nSrc2Len, FX_LPCSTR lpszSrc2Data);

+    void					ConcatInPlace(FX_STRSIZE nSrcLen, FX_LPCSTR lpszSrcData);

+    void					CopyBeforeWrite();

+    void					AllocBeforeWrite(FX_STRSIZE nLen);

+};

+inline CFX_ByteStringC::CFX_ByteStringC(const CFX_ByteString& src)

+{

+    m_Ptr = (FX_LPCBYTE)src;

+    m_Length = src.GetLength();

+}

+inline CFX_ByteStringC& CFX_ByteStringC::operator = (const CFX_ByteString& src)

+{

+    m_Ptr = (FX_LPCBYTE)src;

+    m_Length = src.GetLength();

+    return *this;

+}

+

+inline CFX_ByteString operator + (FX_BSTR str1, FX_BSTR str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+inline CFX_ByteString operator + (FX_BSTR str1, FX_LPCSTR str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+inline CFX_ByteString operator + (FX_LPCSTR str1, FX_BSTR str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+inline CFX_ByteString operator + (FX_BSTR str1, FX_CHAR ch)

+{

+    return CFX_ByteString(str1, CFX_ByteStringC(ch));

+}

+inline CFX_ByteString operator + (FX_CHAR ch, FX_BSTR str2)

+{

+    return CFX_ByteString(ch, str2);

+}

+inline CFX_ByteString operator + (const CFX_ByteString& str1, const CFX_ByteString& str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+inline CFX_ByteString operator + (const CFX_ByteString& str1, FX_CHAR ch)

+{

+    return CFX_ByteString(str1, CFX_ByteStringC(ch));

+}

+inline CFX_ByteString operator + (FX_CHAR ch, const CFX_ByteString& str2)

+{

+    return CFX_ByteString(ch, str2);

+}

+inline CFX_ByteString operator + (const CFX_ByteString& str1, FX_LPCSTR str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+inline CFX_ByteString operator + (FX_LPCSTR str1, const CFX_ByteString& str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+inline CFX_ByteString operator + (const CFX_ByteString& str1, FX_BSTR str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+inline CFX_ByteString operator + (FX_BSTR str1, const CFX_ByteString& str2)

+{

+    return CFX_ByteString(str1, str2);

+}

+class CFX_StringBufBase : public CFX_Object

+{

+public:

+

+    CFX_StringBufBase(FX_STRSIZE limit)

+    {

+        m_Size = 0;

+        m_Limit = limit;

+    }

+

+    FX_CHAR*	GetPtr() const

+    {

+        return (FX_CHAR*)(this + 1);

+    }

+

+    FX_STRSIZE	GetSize() const

+    {

+        return m_Size;

+    }

+

+    void		Empty()

+    {

+        m_Size = 0;

+    }

+

+    void		Copy(FX_BSTR str);

+

+    void		Append(FX_BSTR str);

+

+    void		Append(int i, FX_DWORD flags = 0);

+

+    CFX_ByteStringC		GetStringC() const

+    {

+        return CFX_ByteStringC((FX_CHAR*)(this + 1), m_Size);

+    }

+

+    CFX_ByteString		GetString() const

+    {

+        return CFX_ByteString((FX_CHAR*)(this + 1), m_Size);

+    }

+protected:

+

+    FX_STRSIZE	m_Limit;

+

+    FX_STRSIZE	m_Size;

+};

+template<FX_STRSIZE limit>

+class CFX_StringBufTemplate : public CFX_StringBufBase

+{

+public:

+

+    CFX_StringBufTemplate() : CFX_StringBufBase(limit) {}

+

+    FX_CHAR		m_Buffer[limit];

+};

+typedef CFX_StringBufTemplate<256> CFX_StringBuf256;

+class CFX_WideStringC : public CFX_Object

+{

+public:

+

+    CFX_WideStringC()

+    {

+        m_Ptr = NULL;

+        m_Length = 0;

+    }

+

+    CFX_WideStringC(FX_LPCWSTR ptr)

+    {

+        m_Ptr = ptr;

+        m_Length = ptr ? (FX_STRSIZE)FXSYS_wcslen(ptr) : 0;

+    }

+

+    CFX_WideStringC(FX_WCHAR& ch)

+    {

+        m_Ptr = &ch;

+        m_Length = 1;

+    }

+

+    CFX_WideStringC(FX_LPCWSTR ptr, FX_STRSIZE len)

+    {

+        m_Ptr = ptr;

+        if (len == -1) {

+            m_Length = (FX_STRSIZE)FXSYS_wcslen(ptr);

+        } else {

+            m_Length = len;

+        }

+    }

+

+    CFX_WideStringC(const CFX_WideStringC& src)

+    {

+        m_Ptr = src.m_Ptr;

+        m_Length = src.m_Length;

+    }

+

+    CFX_WideStringC(const CFX_WideString& src);

+

+    CFX_WideStringC& operator = (FX_LPCWSTR src)

+    {

+        m_Ptr = src;

+        m_Length = (FX_STRSIZE)FXSYS_wcslen(src);

+        return *this;

+    }

+

+    CFX_WideStringC& operator = (const CFX_WideStringC& src)

+    {

+        m_Ptr = src.m_Ptr;

+        m_Length = src.m_Length;

+        return *this;

+    }

+

+    CFX_WideStringC& operator = (const CFX_WideString& src);

+

+    bool			operator == (const CFX_WideStringC& str) const

+    {

+        return 	str.m_Length == m_Length && FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length * sizeof(FX_WCHAR)) == 0;

+    }

+

+    bool			operator != (const CFX_WideStringC& str) const

+    {

+        return 	str.m_Length != m_Length || FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length * sizeof(FX_WCHAR)) != 0;

+    }

+

+    FX_LPCWSTR		GetPtr() const

+    {

+        return m_Ptr;

+    }

+

+    FX_STRSIZE		GetLength() const

+    {

+        return m_Length;

+    }

+

+    bool			IsEmpty() const

+    {

+        return m_Length == 0;

+    }

+

+    FX_WCHAR		GetAt(FX_STRSIZE index) const

+    {

+        return m_Ptr[index];

+    }

+

+    CFX_WideStringC	Left(FX_STRSIZE count) const

+    {

+        if (count < 1) {

+            return CFX_WideStringC();

+        }

+        if (count > m_Length) {

+            count = m_Length;

+        }

+        return CFX_WideStringC(m_Ptr, count);

+    }

+

+    CFX_WideStringC	Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const

+    {

+        if (index < 0) {

+            index = 0;

+        }

+        if (index > m_Length) {

+            return CFX_WideStringC();

+        }

+        if (count < 0 || count > m_Length - index) {

+            count = m_Length - index;

+        }

+        return CFX_WideStringC(m_Ptr + index, count);

+    }

+

+    CFX_WideStringC	Right(FX_STRSIZE count) const

+    {

+        if (count < 1) {

+            return CFX_WideStringC();

+        }

+        if (count > m_Length) {

+            count = m_Length;

+        }

+        return CFX_WideStringC(m_Ptr + m_Length - count, count);

+    }

+protected:

+

+    FX_LPCWSTR		m_Ptr;

+

+    FX_STRSIZE		m_Length;

+private:

+

+    void*			operator new (size_t) throw()

+    {

+        return NULL;

+    }

+};

+typedef const CFX_WideStringC&	FX_WSTR;

+#define FX_WSTRC(wstr) CFX_WideStringC((FX_LPCWSTR)wstr, sizeof(wstr) / sizeof(FX_WCHAR) - 1)

+struct CFX_StringDataW {

+

+    long		m_nRefs;

+

+    FX_STRSIZE	m_nDataLength;

+

+    FX_STRSIZE	m_nAllocLength;

+

+    FX_WCHAR	m_String[1];

+};

+class CFX_WideString : public CFX_Object

+{

+public:

+

+    CFX_WideString()

+    {

+        m_pData = NULL;

+    }

+

+    CFX_WideString(const CFX_WideString& str);

+

+    CFX_WideString(FX_LPCWSTR ptr, FX_STRSIZE len = -1)

+    {

+        InitStr(ptr, len);

+    }

+

+    CFX_WideString(FX_WCHAR ch);

+

+    CFX_WideString(const CFX_WideStringC& str);

+

+    CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2);

+

+    ~CFX_WideString();

+

+    static CFX_WideString	FromLocal(const char* str, FX_STRSIZE len = -1);

+

+    static CFX_WideString	FromUTF8(const char* str, FX_STRSIZE len = -1);

+

+    static CFX_WideString	FromUTF16LE(const unsigned short* str, FX_STRSIZE len = -1);

+

+    operator FX_LPCWSTR() const

+    {

+        return m_pData ? m_pData->m_String : (FX_WCHAR*)L"";

+    }

+

+    void					Empty();

+

+

+    FX_BOOL					IsEmpty() const

+    {

+        return !GetLength();

+    }

+

+    FX_STRSIZE				GetLength() const

+    {

+        return m_pData ? m_pData->m_nDataLength : 0;

+    }

+

+    const CFX_WideString&	operator = (FX_LPCWSTR str);

+

+    const CFX_WideString&	operator =(const CFX_WideString& stringSrc);

+

+    const CFX_WideString&	operator =(const CFX_WideStringC& stringSrc);

+

+    const CFX_WideString&	operator += (FX_LPCWSTR str);

+

+    const CFX_WideString&	operator += (FX_WCHAR ch);

+

+    const CFX_WideString&	operator += (const CFX_WideString& str);

+

+    const CFX_WideString&	operator += (const CFX_WideStringC& str);

+

+    FX_WCHAR				GetAt(FX_STRSIZE nIndex) const

+    {

+        return m_pData ? m_pData->m_String[nIndex] : 0;

+    }

+

+    FX_WCHAR				operator[](FX_STRSIZE nIndex) const

+    {

+        return m_pData ? m_pData->m_String[nIndex] : 0;

+    }

+

+    void					SetAt(FX_STRSIZE nIndex, FX_WCHAR ch);

+

+    int						Compare(FX_LPCWSTR str) const;

+

+    int						Compare(const CFX_WideString& str) const;

+

+    int						CompareNoCase(FX_LPCWSTR str) const;

+

+    bool					Equal(const CFX_WideStringC& str) const;

+

+    CFX_WideString			Mid(FX_STRSIZE first) const;

+

+    CFX_WideString			Mid(FX_STRSIZE first, FX_STRSIZE count) const;

+

+    CFX_WideString			Left(FX_STRSIZE count) const;

+

+    CFX_WideString			Right(FX_STRSIZE count) const;

+

+    FX_STRSIZE				Insert(FX_STRSIZE index, FX_WCHAR ch);

+

+    FX_STRSIZE				Delete(FX_STRSIZE index, FX_STRSIZE count = 1);

+

+    void					Format(FX_LPCWSTR lpszFormat, ... );

+

+    void					FormatV(FX_LPCWSTR lpszFormat, va_list argList);

+

+    void					MakeLower();

+

+    void					MakeUpper();

+

+    void					TrimRight();

+

+    void					TrimRight(FX_WCHAR chTarget);

+

+    void					TrimRight(FX_LPCWSTR lpszTargets);

+

+    void					TrimLeft();

+

+    void					TrimLeft(FX_WCHAR chTarget);

+

+    void					TrimLeft(FX_LPCWSTR lpszTargets);

+

+    void					Reserve(FX_STRSIZE len);

+

+    FX_LPWSTR				GetBuffer(FX_STRSIZE len);

+

+    FX_LPWSTR				LockBuffer();

+

+    void					ReleaseBuffer(FX_STRSIZE len = -1);

+

+    int						GetInteger() const;

+

+    FX_FLOAT				GetFloat() const;

+

+    FX_STRSIZE				Find(FX_LPCWSTR lpszSub, FX_STRSIZE start = 0) const;

+

+    FX_STRSIZE				Find(FX_WCHAR ch, FX_STRSIZE start = 0) const;

+

+    FX_STRSIZE				Replace(FX_LPCWSTR lpszOld, FX_LPCWSTR lpszNew);

+

+    FX_STRSIZE				Remove(FX_WCHAR ch);

+

+    CFX_ByteString			UTF8Encode() const;

+

+    CFX_ByteString			UTF16LE_Encode(FX_BOOL bTerminate = TRUE) const;

+

+    void					ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL);

+protected:

+    void					InitStr(FX_LPCWSTR ptr, int len);

+

+    CFX_StringDataW*		m_pData;

+    void					CopyBeforeWrite();

+    void					AllocBeforeWrite(FX_STRSIZE nLen);

+    void					ConcatInPlace(FX_STRSIZE nSrcLen, FX_LPCWSTR lpszSrcData);

+    void					ConcatCopy(FX_STRSIZE nSrc1Len, FX_LPCWSTR lpszSrc1Data, FX_STRSIZE nSrc2Len, FX_LPCWSTR lpszSrc2Data);

+    void					AssignCopy(FX_STRSIZE nSrcLen, FX_LPCWSTR lpszSrcData);

+    void					AllocCopy(CFX_WideString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex, FX_STRSIZE nExtraLen) const;

+};

+inline CFX_WideStringC::CFX_WideStringC(const CFX_WideString& src)

+{

+    m_Ptr = (FX_LPCWSTR)src;

+    m_Length = src.GetLength();

+}

+inline CFX_WideStringC& CFX_WideStringC::operator = (const CFX_WideString& src)

+{

+    m_Ptr = (FX_LPCWSTR)src;

+    m_Length = src.GetLength();

+    return *this;

+}

+

+inline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideStringC& str2)

+{

+    return CFX_WideString(str1, str2);

+}

+inline CFX_WideString operator + (const CFX_WideStringC& str1, FX_LPCWSTR str2)

+{

+    return CFX_WideString(str1, str2);

+}

+inline CFX_WideString operator + (FX_LPCWSTR str1, const CFX_WideStringC& str2)

+{

+    return CFX_WideString(str1, str2);

+}

+inline CFX_WideString operator + (const CFX_WideStringC& str1, FX_WCHAR ch)

+{

+    return CFX_WideString(str1, CFX_WideStringC(ch));

+}

+inline CFX_WideString operator + (FX_WCHAR ch, const CFX_WideStringC& str2)

+{

+    return CFX_WideString(ch, str2);

+}

+inline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideString& str2)

+{

+    return CFX_WideString(str1, str2);

+}

+inline CFX_WideString operator + (const CFX_WideString& str1, FX_WCHAR ch)

+{

+    return CFX_WideString(str1, CFX_WideStringC(ch));

+}

+inline CFX_WideString operator + (FX_WCHAR ch, const CFX_WideString& str2)

+{

+    return CFX_WideString(ch, str2);

+}

+inline CFX_WideString operator + (const CFX_WideString& str1, FX_LPCWSTR str2)

+{

+    return CFX_WideString(str1, str2);

+}

+inline CFX_WideString operator + (FX_LPCWSTR str1, const CFX_WideString& str2)

+{

+    return CFX_WideString(str1, str2);

+}

+inline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideStringC& str2)

+{

+    return CFX_WideString(str1, str2);

+}

+inline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideString& str2)

+{

+    return CFX_WideString(str1, str2);

+}

+

+bool operator==(const CFX_WideString& s1, const CFX_WideString& s2);

+bool operator==(const CFX_WideString& s1, const CFX_WideStringC& s2);

+bool operator==(const CFX_WideStringC& s1, const CFX_WideString& s2);

+bool operator== (const CFX_WideString& s1, FX_LPCWSTR s2);

+bool operator==(FX_LPCWSTR s1, const CFX_WideString& s2);

+bool operator!=(const CFX_WideString& s1, const CFX_WideString& s2);

+bool operator!=(const CFX_WideString& s1, const CFX_WideStringC& s2);

+bool operator!=(const CFX_WideStringC& s1, const CFX_WideString& s2);

+bool operator!= (const CFX_WideString& s1, FX_LPCWSTR s2);

+bool operator!=(FX_LPCWSTR s1, const CFX_WideString& s2);

+FX_FLOAT FX_atof(FX_BSTR str);

+void FX_atonum(FX_BSTR str, FX_BOOL& bInteger, void* pData);

+FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_LPSTR buf);

+CFX_ByteString	FX_UTF8Encode(FX_LPCWSTR pwsStr, FX_STRSIZE len);

+inline CFX_ByteString	FX_UTF8Encode(FX_WSTR wsStr)

+{

+    return FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength());

+}

+inline CFX_ByteString	FX_UTF8Encode(const CFX_WideString &wsStr)

+{

+    return FX_UTF8Encode((FX_LPCWSTR)wsStr, wsStr.GetLength());

+}

+class CFX_ByteStringL : public CFX_ByteStringC

+{

+public:

+    CFX_ByteStringL() : CFX_ByteStringC() {}

+    ~CFX_ByteStringL() {}

+

+    void		Empty(IFX_Allocator* pAllocator);

+    FX_LPSTR	AllocBuffer(FX_STRSIZE length, IFX_Allocator* pAllocator);

+

+    void		Set(FX_BSTR src, IFX_Allocator* pAllocator);

+};

+class CFX_WideStringL : public CFX_WideStringC

+{

+public:

+    CFX_WideStringL() : CFX_WideStringC() {}

+    ~CFX_WideStringL() {}

+

+    void		Empty(IFX_Allocator* pAllocator);

+    void		Set(FX_WSTR src, IFX_Allocator* pAllocator);

+

+    int			GetInteger() const;

+    FX_FLOAT	GetFloat() const;

+

+    void		TrimRight(FX_LPCWSTR lpszTargets);

+};

+void	FX_UTF8Encode(FX_LPCWSTR pwsStr, FX_STRSIZE len, CFX_ByteStringL &utf8Str, IFX_Allocator* pAllocator = NULL);

+#endif

diff --git a/core/include/fxcrt/fx_system.h b/core/include/fxcrt/fx_system.h
new file mode 100644
index 0000000..f72be0f
--- /dev/null
+++ b/core/include/fxcrt/fx_system.h
@@ -0,0 +1,279 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_SYSTEM_H_

+#define _FX_SYSTEM_H_

+#define _FX_WIN32_DESKTOP_		1

+#define _FX_LINUX_DESKTOP_		4

+#define _FX_MACOSX_				7

+#define _FX_ANDROID_			12

+#define _FXM_PLATFORM_WINDOWS_		1

+#define _FXM_PLATFORM_LINUX_		2

+#define _FXM_PLATFORM_APPLE_		3

+#define _FXM_PLATFORM_ANDROID_		4

+#ifndef _FX_OS_

+#if defined(__ANDROID__)

+#define _FX_OS_ _FX_ANDROID_

+#define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_

+#elif defined(_WIN32) || defined(_WIN64)

+#define _FX_OS_ _FX_WIN32_DESKTOP_

+#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_

+#elif defined(__linux__)

+#define _FX_OS_ _FX_LINUX_DESKTOP_

+#define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_

+#elif defined(__APPLE__)

+#define _FX_OS_ _FX_MACOSX_

+#define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_

+#endif

+#endif

+#if !defined(_FX_OS_) || _FX_OS_ == 0

+#error Sorry, can not figure out what OS you are targeting to. Please specify _FX_OS_ macro.

+#endif

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+#define _CRT_SECURE_NO_WARNINGS

+#include <windows.h>

+#endif

+#define _FX_W32_		1

+#define _FX_W64_		2

+#ifndef _FX_WORDSIZE_

+#if defined(_WIN64) || defined(__arm64) || defined(__arm64__) || defined(_M_AMD64) || defined(_M_X64) || defined(_M_IA64) || defined(__powerpc64__) || defined(__x86_64__) || __WORDSIZE == 64

+#define _FX_WORDSIZE_	_FX_W64_

+#else

+#define _FX_WORDSIZE_	_FX_W32_

+#endif

+#endif

+#include <stddef.h>

+#include <stdarg.h>

+#include <setjmp.h>

+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <assert.h>

+#include <wchar.h>

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_

+#include <libkern/OSAtomic.h>

+#if _FX_OS_ == _FX_MACOSX_

+#include <Carbon/Carbon.h>

+#elif _FX_OS_ == _FX_IOS_

+#include <CoreText/CoreText.h>

+#include <CoreGraphics/CoreGraphics.h>

+#endif

+#endif

+#ifdef __cplusplus

+extern "C" {

+#endif

+typedef void*					FX_LPVOID;

+typedef void const*				FX_LPCVOID;

+typedef void*					FX_POSITION;

+typedef signed char				FX_INT8;

+typedef unsigned char			FX_UINT8;

+typedef unsigned char			FX_BYTE;

+typedef unsigned char*			FX_LPBYTE;

+typedef unsigned char const*	FX_LPCBYTE;

+typedef short					FX_INT16;

+typedef unsigned short			FX_UINT16;

+typedef short					FX_SHORT;

+typedef unsigned short			FX_WORD;

+typedef unsigned short*			FX_LPWORD;

+typedef unsigned short const*	FX_LPCWORD;

+typedef int						FX_INT32;

+typedef float					FX_FLOAT;

+typedef int						FX_BOOL;

+typedef int						FX_ERR;

+#define FX_SUCCEEDED(Status)	((FX_ERR)(Status) >= 0)

+#define FX_FAILED(Status)		((FX_ERR)(Status) < 0)

+typedef char					FX_CHAR;

+typedef char*					FX_LPSTR;

+typedef char const*				FX_LPCSTR;

+typedef unsigned int		FX_DWORD;

+typedef unsigned int*		FX_LPDWORD;

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+typedef __int64				FX_INT64;

+typedef unsigned __int64	FX_UINT64;

+#else

+typedef long long int		FX_INT64;

+typedef unsigned long long	FX_UINT64;

+#endif

+#if _FX_WORDSIZE_ == _FX_W64_

+typedef FX_INT64			FX_INTPTR;

+typedef FX_UINT64			FX_UINTPTR;

+#else

+typedef int					FX_INTPTR;

+typedef unsigned int		FX_UINTPTR;

+#endif

+typedef wchar_t					FX_WCHAR;

+typedef wchar_t*				FX_LPWSTR;

+typedef wchar_t const*			FX_LPCWSTR;

+typedef FX_DWORD				FX_UINT32;

+typedef FX_UINT64				FX_QWORD;

+#define FX_DEFINEHANDLE(name)	typedef struct _##name {FX_LPVOID pData;} * name;

+#if defined(DEBUG) && !defined(_DEBUG)

+#define _DEBUG

+#endif

+#ifndef TRUE

+

+#define TRUE	1

+#endif

+#ifndef FALSE

+

+#define FALSE	0

+#endif

+#ifndef NULL

+

+#define NULL	0

+#endif

+#define FXSYS_assert assert

+#ifndef ASSERT

+#ifdef _DEBUG

+#define ASSERT FXSYS_assert

+#else

+

+#define ASSERT(a)

+#endif

+#endif

+#define FX_MAX(a, b) (((a) > (b)) ? (a) : (b))

+#define FX_MIN(a, b) (((a) < (b)) ? (a) : (b))

+#define FX_PI	3.1415926535897932384626433832795f

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+#define FXSYS_snprintf	_snprintf

+#else

+#define FXSYS_snprintf	snprintf

+#endif

+#define FXSYS_sprintf	sprintf

+#define FXSYS_vsprintf	vsprintf

+#define FXSYS_strchr	strchr

+#define FXSYS_strlen	strlen

+#define FXSYS_strncmp	strncmp

+#define FXSYS_strcmp	strcmp

+#define FXSYS_strcpy	strcpy

+#define FXSYS_strncpy	strncpy

+#define FXSYS_strstr	strstr

+#define FXSYS_FILE		FILE

+#define FXSYS_fopen		fopen

+#define FXSYS_fclose	fclose

+#define FXSYS_SEEK_END	SEEK_END

+#define FXSYS_SEEK_SET	SEEK_SET

+#define FXSYS_fseek		fseek

+#define FXSYS_ftell		ftell

+#define FXSYS_fread		fread

+#define FXSYS_fwrite	fwrite

+#define FXSYS_fprintf	fprintf

+#define FXSYS_fflush	fflush

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+#ifdef _NATIVE_WCHAR_T_DEFINED

+#define FXSYS_wfopen(f, m) _wfopen((const wchar_t*)(f), (const wchar_t*)(m))

+#else

+#define FXSYS_wfopen _wfopen

+#endif

+#else

+FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode);

+#endif

+

+#define FXSYS_wcslen	wcslen

+#define FXSYS_wcscmp	wcscmp

+#define FXSYS_wcschr	wcschr

+#define FXSYS_wcsstr	wcsstr

+#define FXSYS_wcsncmp	wcsncmp

+#define FXSYS_vswprintf	vswprintf

+#define FXSYS_mbstowcs	mbstowcs

+#define FXSYS_wcstombs	wcstombs

+#define FXSYS_memcmp	memcmp

+#define FXSYS_memcpy	memcpy

+#define FXSYS_memmove	memmove

+#define FXSYS_memset	memset

+#define FXSYS_memchr	memchr

+#define FXSYS_qsort		qsort

+#define FXSYS_bsearch	bsearch

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+#define FXSYS_GetACP GetACP

+#define FXSYS_itoa _itoa

+#define FXSYS_strlwr _strlwr

+#define FXSYS_strupr _strupr

+#define FXSYS_stricmp _stricmp

+#ifdef _NATIVE_WCHAR_T_DEFINED

+#define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2))

+#define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8)

+#define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6)

+#define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str))

+#define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str))

+#else

+#define FXSYS_wcsicmp _wcsicmp

+#define FXSYS_WideCharToMultiByte WideCharToMultiByte

+#define FXSYS_MultiByteToWideChar MultiByteToWideChar

+#define FXSYS_wcslwr _wcslwr

+#define FXSYS_wcsupr _wcsupr

+#endif

+#define FXSYS_GetFullPathName GetFullPathName

+#define FXSYS_GetModuleFileName GetModuleFileName

+#else

+int			FXSYS_GetACP(void);

+char*		FXSYS_itoa(int value, char* string, int radix);

+int			FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen,

+                                      char* buf, int buflen, const char* default_str, int* pUseDefault);

+int			FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen,

+                                      wchar_t* buf, int buflen);

+FX_DWORD	FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);

+FX_DWORD	FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);

+char*		FXSYS_strlwr(char* str);

+char*		FXSYS_strupr(char* str);

+int			FXSYS_stricmp(const char*, const char*);

+int			FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2);

+wchar_t*	FXSYS_wcslwr(wchar_t* str);

+wchar_t*	FXSYS_wcsupr(wchar_t* str);

+#endif

+#define FXSYS_memcpy32		FXSYS_memcpy

+#define FXSYS_memcmp32		FXSYS_memcmp

+#define FXSYS_memset32		FXSYS_memset

+#define FXSYS_memset8		FXSYS_memset

+#define FXSYS_memmove32		FXSYS_memmove

+#ifdef __cplusplus

+}

+#endif

+#include <math.h>

+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_

+#define FXSYS_pow(a, b)		(FX_FLOAT)powf(a, b)

+#else

+#define FXSYS_pow(a, b)		(FX_FLOAT)pow(a, b)

+#endif

+#define FXSYS_sqrt(a)		(FX_FLOAT)sqrt(a)

+#define FXSYS_fabs(a)		(FX_FLOAT)fabs(a)

+#define FXSYS_atan2(a, b)	(FX_FLOAT)atan2(a, b)

+#define FXSYS_ceil(a)		(FX_FLOAT)ceil(a)

+#define FXSYS_floor(a)		(FX_FLOAT)floor(a)

+#define FXSYS_cos(a)		(FX_FLOAT)cos(a)

+#define FXSYS_acos(a)		(FX_FLOAT)acos(a)

+#define FXSYS_sin(a)		(FX_FLOAT)sin(a)

+#define FXSYS_log(a)		(FX_FLOAT)log(a)

+#define FXSYS_log10(a)		(FX_FLOAT)log10(a)

+#define FXSYS_fmod(a, b)	(FX_FLOAT)fmod(a, b)

+#define FXSYS_abs			abs

+#ifdef __cplusplus

+extern "C" {

+#endif

+#define _FX_LSB_FIRST_

+#define FXDWORD_FROM_LSBFIRST(i)	(i)

+#define FXDWORD_FROM_MSBFIRST(i)	(((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24))

+#define FXDWORD_GET_LSBFIRST(p)		((((FX_LPBYTE)(p))[3] << 24) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0]))

+#define FXDWORD_GET_MSBFIRST(p) ((((FX_LPBYTE)(p))[0] << 24) | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | (((FX_LPBYTE)(p))[3]))

+#define FXSYS_HIBYTE(word)	((FX_BYTE)((word) >> 8))

+#define FXSYS_LOBYTE(word)	((FX_BYTE)(word))

+#define FXSYS_HIWORD(dword)	((FX_WORD)((dword) >> 16))

+#define FXSYS_LOWORD(dword)	((FX_WORD)(dword))

+FX_INT32	FXSYS_atoi(FX_LPCSTR str);

+FX_INT32	FXSYS_wtoi(FX_LPCWSTR str);

+FX_INT64	FXSYS_atoi64(FX_LPCSTR str);

+FX_INT64	FXSYS_wtoi64(FX_LPCWSTR str);

+FX_LPCSTR	FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix);

+FX_LPCWSTR	FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix);

+int			FXSYS_round(FX_FLOAT f);

+#define		FXSYS_Mul(a, b) ((a) * (b))

+#define		FXSYS_Div(a, b) ((a) / (b))

+#define		FXSYS_MulDiv(a, b, c) ((a) * (b) / (c))

+#define		FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b))

+#ifdef __cplusplus

+};

+#endif

+#endif

diff --git a/core/include/fxcrt/fx_ucd.h b/core/include/fxcrt/fx_ucd.h
new file mode 100644
index 0000000..447d555
--- /dev/null
+++ b/core/include/fxcrt/fx_ucd.h
@@ -0,0 +1,112 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef _FX_UNICODE_
+#define _FX_UNICODE_
+enum FX_CHARBREAKPROP {
+    FX_CBP_OP = 0,
+    FX_CBP_CL = 1,
+    FX_CBP_QU = 2,
+    FX_CBP_GL = 3,
+    FX_CBP_NS = 4,
+    FX_CBP_EX = 5,
+    FX_CBP_SY = 6,
+    FX_CBP_IS = 7,
+    FX_CBP_PR = 8,
+    FX_CBP_PO = 9,
+    FX_CBP_NU = 10,
+    FX_CBP_AL = 11,
+    FX_CBP_ID = 12,
+    FX_CBP_IN = 13,
+    FX_CBP_HY = 14,
+    FX_CBP_BA = 15,
+    FX_CBP_BB = 16,
+    FX_CBP_B2 = 17,
+    FX_CBP_ZW = 18,
+    FX_CBP_CM = 19,
+    FX_CBP_WJ = 20,
+    FX_CBP_H2 = 21,
+    FX_CBP_H3 = 22,
+    FX_CBP_JL = 23,
+    FX_CBP_JV = 24,
+    FX_CBP_JT = 25,
+
+    FX_CBP_BK = 26,
+    FX_CBP_CR = 27,
+    FX_CBP_LF = 28,
+    FX_CBP_NL = 29,
+    FX_CBP_SA = 30,
+    FX_CBP_SG = 31,
+    FX_CBP_CB = 32,
+    FX_CBP_XX = 33,
+    FX_CBP_AI = 34,
+    FX_CBP_SP = 35,
+    FX_CBP_TB = 37,
+    FX_CBP_NONE = 36,
+};
+#define FX_BIDICLASSBITS		6
+#define FX_BIDICLASSBITSMASK	(31 << FX_BIDICLASSBITS)
+enum FX_BIDICLASS {
+    FX_BIDICLASS_ON		= 0,
+    FX_BIDICLASS_L		= 1,
+    FX_BIDICLASS_R		= 2,
+    FX_BIDICLASS_AN		= 3,
+    FX_BIDICLASS_EN		= 4,
+    FX_BIDICLASS_AL		= 5,
+    FX_BIDICLASS_NSM	= 6,
+    FX_BIDICLASS_CS		= 7,
+    FX_BIDICLASS_ES		= 8,
+    FX_BIDICLASS_ET		= 9,
+    FX_BIDICLASS_BN		= 10,
+    FX_BIDICLASS_S		= 11,
+    FX_BIDICLASS_WS		= 12,
+    FX_BIDICLASS_B		= 13,
+    FX_BIDICLASS_RLO	= 14,
+    FX_BIDICLASS_RLE	= 15,
+    FX_BIDICLASS_LRO	= 16,
+    FX_BIDICLASS_LRE	= 17,
+    FX_BIDICLASS_PDF	= 18,
+    FX_BIDICLASS_N		= FX_BIDICLASS_ON,
+};
+#define FX_CHARTYPEBITS		11
+#define FX_CHARTYPEBITSMASK	(15 << FX_CHARTYPEBITS)
+enum FX_CHARTYPE {
+    FX_CHARTYPE_Unknown				= 0,
+    FX_CHARTYPE_Tab					= (1 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_Space				= (2 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_Control				= (3 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_Combination			= (4 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_Numeric				= (5 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_Normal				= (6 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_ArabicAlef			= (7 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_ArabicSpecial		= (8 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_ArabicDistortion	= (9 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_ArabicNormal		= (10 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_ArabicForm			= (11 << FX_CHARTYPEBITS),
+    FX_CHARTYPE_Arabic				= (12 << FX_CHARTYPEBITS),
+};
+typedef struct _FX_CHARPROPERTIES {
+    union {
+        struct {
+            FX_DWORD	dwBreakType		: 6;
+            FX_DWORD	dwBidiClass		: 5;
+            FX_DWORD	dwCharType		: 4;
+            FX_DWORD	dwRotation		: 1;
+            FX_DWORD	dwCJKSpecial	: 1;
+            FX_DWORD	dwVertIndex		: 6;
+            FX_DWORD	dwBidiIndex		: 9;
+        };
+        FX_DWORD	dwCharProps;
+    };
+} FX_CHARPROPERTIES;
+FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch);
+FX_BOOL	FX_IsCtrlCode(FX_WCHAR ch);
+FX_BOOL	FX_IsRotationCode(FX_WCHAR ch);
+FX_BOOL FX_IsCombinationChar(FX_WCHAR wch);
+FX_BOOL	FX_IsBidiChar(FX_WCHAR wch);
+FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical);
+FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_DWORD dwProps, FX_BOOL bRTL, FX_BOOL bVertical);
+#endif
diff --git a/core/include/fxcrt/fx_xml.h b/core/include/fxcrt/fx_xml.h
new file mode 100644
index 0000000..1217677
--- /dev/null
+++ b/core/include/fxcrt/fx_xml.h
@@ -0,0 +1,209 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_XML_H_

+#define _FX_XML_H_

+#ifndef _FX_BASIC_H_

+#include "fx_basic.h"

+#endif

+class CXML_AttrItem : public CFX_Object

+{

+public:

+    CFX_ByteStringL	m_QSpaceName;

+    CFX_ByteStringL	m_AttrName;

+    CFX_WideStringL	m_Value;

+

+    void	Empty(IFX_Allocator* pAllocator = NULL)

+    {

+        m_QSpaceName.Empty(pAllocator);

+        m_AttrName.Empty(pAllocator);

+        m_Value.Empty(pAllocator);

+    }

+};

+class CXML_AttrMap : public CFX_Object

+{

+public:

+    CXML_AttrMap()

+    {

+        m_pMap = NULL;

+    }

+    ~CXML_AttrMap()

+    {

+        RemoveAll(NULL);

+    }

+    const CFX_WideStringL*	Lookup(FX_BSTR space, FX_BSTR name) const;

+    void					SetAt(FX_BSTR space, FX_BSTR name, FX_WSTR value, IFX_Allocator* pAllocator = NULL);

+    void					RemoveAt(FX_BSTR space, FX_BSTR name, IFX_Allocator* pAllocator = NULL);

+    void					RemoveAll(IFX_Allocator* pAllocator = NULL);

+    int						GetSize() const;

+    CXML_AttrItem&			GetAt(int index) const;

+    CFX_ObjectArray<CXML_AttrItem>*	m_pMap;

+};

+class CXML_Content : public CFX_Object

+{

+public:

+    CXML_Content() : m_bCDATA(FALSE), m_Content() {}

+    ~CXML_Content()

+    {

+        Empty(NULL);

+    }

+    void	Empty(IFX_Allocator* pAllocator = NULL)

+    {

+        m_Content.Empty(pAllocator);

+    }

+    void	Set(FX_BOOL bCDATA, FX_WSTR content, IFX_Allocator* pAllocator = NULL)

+    {

+        m_bCDATA = bCDATA;

+        m_Content.Set(content, pAllocator);

+    }

+    FX_BOOL			m_bCDATA;

+    CFX_WideStringL	m_Content;

+};

+class CXML_Element : public CFX_Object

+{

+public:

+

+    static CXML_Element*	Parse(const void* pBuffer, size_t size, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL, IFX_Allocator* pAllocator = NULL);

+

+    static CXML_Element*	Parse(IFX_FileRead *pFile, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL, IFX_Allocator* pAllocator = NULL);

+

+    static CXML_Element*	Parse(IFX_BufferRead *pBuffer, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL, IFX_Allocator* pAllocator = NULL);

+

+    CXML_Element(FX_BSTR qSpace, FX_BSTR tagName, IFX_Allocator* pAllocator = NULL);

+

+    CXML_Element(FX_BSTR qTagName, IFX_Allocator* pAllocator = NULL);

+

+    CXML_Element(IFX_Allocator* pAllocator = NULL);

+

+    ~CXML_Element();

+

+    void	Empty();

+

+

+

+    CFX_ByteString			GetTagName(FX_BOOL bQualified = FALSE) const;

+    void					GetTagName(CFX_ByteStringL &tagName, FX_BOOL bQualified = FALSE) const;

+

+    CFX_ByteString			GetNamespace(FX_BOOL bQualified = FALSE) const;

+    void					GetNamespace(CFX_ByteStringL &nameSpace, FX_BOOL bQualified = FALSE) const;

+

+    CFX_ByteString			GetNamespaceURI(FX_BSTR qName) const;

+    void					GetNamespaceURI(FX_BSTR qName, CFX_ByteStringL &uri) const;

+

+    CXML_Element*			GetParent() const

+    {

+        return m_pParent;

+    }

+

+    FX_DWORD				CountAttrs() const

+    {

+        return m_AttrMap.GetSize();

+    }

+

+    void					GetAttrByIndex(int index, CFX_ByteString &space, CFX_ByteString &name, CFX_WideString &value) const;

+    void					GetAttrByIndex(int index, CFX_ByteStringL &space, CFX_ByteStringL &name, CFX_WideStringL &value) const;

+

+    FX_BOOL					HasAttr(FX_BSTR qName) const;

+

+    FX_BOOL					GetAttrValue(FX_BSTR name, CFX_WideString& attribute) const;

+    CFX_WideString			GetAttrValue(FX_BSTR name) const

+    {

+        CFX_WideString attr;

+        GetAttrValue(name, attr);

+        return attr;

+    }

+    const CFX_WideStringL*	GetAttrValuePtr(FX_BSTR name) const;

+

+    FX_BOOL					GetAttrValue(FX_BSTR space, FX_BSTR name, CFX_WideString& attribute) const;

+    CFX_WideString			GetAttrValue(FX_BSTR space, FX_BSTR name) const

+    {

+        CFX_WideString attr;

+        GetAttrValue(space, name, attr);

+        return attr;

+    }

+    const CFX_WideStringL*	GetAttrValuePtr(FX_BSTR space, FX_BSTR name) const;

+

+    FX_BOOL					GetAttrInteger(FX_BSTR name, int& attribute) const;

+    int						GetAttrInteger(FX_BSTR name) const

+    {

+        int attr = 0;

+        GetAttrInteger(name, attr);

+        return attr;

+    }

+

+    FX_BOOL					GetAttrInteger(FX_BSTR space, FX_BSTR name, int& attribute) const;

+    int						GetAttrInteger(FX_BSTR space, FX_BSTR name) const

+    {

+        int attr = 0;

+        GetAttrInteger(space, name, attr);

+        return attr;

+    }

+

+    FX_BOOL					GetAttrFloat(FX_BSTR name, FX_FLOAT& attribute) const;

+    FX_FLOAT				GetAttrFloat(FX_BSTR name) const

+    {

+        FX_FLOAT attr = 0;

+        GetAttrFloat(name, attr);

+        return attr;

+    }

+

+    FX_BOOL					GetAttrFloat(FX_BSTR space, FX_BSTR name, FX_FLOAT& attribute) const;

+    FX_FLOAT				GetAttrFloat(FX_BSTR space, FX_BSTR name) const

+    {

+        FX_FLOAT attr = 0;

+        GetAttrFloat(space, name, attr);

+        return attr;

+    }

+

+    FX_DWORD				CountChildren() const;

+

+    enum ChildType { Invalid, Element, Content};

+

+    ChildType				GetChildType(FX_DWORD index) const;

+

+    CFX_WideString			GetContent(FX_DWORD index) const;

+    const CFX_WideStringL*	GetContentPtr(FX_DWORD index) const;

+

+    CXML_Element*			GetElement(FX_DWORD index) const;

+

+    CXML_Element*			GetElement(FX_BSTR space, FX_BSTR tag) const

+    {

+        return GetElement(space, tag, 0);

+    }

+

+    FX_DWORD				CountElements(FX_BSTR space, FX_BSTR tag) const;

+

+    CXML_Element*			GetElement(FX_BSTR space, FX_BSTR tag, int index) const;

+

+    FX_DWORD				FindElement(CXML_Element *pChild) const;

+

+

+

+

+    void					SetTag(FX_BSTR qSpace, FX_BSTR tagname);

+

+    void					SetTag(FX_BSTR qTagName);

+

+    void					RemoveChildren();

+

+    void					RemoveChild(FX_DWORD index);

+

+

+protected:

+

+    CXML_Element*			m_pParent;

+

+    CFX_ByteStringL			m_QSpaceName;

+

+    CFX_ByteStringL			m_TagName;

+

+    CXML_AttrMap			m_AttrMap;

+

+    CFX_PtrArray			m_Children;

+    friend class CXML_Parser;

+    friend class CXML_Composer;

+};

+#endif

diff --git a/core/include/fxge/fpf.h b/core/include/fxge/fpf.h
new file mode 100644
index 0000000..99d9b7c
--- /dev/null
+++ b/core/include/fxge/fpf.h
@@ -0,0 +1,55 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef _FX_PALTFORM_DEVICE_H_
+#define _FX_PALTFORM_DEVICE_H_
+class IFPF_DeviceModule;
+class IFPF_FontMgr;
+class IFPF_Font;
+class IFPF_DeviceModule
+{
+public:
+    virtual void				Destroy() = 0;
+    virtual IFPF_FontMgr*		GetFontMgr() = 0;
+};
+IFPF_DeviceModule*	FPF_GetDeviceModule();
+#define FPF_MATCHFONT_REPLACEANSI		1
+FX_DEFINEHANDLE(FPF_HFONT);
+class IFPF_Font
+{
+public:
+    virtual void			Release() = 0;
+    virtual IFPF_Font*		Retain() = 0;
+    virtual FPF_HFONT		GetHandle() = 0;
+    virtual CFX_ByteString	GetFamilyName() = 0;
+    virtual CFX_WideString	GetPsName() = 0;
+    virtual FX_DWORD		GetFontStyle() const = 0;
+    virtual FX_BYTE			GetCharset() const = 0;
+
+    virtual FX_INT32		GetGlyphIndex(FX_WCHAR wUnicode) = 0;
+    virtual FX_INT32		GetGlyphWidth(FX_INT32 iGlyphIndex) = 0;
+
+    virtual FX_INT32		GetAscent() const = 0;
+    virtual FX_INT32		GetDescent() const = 0;
+
+    virtual FX_BOOL			GetGlyphBBox(FX_INT32 iGlyphIndex, FX_RECT &rtBBox) = 0;
+    virtual FX_BOOL			GetBBox(FX_RECT &rtBBox) = 0;
+
+    virtual FX_INT32		GetHeight() const = 0;
+    virtual FX_INT32		GetItalicAngle() const = 0;
+    virtual FX_DWORD		GetFontData(FX_DWORD dwTable, FX_LPBYTE pBuffer, FX_DWORD dwSize) = 0;
+};
+class IFPF_FontMgr
+{
+public:
+    virtual void			LoadSystemFonts() = 0;
+    virtual void			LoadPrivateFont(IFX_FileRead* pFontFile) = 0;
+    virtual void			LoadPrivateFont(FX_BSTR bsFileName) = 0;
+    virtual void			LoadPrivateFont(FX_LPVOID pBuffer, size_t szBuffer) = 0;
+
+    virtual IFPF_Font*		CreateFont(FX_BSTR bsFamilyname, FX_BYTE charset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0) = 0;
+};
+#endif
diff --git a/core/include/fxge/fx_dib.h b/core/include/fxge/fx_dib.h
new file mode 100644
index 0000000..7aa3bf8
--- /dev/null
+++ b/core/include/fxge/fx_dib.h
@@ -0,0 +1,606 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FPDF_DIB_H_

+#define _FPDF_DIB_H_

+#ifndef _FXCRT_EXTENSION_

+#include "../fxcrt/fx_ext.h"

+#endif

+enum FXDIB_Format {

+    FXDIB_Invalid = 0,

+    FXDIB_1bppMask = 0x101,

+    FXDIB_1bppRgb = 0x001,

+    FXDIB_1bppCmyk = 0x401,

+    FXDIB_8bppMask = 0x108,

+    FXDIB_8bppRgb = 0x008,

+    FXDIB_8bppRgba = 0x208,

+    FXDIB_8bppCmyk = 0x408,

+    FXDIB_8bppCmyka = 0x608,

+    FXDIB_Rgb = 0x018,

+    FXDIB_Rgba = 0x218,

+    FXDIB_Rgb32 = 0x020,

+    FXDIB_Argb = 0x220,

+    FXDIB_Cmyk = 0x420,

+    FXDIB_Cmyka = 0x620,

+};

+enum FXDIB_Channel {

+    FXDIB_Red = 1,

+    FXDIB_Green,

+    FXDIB_Blue,

+    FXDIB_Cyan,

+    FXDIB_Magenta,

+    FXDIB_Yellow,

+    FXDIB_Black,

+    FXDIB_Alpha

+};

+#define FXDIB_DOWNSAMPLE		0x04

+#define FXDIB_INTERPOL			0x20

+#define FXDIB_BICUBIC_INTERPOL  0x80

+#define FXDIB_NOSMOOTH			0x100

+#define FXDIB_PALETTE_LOC		0x01

+#define FXDIB_PALETTE_WIN		0x02

+#define FXDIB_PALETTE_MAC		0x04

+#define FXDIB_BLEND_NORMAL			0

+#define FXDIB_BLEND_MULTIPLY		1

+#define FXDIB_BLEND_SCREEN			2

+#define FXDIB_BLEND_OVERLAY			3

+#define FXDIB_BLEND_DARKEN			4

+#define FXDIB_BLEND_LIGHTEN			5

+

+#define FXDIB_BLEND_COLORDODGE		6

+#define FXDIB_BLEND_COLORBURN		7

+#define FXDIB_BLEND_HARDLIGHT		8

+#define FXDIB_BLEND_SOFTLIGHT		9

+#define FXDIB_BLEND_DIFFERENCE		10

+#define FXDIB_BLEND_EXCLUSION		11

+#define FXDIB_BLEND_NONSEPARABLE	21

+#define FXDIB_BLEND_HUE				21

+#define FXDIB_BLEND_SATURATION		22

+#define FXDIB_BLEND_COLOR			23

+#define FXDIB_BLEND_LUMINOSITY		24

+#define FXDIB_BLEND_UNSUPPORTED		-1

+typedef FX_DWORD	FX_ARGB;

+typedef FX_DWORD	FX_COLORREF;

+typedef FX_DWORD	FX_CMYK;

+class CFX_ClipRgn;

+class CFX_DIBSource;

+class CFX_DIBitmap;

+#define FXSYS_RGB(r, g, b)  ((r) | ((g) << 8) | ((b) << 16))

+#define FXSYS_GetRValue(rgb) ((rgb) & 0xff)

+#define FXSYS_GetGValue(rgb) (((rgb) >> 8) & 0xff)

+#define FXSYS_GetBValue(rgb) (((rgb) >> 16) & 0xff)

+#define FX_CCOLOR(val) (255-(val))

+#define FXSYS_CMYK(c, m, y, k) (((c) << 24) | ((m) << 16) | ((y) << 8) | (k))

+#define FXSYS_GetCValue(cmyk) ((FX_BYTE)((cmyk) >> 24) & 0xff)

+#define FXSYS_GetMValue(cmyk) ((FX_BYTE)((cmyk) >> 16) & 0xff)

+#define FXSYS_GetYValue(cmyk) ((FX_BYTE)((cmyk) >> 8) & 0xff)

+#define FXSYS_GetKValue(cmyk) ((FX_BYTE)(cmyk) & 0xff)

+void CmykDecode(FX_CMYK cmyk, int& c, int& m, int& y, int& k);

+inline FX_CMYK CmykEncode(int c, int m, int y, int k)

+{

+    return (c << 24) | (m << 16) | (y << 8) | k;

+}

+void ArgbDecode(FX_ARGB argb, int& a, int& r, int&g, int& b);

+void ArgbDecode(FX_ARGB argb, int& a, FX_COLORREF& rgb);

+inline FX_ARGB ArgbEncode(int a, int r, int g, int b)

+{

+    return (a << 24) | (r << 16) | (g << 8) | b;

+}

+FX_ARGB ArgbEncode(int a, FX_COLORREF rgb);

+#define FXARGB_A(argb) ((FX_BYTE)((argb) >> 24))

+#define FXARGB_R(argb) ((FX_BYTE)((argb) >> 16))

+#define FXARGB_G(argb) ((FX_BYTE)((argb) >> 8))

+#define FXARGB_B(argb) ((FX_BYTE)(argb))

+#define FXARGB_MAKE(a,r,g,b) (((FX_DWORD)(a) << 24) | ((r) << 16) | ((g) << 8) | (b))

+#define FXARGB_MUL_ALPHA(argb, alpha) (((((argb) >> 24) * (alpha) / 255) << 24) | ((argb) & 0xffffff))

+#define FXRGB2GRAY(r,g,b) (((b) * 11 + (g) * 59 + (r) * 30) / 100)

+#define FXCMYK2GRAY(c,m,y,k) (((255-(c)) * (255-(k)) * 30 + (255-(m)) * (255-(k)) * 59 + (255-(y)) * (255-(k)) * 11) / 25500)

+#define FXDIB_ALPHA_MERGE(backdrop, source, source_alpha) (((backdrop) * (255-(source_alpha)) + (source)*(source_alpha))/255)

+#define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest)*(src)/255)

+#define FXCMYK_GETDIB(p) ((((FX_LPBYTE)(p))[0] << 24 | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | ((FX_LPBYTE)(p))[3]))

+#define FXCMYK_SETDIB(p, cmyk)  ((FX_LPBYTE)(p))[0] = (FX_BYTE)((cmyk) >> 24), \

+        ((FX_LPBYTE)(p))[1] = (FX_BYTE)((cmyk) >> 16), \

+                              ((FX_LPBYTE)(p))[2] = (FX_BYTE)((cmyk) >> 8), \

+                                      ((FX_LPBYTE)(p))[3] = (FX_BYTE)(cmyk))

+#define FXARGB_GETDIB(p) (((FX_LPBYTE)(p))[0]) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[3] << 24)

+#define FXARGB_SETDIB(p, argb) ((FX_LPBYTE)(p))[0] = (FX_BYTE)(argb), \

+        ((FX_LPBYTE)(p))[1] = (FX_BYTE)((argb) >> 8), \

+                              ((FX_LPBYTE)(p))[2] = (FX_BYTE)((argb) >> 16), \

+                                      ((FX_LPBYTE)(p))[3] = (FX_BYTE)((argb) >> 24)

+#define FXARGB_COPY(dest, src) *(FX_LPBYTE)(dest) = *(FX_LPBYTE)(src), \

+        *((FX_LPBYTE)(dest)+1) = *((FX_LPBYTE)(src)+1), \

+                                 *((FX_LPBYTE)(dest)+2) = *((FX_LPBYTE)(src)+2), \

+                                         *((FX_LPBYTE)(dest)+3) = *((FX_LPBYTE)(src)+3)

+#define FXCMYK_COPY(dest, src)  *(FX_LPBYTE)(dest) = *(FX_LPBYTE)(src), \

+        *((FX_LPBYTE)(dest)+1) = *((FX_LPBYTE)(src)+1), \

+                                 *((FX_LPBYTE)(dest)+2) = *((FX_LPBYTE)(src)+2), \

+                                         *((FX_LPBYTE)(dest)+3) = *((FX_LPBYTE)(src)+3)

+#define FXARGB_SETRGBORDERDIB(p, argb) ((FX_LPBYTE)(p))[3] = (FX_BYTE)(argb>>24), \

+        ((FX_LPBYTE)(p))[0] = (FX_BYTE)((argb) >> 16), \

+                              ((FX_LPBYTE)(p))[1] = (FX_BYTE)((argb) >> 8), \

+                                      ((FX_LPBYTE)(p))[2] = (FX_BYTE)(argb)

+#define FXARGB_GETRGBORDERDIB(p) (((FX_LPBYTE)(p))[2]) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0] << 16) | (((FX_LPBYTE)(p))[3] << 24)

+#define FXARGB_RGBORDERCOPY(dest, src) *((FX_LPBYTE)(dest)+3) = *((FX_LPBYTE)(src)+3), \

+        *(FX_LPBYTE)(dest) = *((FX_LPBYTE)(src)+2), \

+                             *((FX_LPBYTE)(dest)+1) = *((FX_LPBYTE)(src)+1), \

+                                     *((FX_LPBYTE)(dest)+2) = *((FX_LPBYTE)(src))

+#define FXARGB_TODIB(argb) (argb)

+#define FXCMYK_TODIB(cmyk) ((FX_BYTE)((cmyk) >> 24) | ((FX_BYTE)((cmyk) >> 16)) << 8 | ((FX_BYTE)((cmyk) >> 8)) << 16 | ((FX_BYTE)(cmyk) << 24))

+#define FXARGB_TOBGRORDERDIB(argb) ((FX_BYTE)(argb>>16) | ((FX_BYTE)(argb>>8)) << 8 | ((FX_BYTE)(argb)) << 16 | ((FX_BYTE)(argb>>24) << 24))

+#define FXGETFLAG_COLORTYPE(flag)			(FX_BYTE)((flag)>>8)

+#define FXGETFLAG_ALPHA_FILL(flag)			(FX_BYTE)(flag)

+#define FXGETFLAG_ALPHA_STROKE(flag)		(FX_BYTE)((flag)>>16)

+#define FXSETFLAG_COLORTYPE(flag, val)		flag = (((val)<<8)|(flag&0xffff00ff))

+#define FXSETFLAG_ALPHA_FILL(flag, val)		flag = ((val)|(flag&0xffffff00))

+#define FXSETFLAG_ALPHA_STROKE(flag, val)	flag = (((val)<<16)|(flag&0xff00ffff))

+class CFX_DIBSource : public CFX_Object

+{

+public:

+

+    virtual			~CFX_DIBSource();

+

+

+

+    int				GetWidth() const

+    {

+        return m_Width;

+    }

+

+    int				GetHeight() const

+    {

+        return m_Height;

+    }

+

+    FXDIB_Format	GetFormat() const

+    {

+        return (FXDIB_Format)(m_AlphaFlag * 0x100 + m_bpp);

+    }

+

+    FX_DWORD		GetPitch() const

+    {

+        return m_Pitch;

+    }

+

+    FX_DWORD*		GetPalette() const

+    {

+        return m_pPalette;

+    }

+

+

+

+    virtual	FX_LPBYTE	GetBuffer() const

+    {

+        return NULL;

+    }

+

+    virtual FX_LPCBYTE	GetScanline(int line) const = 0;

+

+    virtual FX_BOOL		SkipToScanline(int line, IFX_Pause* pPause) const

+    {

+        return FALSE;

+    }

+

+    virtual void		DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp,

+                                           int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const = 0;

+

+    virtual void		SetDownSampleSize(int width, int height) const {}

+

+    int				GetBPP() const

+    {

+        return m_bpp;

+    }

+

+    FX_BOOL			IsAlphaMask() const

+    {

+        return m_AlphaFlag == 1;

+    }

+

+    FX_BOOL			HasAlpha() const

+    {

+        return m_AlphaFlag & 2 ? TRUE : FALSE;

+    }

+

+    FX_BOOL			IsOpaqueImage() const

+    {

+        return !(m_AlphaFlag & 3);

+    }

+

+    FX_BOOL			IsCmykImage() const

+    {

+        return m_AlphaFlag & 4 ? TRUE : FALSE;

+    }

+

+

+

+    int				GetPaletteSize() const

+    {

+        return IsAlphaMask() ? 0 : (m_bpp == 1 ? 2 : (m_bpp == 8 ? 256 : 0));

+    }

+

+    FX_DWORD		GetPaletteEntry(int index) const;

+

+    void			SetPaletteEntry(int index, FX_DWORD color);

+    FX_DWORD		GetPaletteArgb(int index) const

+    {

+        return GetPaletteEntry(index);

+    }

+    void			SetPaletteArgb(int index, FX_DWORD color)

+    {

+        SetPaletteEntry(index, color);

+    }

+

+    void			CopyPalette(const FX_DWORD* pSrcPal, FX_DWORD size = 256);

+

+

+    CFX_DIBitmap*	Clone(const FX_RECT* pClip = NULL) const;

+

+    CFX_DIBitmap*	CloneConvert(FXDIB_Format format, const FX_RECT* pClip = NULL, void* pIccTransform = NULL) const;

+

+    CFX_DIBitmap*	StretchTo(int dest_width, int dest_height, FX_DWORD flags = 0, const FX_RECT* pClip = NULL) const;

+

+

+    CFX_DIBitmap*	TransformTo(const CFX_AffineMatrix* pMatrix, int& left, int &top,

+                                FX_DWORD flags = 0, const FX_RECT* pClip = NULL) const;

+

+    CFX_DIBitmap*	GetAlphaMask(const FX_RECT* pClip = NULL) const;

+

+    FX_BOOL			CopyAlphaMask(const CFX_DIBSource* pAlphaMask, const FX_RECT* pClip = NULL);

+

+    CFX_DIBitmap*	SwapXY(FX_BOOL bXFlip, FX_BOOL bYFlip, const FX_RECT* pClip = NULL) const;

+

+    CFX_DIBitmap*	FlipImage(FX_BOOL bXFlip, FX_BOOL bYFlip) const;

+

+    void			GetOverlapRect(int& dest_left, int& dest_top, int& width, int& height, int src_width,

+                                   int src_height, int& src_left, int& src_top, const CFX_ClipRgn* pClipRgn);

+

+    CFX_DIBitmap*	m_pAlphaMask;

+protected:

+

+    CFX_DIBSource();

+

+    int				m_Width;

+

+    int				m_Height;

+

+    int				m_bpp;

+

+    FX_DWORD		m_AlphaFlag;

+

+    FX_DWORD		m_Pitch;

+

+    FX_DWORD*		m_pPalette;

+

+    void			BuildPalette();

+

+    FX_BOOL			BuildAlphaMask();

+

+    int				FindPalette(FX_DWORD color) const;

+

+    void			GetPalette(FX_DWORD* pal, int alpha) const;

+};

+class CFX_DIBitmap : public CFX_DIBSource

+{

+public:

+

+    virtual ~CFX_DIBitmap();

+

+    CFX_DIBitmap();

+

+    CFX_DIBitmap(const CFX_DIBitmap& src);

+

+    FX_BOOL			Create(int width, int height, FXDIB_Format format, FX_LPBYTE pBuffer = NULL, int pitch = 0);

+

+    FX_BOOL			Copy(const CFX_DIBSource* pSrc);

+

+    virtual	FX_LPBYTE	GetBuffer() const

+    {

+        return m_pBuffer;

+    }

+

+    virtual FX_LPCBYTE	GetScanline(int line) const

+    {

+        return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL;

+    }

+

+    virtual void	DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp,

+                                       int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const;

+

+    void			TakeOver(CFX_DIBitmap* pSrcBitmap);

+

+    FX_BOOL			ConvertFormat(FXDIB_Format format, void* pIccTransform = NULL);

+

+    void			Clear(FX_DWORD color);

+

+    FX_DWORD		GetPixel(int x, int y) const;

+

+    void			SetPixel(int x, int y, FX_DWORD color);

+

+    FX_BOOL			LoadChannel(FXDIB_Channel destChannel, const CFX_DIBSource* pSrcBitmap, FXDIB_Channel srcChannel);

+

+    FX_BOOL			LoadChannel(FXDIB_Channel destChannel, int value);

+

+    FX_BOOL			MultiplyAlpha(int alpha);

+

+    FX_BOOL			MultiplyAlpha(const CFX_DIBSource* pAlphaMask);

+

+    FX_BOOL			TransferBitmap(int dest_left, int dest_top, int width, int height,

+                                   const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform = NULL);

+

+    FX_BOOL			CompositeBitmap(int dest_left, int dest_top, int width, int height,

+                                    const CFX_DIBSource* pSrcBitmap, int src_left, int src_top,

+                                    int blend_type = FXDIB_BLEND_NORMAL, const CFX_ClipRgn* pClipRgn = NULL, FX_BOOL bRgbByteOrder = FALSE, void* pIccTransform = NULL);

+

+    FX_BOOL			TransferMask(int dest_left, int dest_top, int width, int height,

+                                 const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top, int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			CompositeMask(int dest_left, int dest_top, int width, int height,

+                                  const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top,

+                                  int blend_type = FXDIB_BLEND_NORMAL, const CFX_ClipRgn* pClipRgn = NULL, FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			CompositeRect(int dest_left, int dest_top, int width, int height, FX_DWORD color, int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			ConvertColorScale(FX_DWORD forecolor, FX_DWORD backcolor);

+

+    FX_BOOL			DitherFS(const FX_DWORD* pPalette, int pal_size, const FX_RECT* pRect = NULL);

+protected:

+

+    FX_LPBYTE		m_pBuffer;

+

+    FX_BOOL			m_bExtBuf;

+

+    FX_BOOL			GetGrayData(void* pIccTransform = NULL);

+};

+class CFX_DIBExtractor : public CFX_Object

+{

+public:

+

+    CFX_DIBExtractor(const CFX_DIBSource* pSrc);

+

+    ~CFX_DIBExtractor();

+

+    operator CFX_DIBitmap*()

+    {

+        return m_pBitmap;

+    }

+private:

+

+    CFX_DIBitmap*			m_pBitmap;

+};

+typedef CFX_CountRef<CFX_DIBitmap> CFX_DIBitmapRef;

+class CFX_FilteredDIB : public CFX_DIBSource

+{

+public:

+

+    CFX_FilteredDIB();

+

+    ~CFX_FilteredDIB();

+

+    void					LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc = FALSE);

+

+    virtual FXDIB_Format	GetDestFormat() = 0;

+

+    virtual FX_DWORD*		GetDestPalette() = 0;

+

+

+    virtual void			TranslateScanline(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf) const = 0;

+

+    virtual void			TranslateDownSamples(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels, int Bpp) const = 0;

+protected:

+    virtual FX_LPCBYTE		GetScanline(int line) const;

+    virtual void			DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp,

+            int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const;

+

+    const CFX_DIBSource*	m_pSrc;

+

+    FX_BOOL					m_bAutoDropSrc;

+

+    FX_LPBYTE				m_pScanline;

+};

+class IFX_ScanlineComposer

+{

+public:

+

+    virtual	void		ComposeScanline(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha = NULL) = 0;

+

+

+    virtual FX_BOOL		SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette) = 0;

+};

+class CFX_ScanlineCompositor : public CFX_Object

+{

+public:

+

+    CFX_ScanlineCompositor();

+

+    ~CFX_ScanlineCompositor();

+

+    FX_BOOL				Init(FXDIB_Format dest_format, FXDIB_Format src_format, FX_INT32 width, FX_DWORD* pSrcPalette,

+                             FX_DWORD mask_color, int blend_type, FX_BOOL bClip, FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL);

+

+

+    void				CompositeRgbBitmapLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int width, FX_LPCBYTE clip_scan,

+            FX_LPCBYTE src_extra_alpha = NULL, FX_LPBYTE dst_extra_alpha = NULL);

+

+

+    void				CompositePalBitmapLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int src_left, int width, FX_LPCBYTE clip_scan,

+            FX_LPCBYTE src_extra_alpha = NULL, FX_LPBYTE dst_extra_alpha = NULL);

+

+

+    void				CompositeByteMaskLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int width, FX_LPCBYTE clip_scan,

+            FX_LPBYTE dst_extra_alpha = NULL);

+

+

+    void				CompositeBitMaskLine(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int src_left, int width, FX_LPCBYTE clip_scan,

+            FX_LPBYTE dst_extra_alpha = NULL);

+protected:

+    int					m_Transparency;

+    FXDIB_Format		m_SrcFormat,

+                        m_DestFormat;

+    FX_DWORD*			m_pSrcPalette;

+

+    int					m_MaskAlpha,

+                        m_MaskRed,

+                        m_MaskGreen,

+                        m_MaskBlue,

+                        m_MaskBlack;

+    int					m_BlendType;

+    void*				m_pIccTransform;

+    FX_LPBYTE			m_pCacheScanline;

+    int					m_CacheSize;

+    FX_BOOL             m_bRgbByteOrder;

+};

+class CFX_BitmapComposer : public IFX_ScanlineComposer, public CFX_Object

+{

+public:

+

+    CFX_BitmapComposer();

+

+    ~CFX_BitmapComposer();

+

+

+    void				Compose(CFX_DIBitmap* pDest, const CFX_ClipRgn* pClipRgn, int bitmap_alpha,

+                                FX_DWORD mask_color, FX_RECT& dest_rect, FX_BOOL bVertical,

+                                FX_BOOL bFlipX, FX_BOOL bFlipY, FX_BOOL bRgbByteOrder = FALSE,

+                                int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);

+

+    virtual FX_BOOL		SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette);

+

+

+    virtual	void		ComposeScanline(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha);

+protected:

+

+    void				DoCompose(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int dest_width, FX_LPCBYTE clip_scan,

+                                  FX_LPCBYTE src_extra_alpha = NULL, FX_LPBYTE dst_extra_alpha = NULL);

+    CFX_DIBitmap*		m_pBitmap;

+    const CFX_ClipRgn*	m_pClipRgn;

+    FXDIB_Format		m_SrcFormat;

+    int					m_DestLeft, m_DestTop, m_DestWidth, m_DestHeight, m_BitmapAlpha;

+    FX_DWORD			m_MaskColor;

+    const CFX_DIBitmap*	m_pClipMask;

+    CFX_ScanlineCompositor	m_Compositor;

+    FX_BOOL				m_bVertical, m_bFlipX, m_bFlipY;

+    int					m_AlphaFlag;

+    void*				m_pIccTransform;

+    FX_BOOL             m_bRgbByteOrder;

+    int					m_BlendType;

+    void				ComposeScanlineV(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha = NULL);

+    FX_LPBYTE			m_pScanlineV, m_pClipScanV, m_pAddClipScan, m_pScanlineAlphaV;

+};

+class CFX_BitmapStorer : public IFX_ScanlineComposer, public CFX_Object

+{

+public:

+

+    CFX_BitmapStorer();

+

+    ~CFX_BitmapStorer();

+

+    virtual	void		ComposeScanline(int line, FX_LPCBYTE scanline, FX_LPCBYTE scan_extra_alpha);

+

+    virtual FX_BOOL		SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette);

+

+    CFX_DIBitmap*		GetBitmap()

+    {

+        return m_pBitmap;

+    }

+

+    CFX_DIBitmap*		Detach();

+

+    void				Replace(CFX_DIBitmap* pBitmap);

+private:

+    CFX_DIBitmap*		m_pBitmap;

+};

+class CStretchEngine;

+class CFX_ImageStretcher : public CFX_Object

+{

+public:

+

+    CFX_ImageStretcher();

+

+    ~CFX_ImageStretcher();

+

+    FX_INT32		Start(IFX_ScanlineComposer* pDest, const CFX_DIBSource* pBitmap,

+                          int dest_width, int dest_height, const FX_RECT& bitmap_rect, FX_DWORD flags);

+

+

+    FX_INT32		Continue(IFX_Pause* pPause);

+    IFX_ScanlineComposer*	m_pDest;

+    const CFX_DIBSource*	m_pSource;

+    CStretchEngine*		m_pStretchEngine;

+    FX_DWORD		m_Flags;

+    FX_BOOL			m_bFlipX,

+                    m_bFlipY;

+    int				m_DestWidth,

+                    m_DestHeight;

+    FX_RECT			m_ClipRect;

+    int				m_LineIndex;

+    int				m_DestBPP;

+    FX_LPBYTE		m_pScanline;

+    FX_LPBYTE       m_pMaskScanline;

+    FXDIB_Format	m_DestFormat;

+    FX_INT32		m_Status;

+

+    FX_INT32		StartQuickStretch();

+

+    FX_INT32		StartStretch();

+

+    FX_INT32		ContinueQuickStretch(IFX_Pause* pPause);

+

+    FX_INT32		ContinueStretch(IFX_Pause* pPause);

+};

+class CFX_ImageTransformer : public CFX_Object

+{

+public:

+

+    CFX_ImageTransformer();

+

+    ~CFX_ImageTransformer();

+

+    FX_INT32	Start(const CFX_DIBSource* pSrc, const CFX_AffineMatrix* pMatrix, int flags, const FX_RECT* pClip);

+

+

+    FX_INT32	Continue(IFX_Pause* pPause);

+    CFX_AffineMatrix* m_pMatrix;

+    FX_RECT		m_StretchClip;

+    int			m_ResultLeft, m_ResultTop, m_ResultWidth, m_ResultHeight;

+    CFX_AffineMatrix	m_dest2stretch;

+    CFX_ImageStretcher	m_Stretcher;

+    CFX_BitmapStorer	m_Storer;

+    FX_DWORD	m_Flags;

+    int			m_Status;

+};

+class CFX_ImageRenderer : public CFX_Object

+{

+public:

+

+    CFX_ImageRenderer();

+

+    ~CFX_ImageRenderer();

+

+    FX_INT32			Start(CFX_DIBitmap* pDevice, const CFX_ClipRgn* pClipRgn,

+                              const CFX_DIBSource* pSource, int bitmap_alpha,

+                              FX_DWORD mask_color, const CFX_AffineMatrix* pMatrix, FX_DWORD dib_flags,

+                              FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL,

+                              int blend_type = FXDIB_BLEND_NORMAL);

+

+    FX_INT32			Continue(IFX_Pause* pPause);

+protected:

+    CFX_DIBitmap*		m_pDevice;

+    const CFX_ClipRgn*	m_pClipRgn;

+    int					m_BitmapAlpha;

+    FX_DWORD			m_MaskColor;

+    CFX_AffineMatrix	m_Matrix;

+    CFX_ImageTransformer*	m_pTransformer;

+    CFX_ImageStretcher	m_Stretcher;

+    CFX_BitmapComposer	m_Composer;

+    int					m_Status;

+    int					m_DestLeft, m_DestTop;

+    FX_RECT				m_ClipBox;

+    FX_DWORD			m_Flags;

+    int					m_AlphaFlag;

+    void*				m_pIccTransform;

+    FX_BOOL				m_bRgbByteOrder;

+    int					m_BlendType;

+};

+#endif

diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h
new file mode 100644
index 0000000..abfa9b8
--- /dev/null
+++ b/core/include/fxge/fx_font.h
@@ -0,0 +1,428 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_FONT_H_

+#define _FX_FONT_H_

+#ifndef _FXCRT_EXTENSION_

+#include "../../include/fxcrt/fx_ext.h"

+#endif

+#ifndef _FX_DIB_H_

+#include "fx_dib.h"

+#endif

+typedef struct FT_FaceRec_* FXFT_Face;

+typedef void* FXFT_Library;

+class IFX_FontEncoding;

+class CFX_PathData;

+class CFX_SubstFont;

+class CFX_FaceCache;

+class IFX_FontMapper;

+class CFX_FontMapper;

+class IFX_SystemFontInfo;

+class CFontFileFaceInfo;

+#define FXFONT_FIXED_PITCH		0x01

+#define FXFONT_SERIF			0x02

+#define FXFONT_SYMBOLIC			0x04

+#define FXFONT_SCRIPT			0x08

+#define FXFONT_ITALIC			0x40

+#define FXFONT_BOLD				0x40000

+#define FXFONT_USEEXTERNATTR	0x80000

+#define FXFONT_CIDFONT			0x100000

+#define FXFONT_ANSI_CHARSET		0

+#define FXFONT_DEFAULT_CHARSET	1

+#define FXFONT_SYMBOL_CHARSET	2

+#define FXFONT_SHIFTJIS_CHARSET	128

+#define FXFONT_HANGEUL_CHARSET	129

+#define FXFONT_GB2312_CHARSET	134

+#define FXFONT_CHINESEBIG5_CHARSET	136

+#define FXFONT_THAI_CHARSET		222

+#define FXFONT_EASTEUROPE_CHARSET	238

+#define FXFONT_RUSSIAN_CHARSET	204

+#define FXFONT_GREEK_CHARSET	161

+#define FXFONT_TURKISH_CHARSET	162

+#define FXFONT_HEBREW_CHARSET	177

+#define FXFONT_ARABIC_CHARSET	178

+#define FXFONT_BALTIC_CHARSET	186

+#define FXFONT_FF_FIXEDPITCH	1

+#define FXFONT_FF_ROMAN			(1<<4)

+#define FXFONT_FF_SCRIPT		(4<<4)

+#define FXFONT_FW_NORMAL		400

+#define FXFONT_FW_BOLD			700

+class CFX_Font : public CFX_Object

+{

+public:

+    CFX_Font();

+    ~CFX_Font();

+

+    FX_BOOL					LoadSubst(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,

+                                      int weight, int italic_angle, int CharsetCP, FX_BOOL bVertical = FALSE);

+

+    FX_BOOL					LoadEmbedded(FX_LPCBYTE data, FX_DWORD size);

+

+    FX_BOOL					LoadFile(IFX_FileRead* pFile);

+

+    FXFT_Face				GetFace() const

+    {

+        return m_Face;

+    }

+

+

+    const CFX_SubstFont*	GetSubstFont() const

+    {

+        return m_pSubstFont;

+    }

+

+    CFX_PathData*			LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0);

+

+    int						GetGlyphWidth(FX_DWORD glyph_index);

+

+    int						GetAscent() const;

+

+    int						GetDescent() const;

+

+    FX_BOOL                 GetGlyphBBox(FX_DWORD glyph_index, FX_RECT &bbox);

+

+    FX_BOOL                 IsItalic();

+

+    FX_BOOL                 IsBold();

+

+    FX_BOOL                 IsFixedWidth();

+

+    FX_BOOL					IsVertical() const

+    {

+        return m_bVertical;

+    }

+

+    CFX_WideString          GetPsName() const;

+

+

+    CFX_ByteString          GetFamilyName() const;

+

+    CFX_ByteString          GetFaceName() const;

+

+

+    FX_BOOL                 IsTTFont();

+

+    FX_BOOL                 GetBBox(FX_RECT &bbox);

+

+    int                     GetHeight();

+

+    int                     GetULPos();

+

+    int                     GetULthickness();

+

+    int                     GetMaxAdvanceWidth();

+

+    FXFT_Face				m_Face;

+

+    CFX_SubstFont*			m_pSubstFont;

+    FX_BOOL					IsEmbedded()

+    {

+        return m_bEmbedded;

+    }

+

+    void					AdjustMMParams(int glyph_index, int width, int weight);

+    FX_LPBYTE				m_pFontDataAllocation;

+    FX_LPBYTE               m_pFontData;

+    FX_LPBYTE				m_pGsubData;

+    FX_DWORD                m_dwSize;

+    CFX_BinaryBuf           m_OtfFontData;

+    void*                   m_hHandle;

+    void*                   m_pPlatformFont;

+    void*                   m_pPlatformFontCollection;

+    void*                   m_pDwFont;

+    FX_BOOL                 m_bDwLoaded;

+    void                    ReleasePlatformResource();

+

+    void					DeleteFace();

+protected:

+

+    FX_BOOL					m_bEmbedded;

+    FX_BOOL					m_bVertical;

+    void*					m_pOwnedStream;

+};

+#define ENCODING_INTERNAL		0

+#define ENCODING_UNICODE		1

+class IFX_FontEncoding : public CFX_Object

+{

+public:

+    virtual ~IFX_FontEncoding() {}

+

+    virtual FX_DWORD		GlyphFromCharCode(FX_DWORD charcode) = 0;

+

+    virtual CFX_WideString	UnicodeFromCharCode(FX_DWORD charcode) const = 0;

+

+    virtual FX_DWORD		CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;

+};

+IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont);

+#define FXFONT_SUBST_MM				0x01

+#define FXFONT_SUBST_GLYPHPATH		0x04

+#define FXFONT_SUBST_CLEARTYPE		0x08

+#define FXFONT_SUBST_TRANSFORM		0x10

+#define FXFONT_SUBST_NONSYMBOL		0x20

+#define FXFONT_SUBST_EXACT			0x40

+#define FXFONT_SUBST_STANDARD		0x80

+class CFX_SubstFont : public CFX_Object

+{

+public:

+

+    CFX_SubstFont();

+

+    FX_LPVOID				m_ExtHandle;

+

+    CFX_ByteString			m_Family;

+

+    int						m_Charset;

+

+    FX_DWORD				m_SubstFlags;

+

+    int						m_Weight;

+

+    int						m_ItalicAngle;

+

+    FX_BOOL					m_bSubstOfCJK;

+

+    int						m_WeightCJK;

+

+    FX_BOOL					m_bItlicCJK;

+};

+#define FX_FONT_FLAG_SERIF              0x01

+#define FX_FONT_FLAG_FIXEDPITCH			0x02

+#define FX_FONT_FLAG_ITALIC				0x04

+#define FX_FONT_FLAG_BOLD				0x08

+#define FX_FONT_FLAG_SYMBOLIC_SYMBOL	0x10

+#define FX_FONT_FLAG_SYMBOLIC_DINGBATS	0x20

+#define FX_FONT_FLAG_MULTIPLEMASTER		0x40

+typedef struct {

+    FX_LPCBYTE	m_pFontData;

+    FX_DWORD	m_dwSize;

+} FoxitFonts;

+class CFX_FontMgr : public CFX_Object

+{

+public:

+    CFX_FontMgr();

+    ~CFX_FontMgr();

+    void			InitFTLibrary();

+    FXFT_Face		GetCachedFace(const CFX_ByteString& face_name,

+                                  int weight, FX_BOOL bItalic, FX_LPBYTE& pFontData);

+    FXFT_Face		AddCachedFace(const CFX_ByteString& face_name,

+                                  int weight, FX_BOOL bItalic, FX_LPBYTE pData, FX_DWORD size, int face_index);

+    FXFT_Face		GetCachedTTCFace(int ttc_size, FX_DWORD checksum,

+                                     int font_offset, FX_LPBYTE& pFontData);

+    FXFT_Face		AddCachedTTCFace(int ttc_size, FX_DWORD checksum,

+                                     FX_LPBYTE pData, FX_DWORD size, int font_offset);

+    FXFT_Face		GetFileFace(FX_LPCSTR filename, int face_index);

+    FXFT_Face		GetFixedFace(FX_LPCBYTE pData, FX_DWORD size, int face_index);

+    void			ReleaseFace(FXFT_Face face);

+    void			SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);

+    FXFT_Face		FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,

+                                  int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont);

+

+    void			FreeCache();

+

+    FX_BOOL			GetStandardFont(FX_LPCBYTE& pFontData, FX_DWORD& size, int index);

+    CFX_FontMapper*	m_pBuiltinMapper;

+    IFX_FontMapper*	m_pExtMapper;

+    CFX_MapByteStringToPtr	m_FaceMap;

+    FXFT_Library	m_FTLibrary;

+    FoxitFonts m_ExternalFonts[16];

+};

+class IFX_FontMapper : public CFX_Object

+{

+public:

+

+    virtual ~IFX_FontMapper() {}

+

+    virtual FXFT_Face	FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,

+                                      int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont) = 0;

+

+    CFX_FontMgr*		m_pFontMgr;

+};

+class IFX_FontEnumerator

+{

+public:

+

+    virtual void		HitFont() = 0;

+

+    virtual void		Finish() = 0;

+};

+class IFX_AdditionalFontEnum

+{

+public:

+    virtual int  CountFiles() = 0;

+    virtual IFX_FileStream* GetFontFile(int index) = 0;

+};

+class CFX_FontMapper : public IFX_FontMapper

+{

+public:

+    CFX_FontMapper();

+    virtual ~CFX_FontMapper();

+    void				SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);

+    IFX_SystemFontInfo*	GetSystemFontInfo()

+    {

+        return m_pFontInfo;

+    }

+    void				AddInstalledFont(const CFX_ByteString& name, int charset);

+    void				LoadInstalledFonts();

+    CFX_ByteStringArray	m_InstalledTTFonts;

+    void				SetFontEnumerator(IFX_FontEnumerator* pFontEnumerator)

+    {

+        m_pFontEnumerator = pFontEnumerator;

+    }

+    IFX_FontEnumerator*	GetFontEnumerator() const

+    {

+        return m_pFontEnumerator;

+    }

+    virtual FXFT_Face	FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,

+                                      int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont);

+private:

+    CFX_ByteString		GetPSNameFromTT(void* hFont);

+    CFX_ByteString		MatchInstalledFonts(const CFX_ByteString& norm_name);

+    FXFT_Face			UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseFont, int italic_angle, int weight, int picthfamily);

+

+    FX_BOOL				m_bListLoaded;

+    FXFT_Face			m_MMFaces[2];

+    CFX_ByteString		m_LastFamily;

+    CFX_DWordArray		m_CharsetArray;

+    CFX_ByteStringArray	m_FaceArray;

+    IFX_SystemFontInfo*	m_pFontInfo;

+    FXFT_Face			m_FoxitFaces[14];

+    IFX_FontEnumerator*		m_pFontEnumerator;

+};

+class IFX_SystemFontInfo : public CFX_Object

+{

+public:

+    static IFX_SystemFontInfo*	CreateDefault();

+    virtual void		Release() = 0;

+    virtual	FX_BOOL		EnumFontList(CFX_FontMapper* pMapper) = 0;

+    virtual void*		MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, FX_LPCSTR face, FX_BOOL& bExact) = 0;

+    virtual void*		GetFont(FX_LPCSTR face) = 0;

+    virtual FX_DWORD	GetFontData(void* hFont, FX_DWORD table, FX_LPBYTE buffer, FX_DWORD size) = 0;

+    virtual FX_BOOL		GetFaceName(void* hFont, CFX_ByteString& name) = 0;

+    virtual FX_BOOL		GetFontCharset(void* hFont, int& charset) = 0;

+    virtual int			GetFaceIndex(void* hFont)

+    {

+        return 0;

+    }

+    virtual void		DeleteFont(void* hFont) = 0;

+    virtual void*       RetainFont(void* hFont)

+    {

+        return NULL;

+    }

+};

+class CFX_FolderFontInfo : public IFX_SystemFontInfo

+{

+public:

+    CFX_FolderFontInfo();

+    ~CFX_FolderFontInfo();

+    void				AddPath(FX_BSTR path);

+    virtual void		Release();

+    virtual	FX_BOOL		EnumFontList(CFX_FontMapper* pMapper);

+    virtual void*		MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, FX_LPCSTR face, FX_BOOL& bExact);

+    virtual void*		GetFont(FX_LPCSTR face);

+    virtual FX_DWORD	GetFontData(void* hFont, FX_DWORD table, FX_LPBYTE buffer, FX_DWORD size);

+    virtual void		DeleteFont(void* hFont);

+    virtual	FX_BOOL		GetFaceName(void* hFont, CFX_ByteString& name);

+    virtual FX_BOOL		GetFontCharset(void* hFont, int& charset);

+protected:

+    CFX_MapByteStringToPtr	m_FontList;

+    CFX_ByteStringArray	m_PathList;

+    CFX_FontMapper*		m_pMapper;

+    void				ScanPath(CFX_ByteString& path);

+    void				ScanFile(CFX_ByteString& path);

+    void				ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_DWORD filesize, FX_DWORD offset);

+};

+class CFX_CountedFaceCache : public CFX_Object

+{

+public:

+    CFX_FaceCache*	m_Obj;

+    FX_DWORD		m_nCount;

+};

+typedef CFX_MapPtrTemplate<FXFT_Face, CFX_CountedFaceCache*> CFX_FTCacheMap;

+class CFX_FontCache : public CFX_Object

+{

+public:

+    ~CFX_FontCache();

+    CFX_FaceCache*			GetCachedFace(CFX_Font* pFont);

+    void					ReleaseCachedFace(CFX_Font* pFont);

+    void					FreeCache(FX_BOOL bRelease = FALSE);

+

+private:

+    CFX_FTCacheMap			m_FTFaceMap;

+    CFX_FTCacheMap			m_ExtFaceMap;

+};

+class CFX_AutoFontCache

+{

+public:

+    CFX_AutoFontCache(CFX_FontCache* pFontCache, CFX_Font* pFont)

+        : m_pFontCache(pFontCache)

+        , m_pFont(pFont)

+    {

+    }

+    ~CFX_AutoFontCache()

+    {

+        m_pFontCache->ReleaseCachedFace(m_pFont);

+    }

+    CFX_FontCache* m_pFontCache;

+    CFX_Font* m_pFont;

+};

+#define FX_FONTCACHE_DEFINE(pFontCache, pFont) CFX_AutoFontCache autoFontCache((pFontCache), (pFont))

+class CFX_GlyphBitmap : public CFX_Object

+{

+public:

+    int						m_Top;

+    int						m_Left;

+    CFX_DIBitmap			m_Bitmap;

+};

+class CFX_FaceCache : public CFX_Object

+{

+public:

+    ~CFX_FaceCache();

+    const CFX_GlyphBitmap*	LoadGlyphBitmap(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, const CFX_AffineMatrix* pMatrix,

+                                            int dest_width, int anti_alias, int& text_flags);

+    const CFX_PathData*		LoadGlyphPath(CFX_Font* pFont, FX_DWORD glyph_index, int dest_width);

+

+

+    CFX_FaceCache(FXFT_Face face);

+private:

+    FXFT_Face				m_Face;

+    CFX_GlyphBitmap*		RenderGlyph(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle,

+                                        const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias);

+    CFX_GlyphBitmap*		RenderGlyph_Nativetext(CFX_Font* pFont, FX_DWORD glyph_index,

+            const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias);

+    CFX_GlyphBitmap*        LookUpGlyphBitmap(CFX_Font* pFont, const CFX_AffineMatrix* pMatrix, CFX_ByteStringC& FaceGlyphsKey,

+            FX_DWORD glyph_index, FX_BOOL bFontStyle, int dest_width, int anti_alias);

+    CFX_MapByteStringToPtr	m_SizeMap;

+    CFX_MapPtrToPtr			m_PathMap;

+    CFX_DIBitmap*           m_pBitmap;

+    void*                   m_pPlatformGraphics;

+    void*                   m_pPlatformBitmap;

+    void*                   m_hDC;

+    void*                   m_hBitmap;

+    void*                   m_hOldBitmap;

+    void*                   m_hGdiFont;

+    void*                   m_hOldGdiFont;

+

+    void				    InitPlatform();

+    void				    DestroyPlatform();

+};

+typedef struct {

+    const CFX_GlyphBitmap*	m_pGlyph;

+    int					m_OriginX, m_OriginY;

+    FX_FLOAT			m_fOriginX, m_fOriginY;

+} FXTEXT_GLYPHPOS;

+FX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos, int nChars, int anti_alias, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f);

+FX_BOOL	OutputGlyph(void* dib, int x, int y, CFX_Font* pFont, double font_size,

+                    CFX_AffineMatrix* pMatrix, unsigned long glyph_index, unsigned long argb);

+FX_BOOL	OutputText(void* dib, int x, int y, CFX_Font* pFont, double font_size,

+                   CFX_AffineMatrix* pText_matrix, unsigned short const* text, unsigned long argb);

+class IFX_GSUBTable

+{

+public:

+    virtual void	Release() = 0;

+    virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) = 0;

+};

+IFX_GSUBTable* FXGE_CreateGSUBTable(CFX_Font* pFont);

+#endif

diff --git a/core/include/fxge/fx_freetype.h b/core/include/fxge/fx_freetype.h
new file mode 100644
index 0000000..397c3ee
--- /dev/null
+++ b/core/include/fxge/fx_freetype.h
@@ -0,0 +1,144 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#include "../thirdparties/freetype/ft2build.h"

+#include "../thirdparties/freetype/freetype/freetype.h"

+#include "../thirdparties/freetype/freetype/ftoutln.h"

+#include "../thirdparties/freetype/freetype/ftmm.h"

+#include "../thirdparties/freetype/freetype/internal/ftobjs.h"

+#include "../thirdparties/freetype/freetype/tttables.h"

+#ifdef __cplusplus

+extern "C" {

+#endif

+#define FXFT_ENCODING_UNICODE FT_ENCODING_UNICODE

+#define FXFT_ENCODING_ADOBE_STANDARD FT_ENCODING_ADOBE_STANDARD

+#define FXFT_ENCODING_ADOBE_EXPERT FT_ENCODING_ADOBE_EXPERT

+#define FXFT_ENCODING_ADOBE_LATIN_1 FT_ENCODING_ADOBE_LATIN_1

+#define FXFT_ENCODING_APPLE_ROMAN FT_ENCODING_APPLE_ROMAN

+#define FXFT_ENCODING_ADOBE_CUSTOM FT_ENCODING_ADOBE_CUSTOM

+#define FXFT_ENCODING_MS_SYMBOL FT_ENCODING_MS_SYMBOL

+#define FXFT_ENCODING_GB2312 FT_ENCODING_GB2312

+#define FXFT_ENCODING_BIG5 FT_ENCODING_BIG5

+#define FXFT_ENCODING_SJIS FT_ENCODING_SJIS

+#define FXFT_ENCODING_JOHAB FT_ENCODING_JOHAB

+#define FXFT_ENCODING_WANSUNG FT_ENCODING_WANSUNG

+#define FXFT_LOAD_NO_SCALE FT_LOAD_NO_SCALE

+#define FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH

+#define FXFT_RENDER_MODE_LCD FT_RENDER_MODE_LCD

+#define FXFT_RENDER_MODE_MONO FT_RENDER_MODE_MONO

+#define FXFT_RENDER_MODE_NORMAL FT_RENDER_MODE_NORMAL

+#define FXFT_LOAD_IGNORE_TRANSFORM FT_LOAD_IGNORE_TRANSFORM

+#define FXFT_LOAD_NO_BITMAP FT_LOAD_NO_BITMAP

+#define FXFT_LOAD_NO_HINTING FT_LOAD_NO_HINTING

+#define FXFT_PIXEL_MODE_MONO FT_PIXEL_MODE_MONO

+#define FXFT_STYLE_FLAG_ITALIC FT_STYLE_FLAG_ITALIC

+#define FXFT_STYLE_FLAG_BOLD FT_STYLE_FLAG_BOLD

+#define FXFT_FACE_FLAG_SFNT FT_FACE_FLAG_SFNT

+#define FXFT_FACE_FLAG_TRICKY ( 1L << 13 )

+typedef FT_MM_Var*		FXFT_MM_Var;

+typedef FT_Bitmap*		FXFT_Bitmap;

+#define FXFT_Matrix		FT_Matrix

+#define FXFT_Vector		FT_Vector

+#define FXFT_Outline_Funcs FT_Outline_Funcs

+typedef FT_Open_Args	FXFT_Open_Args;

+typedef FT_StreamRec	FXFT_StreamRec;

+typedef FT_StreamRec*	FXFT_Stream;

+typedef FT_BBox			FXFT_BBox;

+typedef FT_Glyph		FXFT_Glyph;

+typedef FT_CharMap		FXFT_CharMap;

+#define FXFT_GLYPH_BBOX_PIXELS	FT_GLYPH_BBOX_PIXELS

+#define FXFT_Open_Face(library, args, index, face) \

+    FT_Open_Face((FT_Library)(library), args, index, (FT_Face*)(face))

+#define FXFT_Done_Face(face) FT_Done_Face((FT_Face)(face))

+#define FXFT_Done_FreeType(library) FT_Done_FreeType((FT_Library)(library))

+#define FXFT_Init_FreeType(library) FT_Init_FreeType((FT_Library*)(library))

+#define FXFT_New_Memory_Face(library, base, size, index, face) \

+    FT_New_Memory_Face((FT_Library)(library), base, size, index, (FT_Face*)(face))

+#define FXFT_New_Face(library, filename, index, face) \

+    FT_New_Face((FT_Library)(library), filename, index, (FT_Face*)(face))

+#define FXFT_Get_Face_FreeType(face) ((FT_Face)face)->driver->root.library

+#define FXFT_Select_Charmap(face, encoding) FT_Select_Charmap((FT_Face)face, (FT_Encoding)encoding)

+#define FXFT_Set_Charmap(face, charmap) FT_Set_Charmap((FT_Face)face, (FT_CharMap)charmap)

+#define FXFT_Load_Glyph(face, glyph_index, flags) FT_Load_Glyph((FT_Face)face, glyph_index, flags)

+#define FXFT_Get_Char_Index(face, code) FT_Get_Char_Index((FT_Face)face, code)

+#define FXFT_Get_Glyph_Name(face, index, buffer, size) FT_Get_Glyph_Name((FT_Face)face, index, buffer, size)

+#define FXFT_Get_Name_Index(face, name) FT_Get_Name_Index((FT_Face)face, name)

+#define FXFT_Has_Glyph_Names(face)  (((FT_Face)face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES)

+#define FXFT_Get_Postscript_Name(face) FT_Get_Postscript_Name((FT_Face)face)

+#define FXFT_Load_Sfnt_Table(face, tag, offset, buffer, length) \

+    FT_Load_Sfnt_Table((FT_Face)face, tag, offset, buffer, length)

+#define FXFT_Get_First_Char(face, glyph_index) FT_Get_First_Char((FT_Face)face, glyph_index)

+#define FXFT_Get_Next_Char(face, code, glyph_index) FT_Get_Next_Char((FT_Face)face, code, glyph_index)

+#define FXFT_Clear_Face_External_Stream(face) (((FT_Face)face)->face_flags&=~FT_FACE_FLAG_EXTERNAL_STREAM)

+#define FXFT_Get_Face_External_Stream(face) (((FT_Face)face)->face_flags&FT_FACE_FLAG_EXTERNAL_STREAM)

+#define FXFT_Is_Face_TT_OT(face) (((FT_Face)face)->face_flags&FT_FACE_FLAG_SFNT)

+#define FXFT_Is_Face_Tricky(face) (((FT_Face)face)->face_flags&FXFT_FACE_FLAG_TRICKY)

+#define FXFT_Is_Face_fixedwidth(face) (((FT_Face)face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH)

+#define FXFT_Get_Face_Stream_Base(face) ((FT_Face)face)->stream->base

+#define FXFT_Get_Face_Stream_Size(face) ((FT_Face)face)->stream->size

+#define FXFT_Get_Face_Family_Name(face) ((FT_Face)face)->family_name

+#define FXFT_Get_Face_Style_Name(face) ((FT_Face)face)->style_name

+#define FXFT_Get_Face_Numfaces(face) ((FT_Face)face)->num_faces

+#define FXFT_Get_Face_Faceindex(face) ((FT_Face)face)->face_index

+#define FXFT_Is_Face_Italic(face) (((FT_Face)face)->style_flags&FT_STYLE_FLAG_ITALIC)

+#define FXFT_Is_Face_Bold(face) (((FT_Face)face)->style_flags&FT_STYLE_FLAG_BOLD)

+#define FXFT_Get_Face_Charmaps(face) ((FT_Face)face)->charmaps

+#define FXFT_Get_Glyph_HoriBearingX(face) ((FT_Face)face)->glyph->metrics.horiBearingX

+#define FXFT_Get_Glyph_HoriBearingY(face) ((FT_Face)face)->glyph->metrics.horiBearingY

+#define FXFT_Get_Glyph_Width(face) ((FT_Face)face)->glyph->metrics.width

+#define FXFT_Get_Glyph_Height(face) ((FT_Face)face)->glyph->metrics.height

+#define FXFT_Get_Face_CharmapCount(face) ((FT_Face)face)->num_charmaps

+#define FXFT_Get_Charmap_Encoding(charmap) ((FT_CharMap)charmap)->encoding

+#define FXFT_Get_Face_Charmap(face) ((FT_Face)face)->charmap

+#define FXFT_Get_Charmap_PlatformID(charmap) ((FT_CharMap)charmap)->platform_id

+#define FXFT_Get_Charmap_EncodingID(charmap) ((FT_CharMap)charmap)->encoding_id

+#define FXFT_Get_Face_UnitsPerEM(face) ((FT_Face)face)->units_per_EM

+#define FXFT_Get_Face_xMin(face) ((FT_Face)face)->bbox.xMin

+#define FXFT_Get_Face_xMax(face) ((FT_Face)face)->bbox.xMax

+#define FXFT_Get_Face_yMin(face) ((FT_Face)face)->bbox.yMin

+#define FXFT_Get_Face_yMax(face) ((FT_Face)face)->bbox.yMax

+#define FXFT_Get_Face_Height(face) ((FT_Face)face)->height

+#define FXFT_Get_Face_UnderLineThickness(face) ((FT_Face)face)->underline_thickness

+#define FXFT_Get_Face_UnderLinePosition(face) ((FT_Face)face)->underline_position

+#define FXFT_Get_Face_MaxAdvanceWidth(face) ((FT_Face)face)->max_advance_width

+#define FXFT_Get_Face_Ascender(face) ((FT_Face)face)->ascender

+#define FXFT_Get_Face_Descender(face) ((FT_Face)face)->descender

+#define FXFT_Get_Glyph_HoriAdvance(face) ((FT_Face)face)->glyph->metrics.horiAdvance

+#define FXFT_Get_MM_Axis(var, index) &((FT_MM_Var*)var)->axis[index]

+#define FXFT_Get_MM_Axis_Min(axis) ((FT_Var_Axis*)axis)->minimum

+#define FXFT_Get_MM_Axis_Max(axis) ((FT_Var_Axis*)axis)->maximum

+#define FXFT_Get_MM_Axis_Def(axis) ((FT_Var_Axis*)axis)->def

+#define FXFT_Get_Face_Internal_Flag(face) ((FT_Face)face)->internal->transform_flags

+#define FXFT_Set_Face_Internal_Flag(face, flag) (((FT_Face)face)->internal->transform_flags = flag)

+#define FXFT_Alloc(library, size) ((FT_Library)library)->memory->alloc(((FT_Library)library)->memory, size)

+#define FXFT_Free(face, p) ((FT_Face)face)->memory->free(((FT_Face)face)->memory, p)

+#define FXFT_Get_Glyph_Outline(face) &((FT_Face)face)->glyph->outline

+#define FXFT_Get_Outline_Bbox(outline, cbox)  FT_Outline_Get_CBox(outline, cbox)

+#define FXFT_Render_Glyph(face, mode) FT_Render_Glyph(((FT_Face)face)->glyph, (enum FT_Render_Mode_)mode)

+#define FXFT_Get_MM_Var(face, p) FT_Get_MM_Var((FT_Face)face, p)

+#define FXFT_Set_MM_Design_Coordinates(face, n, p) FT_Set_MM_Design_Coordinates((FT_Face)face, n, p)

+#define FXFT_Set_Pixel_Sizes(face, w, h) FT_Set_Pixel_Sizes((FT_Face)face, w, h)

+#define FXFT_Set_Transform(face, m, d) FT_Set_Transform((FT_Face)face, m, d)

+#define FXFT_Outline_Embolden(outline, s) FT_Outline_Embolden(outline, s)

+#define FXFT_Get_Glyph_Bitmap(face) &((FT_Face)face)->glyph->bitmap

+#define FXFT_Get_Bitmap_Width(bitmap) ((FT_Bitmap*)bitmap)->width

+#define FXFT_Get_Bitmap_Rows(bitmap) ((FT_Bitmap*)bitmap)->rows

+#define FXFT_Get_Bitmap_PixelMode(bitmap) ((FT_Bitmap*)bitmap)->pixel_mode

+#define FXFT_Get_Bitmap_Pitch(bitmap) ((FT_Bitmap*)bitmap)->pitch

+#define FXFT_Get_Bitmap_Buffer(bitmap) ((FT_Bitmap*)bitmap)->buffer

+#define FXFT_Get_Glyph_BitmapLeft(face) ((FT_Face)face)->glyph->bitmap_left

+#define FXFT_Get_Glyph_BitmapTop(face) ((FT_Face)face)->glyph->bitmap_top

+#define FXFT_Outline_Decompose(outline, funcs, params) FT_Outline_Decompose(outline, funcs, params)

+#define FXFT_Set_Char_Size(face, char_width, char_height, horz_resolution, vert_resolution) FT_Set_Char_Size(face, char_width, char_height, horz_resolution, vert_resolution)

+#define FXFT_Get_Glyph(slot, aglyph) FT_Get_Glyph(slot, aglyph)

+#define FXFT_Glyph_Get_CBox(glyph, bbox_mode, acbox) FT_Glyph_Get_CBox(glyph, bbox_mode, acbox)

+#define FXFT_Done_Glyph(glyph)	FT_Done_Glyph(glyph)

+#define FXFT_Library_SetLcdFilter(library, filter) FT_Library_SetLcdFilter((FT_Library)(library), filter)

+int FXFT_unicode_from_adobe_name(const char* name);

+void FXFT_adobe_name_from_unicode(char* name, unsigned int unicode);

+#ifdef __cplusplus

+};

+#endif

diff --git a/core/include/fxge/fx_ge.h b/core/include/fxge/fx_ge.h
new file mode 100644
index 0000000..ab0bf35
--- /dev/null
+++ b/core/include/fxge/fx_ge.h
@@ -0,0 +1,733 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_GE_H_

+#define _FX_GE_H_

+#ifndef _FX_DIB_H_

+#include "fx_dib.h"

+#endif

+#ifndef _FX_FONT_H_

+#include "fx_font.h"

+#endif

+class CFX_ClipRgn;

+class CFX_PathData;

+class CFX_GraphStateData;

+class CFX_Font;

+class CFX_FontMgr;

+class CFX_FontCache;

+class CFX_FaceCache;

+class CFX_RenderDevice;

+class IFX_RenderDeviceDriver;

+class CCodec_ModuleMgr;

+class IFXG_PaintModuleMgr;

+class CFX_GEModule : public CFX_Object

+{

+public:

+

+    static void				Create();

+

+    static void				Use(CFX_GEModule* pMgr);

+

+    static CFX_GEModule*	Get();

+

+    static void				Destroy();

+public:

+

+    CFX_FontCache*			GetFontCache();

+    CFX_FontMgr*			GetFontMgr()

+    {

+        return m_pFontMgr;

+    }

+    void					SetTextGamma(FX_FLOAT gammaValue);

+    FX_LPCBYTE				GetTextGammaTable();

+    void					SetExtFontMapper(IFX_FontMapper* pFontMapper);

+

+    void					SetCodecModule(CCodec_ModuleMgr* pCodecModule)

+    {

+        m_pCodecModule = pCodecModule;

+    }

+    CCodec_ModuleMgr*		GetCodecModule()

+    {

+        return m_pCodecModule;

+    }

+    FXFT_Library			m_FTLibrary;

+    void*					GetPlatformData()

+    {

+        return m_pPlatformData;

+    }

+protected:

+

+    CFX_GEModule();

+

+    ~CFX_GEModule();

+    void					InitPlatform();

+    void					DestroyPlatform();

+private:

+    FX_BYTE					m_GammaValue[256];

+    CFX_FontCache*			m_pFontCache;

+    CFX_FontMgr*			m_pFontMgr;

+    CCodec_ModuleMgr*		m_pCodecModule;

+    void*					m_pPlatformData;

+};

+typedef struct {

+

+    FX_FLOAT			m_PointX;

+

+    FX_FLOAT			m_PointY;

+

+    int					m_Flag;

+} FX_PATHPOINT;

+#define FXPT_CLOSEFIGURE		0x01

+#define FXPT_LINETO				0x02

+#define FXPT_BEZIERTO			0x04

+#define FXPT_MOVETO				0x06

+#define FXPT_TYPE				0x06

+#define FXFILL_ALTERNATE		1

+#define FXFILL_WINDING			2

+class CFX_ClipRgn : public CFX_Object

+{

+public:

+

+    CFX_ClipRgn(int device_width, int device_height);

+

+    CFX_ClipRgn(const FX_RECT& rect);

+

+    CFX_ClipRgn(const CFX_ClipRgn& src);

+

+    ~CFX_ClipRgn();

+

+    typedef enum {

+        RectI,

+        MaskF

+    } ClipType;

+

+    void			Reset(const FX_RECT& rect);

+

+    ClipType		GetType() const

+    {

+        return m_Type;

+    }

+

+    const FX_RECT&	GetBox() const

+    {

+        return m_Box;

+    }

+

+    CFX_DIBitmapRef	GetMask() const

+    {

+        return m_Mask;

+    }

+

+    void			IntersectRect(const FX_RECT& rect);

+

+    void			IntersectMaskF(int left, int top, CFX_DIBitmapRef Mask);

+protected:

+

+    ClipType		m_Type;

+

+    FX_RECT			m_Box;

+

+    CFX_DIBitmapRef	m_Mask;

+

+    void			IntersectMaskRect(FX_RECT rect, FX_RECT mask_box, CFX_DIBitmapRef Mask);

+};

+extern const FX_BYTE g_GammaRamp[256];

+extern const FX_BYTE g_GammaInverse[256];

+#define FX_GAMMA(value)			(value)

+#define FX_GAMMA_INVERSE(value)	(value)

+inline FX_ARGB ArgbGamma(FX_ARGB argb)

+{

+    return argb;

+}

+inline FX_ARGB ArgbGammaInverse(FX_ARGB argb)

+{

+    return argb;

+}

+class CFX_PathData : public CFX_Object

+{

+public:

+

+    CFX_PathData();

+

+    CFX_PathData(const CFX_PathData& src);

+

+    ~CFX_PathData();

+

+

+

+

+    int					GetPointCount() const

+    {

+        return m_PointCount;

+    }

+

+    int					GetFlag(int index) const

+    {

+        return m_pPoints[index].m_Flag;

+    }

+

+    FX_FLOAT			GetPointX(int index) const

+    {

+        return m_pPoints[index].m_PointX;

+    }

+

+    FX_FLOAT			GetPointY(int index) const

+    {

+        return m_pPoints[index].m_PointY;

+    }

+

+

+

+    FX_PATHPOINT*		GetPoints() const

+    {

+        return m_pPoints;

+    }

+

+    FX_BOOL				SetPointCount(int nPoints);

+

+    FX_BOOL				AllocPointCount(int nPoints);

+

+    FX_BOOL				AddPointCount(int addPoints);

+

+    CFX_FloatRect		GetBoundingBox() const;

+

+    CFX_FloatRect		GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const;

+

+    void				Transform(const CFX_AffineMatrix* pMatrix);

+

+    FX_BOOL				IsRect() const;

+

+    FX_BOOL				GetZeroAreaPath(CFX_PathData& NewPath, CFX_AffineMatrix* pMatrix, FX_BOOL&bThin, FX_BOOL bAdjust) const;

+

+    FX_BOOL				IsRect(const CFX_AffineMatrix* pMatrix, CFX_FloatRect* rect) const;

+

+    FX_BOOL				Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* pMatrix);

+

+    FX_BOOL				AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top);

+

+    void				SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag);

+

+    void				TrimPoints(int nPoints);

+

+    FX_BOOL				Copy(const CFX_PathData &src);

+protected:

+    friend class		CPDF_Path;

+

+    int					m_PointCount;

+

+    FX_PATHPOINT*		m_pPoints;

+

+    int					m_AllocCount;

+};

+class CFX_GraphStateData : public CFX_Object

+{

+public:

+

+    CFX_GraphStateData();

+

+    CFX_GraphStateData(const CFX_GraphStateData& src);

+

+    ~CFX_GraphStateData();

+

+    void				Copy(const CFX_GraphStateData& src);

+

+    void				SetDashCount(int count);

+

+

+

+    typedef enum {

+        LineCapButt = 0,

+        LineCapRound = 1,

+        LineCapSquare = 2

+    } LineCap;

+    LineCap				m_LineCap;

+    int					m_DashCount;

+    FX_FLOAT*		m_DashArray;

+    FX_FLOAT			m_DashPhase;

+

+    typedef enum {

+        LineJoinMiter = 0,

+        LineJoinRound = 1,

+        LineJoinBevel = 2,

+    } LineJoin;

+    LineJoin			m_LineJoin;

+    FX_FLOAT			m_MiterLimit;

+    FX_FLOAT			m_LineWidth;

+

+};

+#define FXDC_DEVICE_CLASS			1

+#define FXDC_PIXEL_WIDTH			2

+#define FXDC_PIXEL_HEIGHT			3

+#define FXDC_BITS_PIXEL				4

+#define FXDC_HORZ_SIZE				5

+#define FXDC_VERT_SIZE				6

+#define FXDC_RENDER_CAPS			7

+#define FXDC_DITHER_BITS			8

+#define FXDC_DISPLAY				1

+#define FXDC_PRINTER				2

+#define FXRC_GET_BITS				0x01

+#define FXRC_BIT_MASK				0x02

+#define FXRC_ALPHA_MASK				0x04

+#define FXRC_ALPHA_PATH				0x10

+#define FXRC_ALPHA_IMAGE			0x20

+#define FXRC_ALPHA_OUTPUT			0x40

+#define FXRC_BLEND_MODE				0x80

+#define FXRC_SOFT_CLIP				0x100

+#define FXRC_CMYK_OUTPUT			0x200

+#define FXRC_BITMASK_OUTPUT         0x400

+#define FXRC_BYTEMASK_OUTPUT        0x800

+#define FXRENDER_IMAGE_LOSSY		0x1000

+#define FXFILL_ALTERNATE		1

+#define FXFILL_WINDING			2

+#define FXFILL_FULLCOVER		4

+#define FXFILL_RECT_AA			8

+#define FX_FILL_STROKE			16

+#define FX_STROKE_ADJUST		32

+#define FX_STROKE_TEXT_MODE		64

+#define FX_FILL_TEXT_MODE		128

+#define FX_ZEROAREA_FILL		256

+#define FXFILL_NOPATHSMOOTH		512

+#define FXTEXT_CLEARTYPE			0x01

+#define FXTEXT_BGR_STRIPE			0x02

+#define FXTEXT_PRINTGRAPHICTEXT		0x04

+#define FXTEXT_NO_NATIVETEXT		0x08

+#define FXTEXT_PRINTIMAGETEXT		0x10

+#define FXTEXT_NOSMOOTH				0x20

+typedef struct {

+    FX_DWORD			m_GlyphIndex;

+    FX_FLOAT			m_OriginX, m_OriginY;

+    int					m_FontCharWidth;

+    FX_BOOL				m_bGlyphAdjust;

+    FX_FLOAT			m_AdjustMatrix[4];

+    FX_DWORD			m_ExtGID;

+    FX_BOOL				m_bFontStyle;

+} FXTEXT_CHARPOS;

+class CFX_RenderDevice : public CFX_Object

+{

+public:

+    CFX_RenderDevice();

+

+    virtual ~CFX_RenderDevice();

+

+    void			SetDeviceDriver(IFX_RenderDeviceDriver* pDriver);

+

+    IFX_RenderDeviceDriver*	GetDeviceDriver() const

+    {

+        return m_pDeviceDriver;

+    }

+

+    FX_BOOL			StartRendering();

+

+    void			EndRendering();

+

+

+

+    void			SaveState();

+

+    void			RestoreState(FX_BOOL bKeepSaved = FALSE);

+

+

+

+

+    int				GetWidth() const

+    {

+        return m_Width;

+    }

+

+    int				GetHeight() const

+    {

+        return m_Height;

+    }

+

+    int				GetDeviceClass() const

+    {

+        return m_DeviceClass;

+    }

+

+    int				GetBPP() const

+    {

+        return m_bpp;

+    }

+

+    int				GetRenderCaps() const

+    {

+        return m_RenderCaps;

+    }

+

+    int				GetDeviceCaps(int id) const;

+

+    CFX_Matrix		GetCTM() const;

+

+

+    CFX_DIBitmap*	GetBitmap() const

+    {

+        return m_pBitmap;

+    }

+    void			SetBitmap(CFX_DIBitmap* pBitmap)

+    {

+        m_pBitmap = pBitmap;

+    }

+

+    FX_BOOL			CreateCompatibleBitmap(CFX_DIBitmap* pDIB, int width, int height) const;

+

+    const FX_RECT&	GetClipBox() const

+    {

+        return m_ClipBox;

+    }

+

+    FX_BOOL			SetClip_PathFill(const CFX_PathData* pPathData,

+                                     const CFX_AffineMatrix* pObject2Device,

+                                     int fill_mode

+                              );

+

+    FX_BOOL			SetClip_Rect(const FX_RECT* pRect);

+

+    FX_BOOL			SetClip_PathStroke(const CFX_PathData* pPathData,

+                                       const CFX_AffineMatrix* pObject2Device,

+                                       const CFX_GraphStateData* pGraphState

+                                );

+

+    FX_BOOL			DrawPath(const CFX_PathData* pPathData,

+                             const CFX_AffineMatrix* pObject2Device,

+                             const CFX_GraphStateData* pGraphState,

+                             FX_DWORD fill_color,

+                             FX_DWORD stroke_color,

+                             int fill_mode,

+                             int alpha_flag = 0,

+                             void* pIccTransform = NULL,

+                             int blend_type = FXDIB_BLEND_NORMAL

+                      );

+

+    FX_BOOL			SetPixel(int x, int y, FX_DWORD color,

+                             int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			FillRect(const FX_RECT* pRect, FX_DWORD color,

+                             int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);

+

+    FX_BOOL			DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,

+                                     int fill_mode = 0, int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);

+

+    FX_BOOL			GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL);

+

+    CFX_DIBitmap*   GetBackDrop();

+

+    FX_BOOL			SetDIBits(const CFX_DIBSource* pBitmap, int left, int top, int blend_type = FXDIB_BLEND_NORMAL,

+                              void* pIccTransform = NULL);

+

+    FX_BOOL			StretchDIBits(const CFX_DIBSource* pBitmap, int left, int top, int dest_width, int dest_height,

+                                  FX_DWORD flags = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);

+

+    FX_BOOL			SetBitMask(const CFX_DIBSource* pBitmap, int left, int top, FX_DWORD color,

+                               int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			StretchBitMask(const CFX_DIBSource* pBitmap, int left, int top, int dest_width, int dest_height,

+                                   FX_DWORD color, FX_DWORD flags = 0, int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,

+                                const CFX_AffineMatrix* pMatrix, FX_DWORD flags, FX_LPVOID& handle,

+                                int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);

+

+    FX_BOOL			ContinueDIBits(FX_LPVOID handle, IFX_Pause* pPause);

+

+    void			CancelDIBits(FX_LPVOID handle);

+

+    FX_BOOL			DrawNormalText(int nChars, const FXTEXT_CHARPOS* pCharPos,

+                                   CFX_Font* pFont, CFX_FontCache* pCache,

+                                   FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,

+                                   FX_DWORD fill_color, FX_DWORD text_flags,

+                                   int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			DrawTextPath(int nChars, const FXTEXT_CHARPOS* pCharPos,

+                                 CFX_Font* pFont, CFX_FontCache* pCache,

+                                 FX_FLOAT font_size, const CFX_AffineMatrix* pText2User,

+                                 const CFX_AffineMatrix* pUser2Device, const CFX_GraphStateData* pGraphState,

+                                 FX_DWORD fill_color, FX_DWORD stroke_color, CFX_PathData* pClippingPath, int nFlag = 0,

+                                 int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);

+    virtual void Begin() {}

+    virtual void End() {}

+private:

+

+    CFX_DIBitmap*	m_pBitmap;

+

+

+

+    int				m_Width;

+

+    int				m_Height;

+

+    int				m_bpp;

+

+    int				m_RenderCaps;

+

+    int				m_DeviceClass;

+

+    FX_RECT			m_ClipBox;

+

+protected:

+

+    IFX_RenderDeviceDriver*	m_pDeviceDriver;

+private:

+

+    void			InitDeviceInfo();

+

+    void			UpdateClipBox();

+};

+class CFX_FxgeDevice : public CFX_RenderDevice

+{

+public:

+

+    CFX_FxgeDevice();

+

+    ~CFX_FxgeDevice();

+

+    FX_BOOL			Attach(CFX_DIBitmap* pBitmap, int dither_bits = 0, FX_BOOL bRgbByteOrder = FALSE, CFX_DIBitmap* pOriDevice = NULL, FX_BOOL bGroupKnockout = FALSE);

+

+    FX_BOOL			Create(int width, int height, FXDIB_Format format, int dither_bits = 0, CFX_DIBitmap* pOriDevice = NULL);

+protected:

+

+    FX_BOOL			m_bOwnedBitmap;

+};

+class CFX_SkiaDevice : public CFX_RenderDevice

+{

+public:

+

+    CFX_SkiaDevice();

+

+    ~CFX_SkiaDevice();

+

+    FX_BOOL			Attach(CFX_DIBitmap* pBitmap, int dither_bits = 0, FX_BOOL bRgbByteOrder = FALSE, CFX_DIBitmap* pOriDevice = NULL, FX_BOOL bGroupKnockout = FALSE);

+

+    FX_BOOL			Create(int width, int height, FXDIB_Format format, int dither_bits = 0, CFX_DIBitmap* pOriDevice = NULL);

+protected:

+

+    FX_BOOL			m_bOwnedBitmap;

+};

+class IFX_RenderDeviceDriver : public CFX_Object

+{

+public:

+

+    static IFX_RenderDeviceDriver*		CreateFxgeDriver(CFX_DIBitmap* pBitmap, FX_BOOL bRgbByteOrder = FALSE,

+            CFX_DIBitmap* pOriDevice = NULL, FX_BOOL bGroupKnockout = FALSE);

+

+    virtual ~IFX_RenderDeviceDriver() {}

+    virtual void Begin() { }

+    virtual void End() { }

+

+    virtual int		GetDeviceCaps(int caps_id) = 0;

+

+    virtual CFX_Matrix	GetCTM() const

+    {

+        return CFX_Matrix();

+    }

+

+    virtual FX_BOOL IsPSPrintDriver()

+    {

+        return FALSE;

+    }

+

+    virtual FX_BOOL	StartRendering()

+    {

+        return TRUE;

+    }

+

+    virtual void	EndRendering() {}

+

+

+

+

+    virtual void	SaveState() = 0;

+

+    virtual void	RestoreState(FX_BOOL bKeepSaved = FALSE) = 0;

+

+

+    virtual FX_BOOL	SetClip_PathFill(const CFX_PathData* pPathData,

+                                     const CFX_AffineMatrix* pObject2Device,

+                                     int fill_mode

+                                    ) = 0;

+

+    virtual FX_BOOL	SetClip_PathStroke(const CFX_PathData* pPathData,

+                                       const CFX_AffineMatrix* pObject2Device,

+                                       const CFX_GraphStateData* pGraphState

+                                      )

+    {

+        return FALSE;

+    }

+

+    virtual FX_BOOL	DrawPath(const CFX_PathData* pPathData,

+                             const CFX_AffineMatrix* pObject2Device,

+                             const CFX_GraphStateData* pGraphState,

+                             FX_DWORD fill_color,

+                             FX_DWORD stroke_color,

+                             int fill_mode,

+                             int alpha_flag = 0,

+                             void* pIccTransform = NULL,

+                             int blend_type = FXDIB_BLEND_NORMAL

+                            ) = 0;

+

+    virtual FX_BOOL	SetPixel(int x, int y, FX_DWORD color,

+                             int alpha_flag = 0, void* pIccTransform = NULL)

+    {

+        return FALSE;

+    }

+

+    virtual FX_BOOL FillRect(const FX_RECT* pRect, FX_DWORD fill_color,

+                             int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL)

+    {

+        return FALSE;

+    }

+

+    virtual FX_BOOL	DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,

+                                     int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL)

+    {

+        return FALSE;

+    }

+

+    virtual FX_BOOL GetClipBox(FX_RECT* pRect) = 0;

+

+    virtual FX_BOOL	GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL, FX_BOOL bDEdge = FALSE)

+    {

+        return FALSE;

+    }

+    virtual CFX_DIBitmap*   GetBackDrop()

+    {

+        return NULL;

+    }

+

+    virtual FX_BOOL	SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect,

+                              int dest_left, int dest_top, int blend_type,

+                              int alpha_flag = 0, void* pIccTransform = NULL) = 0;

+

+    virtual FX_BOOL	StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,

+                                  int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,

+                                  int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL) = 0;

+

+    virtual FX_BOOL	StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,

+                                const CFX_AffineMatrix* pMatrix, FX_DWORD flags, FX_LPVOID& handle,

+                                int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL) = 0;

+

+    virtual FX_BOOL	ContinueDIBits(FX_LPVOID handle, IFX_Pause* pPause)

+    {

+        return FALSE;

+    }

+

+    virtual void	CancelDIBits(FX_LPVOID handle) {}

+

+    virtual FX_BOOL DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,

+                                   CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,

+                                   int alpha_flag = 0, void* pIccTransform = NULL)

+    {

+        return FALSE;

+    }

+

+    virtual void*	GetPlatformSurface()

+    {

+        return NULL;

+    }

+

+    virtual int		GetDriverType()

+    {

+        return 0;

+    }

+

+    virtual void    ClearDriver() {}

+};

+class IFX_PSOutput

+{

+public:

+

+    virtual void	OutputPS(FX_LPCSTR string, int len) = 0;

+    virtual void  Release() = 0;

+};

+class CPSFont;

+class CFX_PSRenderer : public CFX_Object

+{

+public:

+

+    CFX_PSRenderer();

+

+    ~CFX_PSRenderer();

+

+    void			Init(IFX_PSOutput* pOutput, int ps_level, int width, int height, FX_BOOL bCmykOutput);

+    FX_BOOL			StartRendering();

+    void			EndRendering();

+

+    void			SaveState();

+

+    void			RestoreState(FX_BOOL bKeepSaved = FALSE);

+

+    void			SetClip_PathFill(const CFX_PathData* pPathData,

+                                     const CFX_AffineMatrix* pObject2Device,

+                                     int fill_mode

+                           );

+

+    void			SetClip_PathStroke(const CFX_PathData* pPathData,

+                                       const CFX_AffineMatrix* pObject2Device,

+                                       const CFX_GraphStateData* pGraphState

+                             );

+

+    FX_RECT			GetClipBox()

+    {

+        return m_ClipBox;

+    }

+

+    FX_BOOL			DrawPath(const CFX_PathData* pPathData,

+                             const CFX_AffineMatrix* pObject2Device,

+                             const CFX_GraphStateData* pGraphState,

+                             FX_DWORD fill_color,

+                             FX_DWORD stroke_color,

+                             int fill_mode,

+                             int alpha_flag = 0,

+                             void* pIccTransform = NULL

+                      );

+

+    FX_BOOL			SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,

+                              int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,

+                                  int dest_width, int dest_height, FX_DWORD flags,

+                                  int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			DrawDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color,

+                               const CFX_AffineMatrix* pMatrix, FX_DWORD flags,

+                               int alpha_flag = 0, void* pIccTransform = NULL);

+

+    FX_BOOL			DrawText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont, CFX_FontCache* pCache,

+                             const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,

+                             int alpha_flag = 0, void* pIccTransform = NULL);

+private:

+

+    IFX_PSOutput*	m_pOutput;

+

+    int				m_PSLevel;

+

+    CFX_GraphStateData	m_CurGraphState;

+

+    FX_BOOL			m_bGraphStateSet;

+

+    FX_BOOL			m_bCmykOutput;

+

+    FX_BOOL			m_bColorSet;

+

+    FX_DWORD		m_LastColor;

+

+    FX_RECT			m_ClipBox;

+

+    CFX_ArrayTemplate<CPSFont*>	m_PSFontList;

+

+    CFX_ArrayTemplate<FX_RECT>	m_ClipBoxStack;

+    FX_BOOL			m_bInited;

+

+    void			OutputPath(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device);

+

+    void			SetGraphState(const CFX_GraphStateData* pGraphState);

+

+    void			SetColor(FX_DWORD color, int alpha_flag, void* pIccTransform);

+

+    void			FindPSFontGlyph(CFX_FaceCache* pFaceCache, CFX_Font* pFont, const FXTEXT_CHARPOS& charpos, int& ps_fontnum, int &ps_glyphindex);

+

+    void			WritePSBinary(FX_LPCBYTE data, int len);

+};

+#endif

diff --git a/core/include/fxge/fx_ge_apple.h b/core/include/fxge/fx_ge_apple.h
new file mode 100644
index 0000000..f13a1b3
--- /dev/null
+++ b/core/include/fxge/fx_ge_apple.h
@@ -0,0 +1,26 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_GE_APPLE_H_

+#define _FX_GE_APPLE_H_

+#if _FXM_PLATFORM_  == _FXM_PLATFORM_APPLE_

+class CFX_QuartzDevice : public CFX_RenderDevice

+{

+public:

+    CFX_QuartzDevice();

+    ~CFX_QuartzDevice();

+    FX_BOOL Attach(CGContextRef context, FX_INT32 nDeviceClass = FXDC_DISPLAY);

+    FX_BOOL Attach(CFX_DIBitmap* pBitmap);

+    FX_BOOL Create(FX_INT32 width, FX_INT32 height, FXDIB_Format format);

+

+    CGContextRef GetContext();

+

+protected:

+    CGContextRef m_pContext;

+    FX_BOOL m_bOwnedBitmap;

+};

+#endif

+#endif

diff --git a/core/include/fxge/fx_ge_win32.h b/core/include/fxge/fx_ge_win32.h
new file mode 100644
index 0000000..0b421db
--- /dev/null
+++ b/core/include/fxge/fx_ge_win32.h
@@ -0,0 +1,105 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#ifndef _FX_GE_WIN32_H_

+#define _FX_GE_WIN32_H_

+#ifdef _WIN32

+#ifndef _WINDOWS_

+#include <windows.h>

+#endif

+#define WINDIB_OPEN_MEMORY    0x1

+#define WINDIB_OPEN_PATHNAME  0x2

+typedef struct  WINDIB_Open_Args_ {

+

+    int         flags;

+

+    const FX_BYTE*  memory_base;

+

+    size_t    memory_size;

+

+    FX_LPCWSTR  path_name;

+} WINDIB_Open_Args_;

+class CFX_WindowsDIB : public CFX_DIBitmap

+{

+public:

+

+    static CFX_ByteString	GetBitmapInfo(const CFX_DIBitmap* pBitmap);

+

+    static CFX_DIBitmap* LoadFromBuf(BITMAPINFO* pbmi, void* pData);

+

+    static HBITMAP		GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC);

+

+    static CFX_DIBitmap* LoadFromDDB(HDC hDC, HBITMAP hBitmap, FX_DWORD* pPalette = NULL, FX_DWORD size = 256);

+

+    static CFX_DIBitmap* LoadFromFile(FX_LPCWSTR filename);

+

+    static CFX_DIBitmap* LoadFromFile(FX_LPCSTR filename)

+    {

+        return LoadFromFile(CFX_WideString::FromLocal(filename));

+    }

+

+    static CFX_DIBitmap* LoadDIBitmap(WINDIB_Open_Args_ args);

+

+    CFX_WindowsDIB(HDC hDC, int width, int height);

+

+    ~CFX_WindowsDIB();

+

+    HDC					GetDC() const

+    {

+        return m_hMemDC;

+    }

+

+    HBITMAP				GetWindowsBitmap() const

+    {

+        return m_hBitmap;

+    }

+

+    void				LoadFromDevice(HDC hDC, int left, int top);

+

+    void				SetToDevice(HDC hDC, int left, int top);

+protected:

+

+    HDC					m_hMemDC;

+

+    HBITMAP				m_hBitmap;

+

+    HBITMAP				m_hOldBitmap;

+};

+class CFX_WindowsDevice : public CFX_RenderDevice

+{

+public:

+    static IFX_RenderDeviceDriver*	CreateDriver(HDC hDC, FX_BOOL bCmykOutput = FALSE);

+

+    CFX_WindowsDevice(HDC hDC, FX_BOOL bCmykOutput = FALSE, FX_BOOL bForcePSOutput = FALSE, int psLevel = 2);

+

+    HDC		GetDC() const;

+

+    FX_BOOL m_bForcePSOutput;

+

+    static int m_psLevel;

+};

+class CFX_WinBitmapDevice : public CFX_RenderDevice

+{

+public:

+

+    CFX_WinBitmapDevice(int width, int height, FXDIB_Format format);

+

+    ~CFX_WinBitmapDevice();

+

+    HDC		GetDC()

+    {

+        return m_hDC;

+    }

+protected:

+

+    HBITMAP	m_hBitmap;

+

+    HBITMAP m_hOldBitmap;

+

+    HDC		m_hDC;

+};

+#endif

+#endif

diff --git a/core/include/reflow/fpdf_layout.h b/core/include/reflow/fpdf_layout.h
new file mode 100644
index 0000000..fc01ba3
--- /dev/null
+++ b/core/include/reflow/fpdf_layout.h
@@ -0,0 +1,280 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef _FPDFAPI_LAYOUT_H_
+#define _FPDFAPI_LAYOUT_H_
+class IPDF_LayoutElement;
+class IPDF_LayoutProcessor;
+class IPDF_LayoutProvider;
+typedef enum {
+    LayoutUnknown,
+    LayoutArifact,
+    LayoutDocument,
+    LayoutPart,
+    LayoutArt,
+    LayoutSect,
+    LayoutDiv,
+    LayoutBlockQuote,
+    LayoutCaption,
+    LayoutTOC,
+    LayoutTOCI,
+    LayoutIndex,
+    LayoutNonStruct,
+    LayoutPrivate,
+    LayoutParagraph,
+    LayoutHeading,
+    LayoutHeading1,
+    LayoutHeading2,
+    LayoutHeading3,
+    LayoutHeading4,
+    LayoutHeading5,
+    LayoutHeading6,
+    LayoutList,
+    LayoutListItem,
+    LayoutListLabel,
+    LayoutListBody,
+    LayoutTable,
+    LayoutTableRow,
+    LayoutTableHeaderCell,
+    LayoutTableDataCell,
+    LayoutTableHeaderGroup,
+    LayoutTableBodyGroup,
+    LayoutTableFootGroup,
+    LayoutSpan,
+    LayoutQuote,
+    LayoutNote,
+    LayoutReference,
+    LayoutBibEntry,
+    LayoutCode,
+    LayoutLink,
+    LayoutAnnot,
+    LayoutRuby,
+    LayoutRubyBase,
+    LayoutRubyAnnot,
+    LayoutRubyPunc,
+    LayoutWarichu,
+    LayoutWarichuText,
+    LayoutWarichuPunc,
+    LayoutFigure,
+    LayoutFormula,
+    LayoutForm,
+} LayoutType;
+typedef enum {
+    LayoutArtifactType,
+    LayoutArtifactAttached,
+    LayoutArtifactSubType,
+    LayoutPlacement,
+    LayoutWritingMode,
+    LayoutBackgroundColor,
+    LayoutBorderColor,
+    LayoutBorderStyle,
+    LayoutBorderThickness,
+    LayoutPadding,
+    LayoutColor,
+    LayoutSpaceBefore,
+    LayoutSpaceAfter,
+    LayoutStartIndent,
+    LayoutEndIndent,
+    LayoutTextIndent,
+    LayoutTextAlign,
+    LayoutBBox,
+    LayoutWidth,
+    LayoutHeight,
+    LayoutBlockAlign,
+    LayoutInlineAlign,
+    LayoutTBorderStyle,
+    LayoutTPadding,
+    LayoutBaselineShift,
+    LayoutLineHeight,
+    LayoutTextDecorationColor,
+    LayoutTextDecorationThickness,
+    LayoutTextDecorationType,
+    LayoutRubyAlign,
+    LayoutRubyPosition,
+    LayoutGlyphOrientationVertical,
+    LayoutColumnCount,
+    LayoutColumnGap,
+    LayoutColumnWidths,
+    LayoutListNumbering,
+    LayoutFieldRole,
+    LayoutFieldChecked,
+    LayoutFieldDesc,
+    LayoutRowSpan,
+    LayoutColSpan,
+    LayoutTableHeaders,
+    LayoutTableHeaderScope,
+    LayoutTableSummary,
+} LayoutAttr;
+typedef enum {
+    LayoutInvalid = 0,
+    LayoutBlock,
+    LayoutInline,
+    LayoutBefore,
+    LayoutAfter,
+    LayoutStart,
+    LayoutEnd,
+    LayoutLrTb,
+    LayoutRlTb,
+    LayoutTbRl,
+    LayoutNone,
+    LayoutHidden,
+    LayoutDotted,
+    LayoutDashed,
+    LayoutSolid,
+    LayoutDouble,
+    LayoutGroove,
+    LayoutRidge,
+    LayoutInset,
+    LayoutOutset,
+    LayoutNormal,
+    LayoutAuto,
+    LayoutCenter,
+    LayoutJustify,
+    LayoutMiddle,
+    LayoutUnderline,
+    LayoutOverline,
+    LayoutLineThrough,
+    LayoutDistribute,
+    LayoutMinus90Degree,
+    LayoutZeroDegree,
+    Layout90Degree,
+    Layout180Degree,
+    Layout270Degree,
+    LayoutDisc,
+    LayoutCircle,
+    LayoutSquare,
+    LayoutDecimal,
+    LayoutUpperRoman,
+    LayoutLowerRoman,
+    LayoutUpperAlpha,
+    LayoutLowerAlpha,
+    LayoutRB,
+    LayoutCB,
+    LayoutPB,
+    LayoutTV,
+    LayoutOn,
+    LayoutOff,
+    LayoutNeutral,
+    LayoutRow,
+    LayoutColumn,
+    LayoutBoth,
+    LayoutLeft,
+    LayoutTop,
+    LayoutBottom,
+    LayoutRight,
+    LayoutPagination,
+    LayoutLayout,
+    LayoutPage,
+    LayoutBackground,
+    LayoutHeader,
+    LayoutFooter,
+    LayoutWatermark,
+} LayoutEnum;
+class IPDF_LayoutElement
+{
+public:
+
+    virtual ~IPDF_LayoutElement() {};
+
+
+    virtual LayoutType	GetType() = 0;
+
+    virtual int		CountAttrValues(LayoutAttr attr_type) = 0;
+
+
+    virtual LayoutEnum	GetEnumAttr(LayoutAttr attr_type, int index = 0) = 0;
+
+    virtual FX_FLOAT	GetNumberAttr(LayoutAttr attr_type, int index = 0) = 0;
+
+    virtual FX_COLORREF	GetColorAttr(LayoutAttr attr_type, int index = 0) = 0;
+
+
+    virtual int		CountChildren() = 0;
+
+
+    virtual IPDF_LayoutElement* GetChild(int index) = 0;
+
+
+    virtual IPDF_LayoutElement* GetParent() = 0;
+
+
+    virtual int		CountObjects() = 0;
+
+    virtual CPDF_PageObject*	GetObject(int index) = 0;
+};
+typedef enum {
+    LayoutReady,
+    LayoutFinished,
+    LayoutToBeContinued,
+    LayoutError
+} LayoutStatus;
+#define RF_PARSER_IMAGE		0x1
+#define RF_PARSER_DEBUGINFO	0x2
+#define RF_PARSER_PAGEMODE	0x4
+#define RF_PARSER_READERORDER	0x8
+class IPDF_LayoutProcessor
+{
+public:
+
+    virtual ~IPDF_LayoutProcessor() {};
+
+    static IPDF_LayoutProcessor* Create_LayoutProcessor_Reflow(FX_FLOAT TopIndent, FX_FLOAT fWidth, FX_FLOAT fHeight, void* pReflowedPage, int flags, FX_FLOAT lineSpace = 0);
+
+    static IPDF_LayoutProcessor* Create_LayoutProcessor_2HTML(FX_LPCSTR fileName);
+
+    virtual LayoutStatus	StartProcess(IPDF_LayoutElement* pElement, IFX_Pause* pPause, const CFX_AffineMatrix* pPDFMatrix = NULL) = 0;
+
+    virtual LayoutStatus	Continue() = 0;
+    virtual int				GetPosition() = 0;
+};
+#define LP_Lang_Unknow	 		0x0
+#define LP_Lang_English	 		0x1
+#define LP_Lang_French			0x2
+#define LP_Lang_Italian			0x4
+#define LP_Lang_German			0x8
+#define LP_Lang_Spanish			0x10
+#define LP_Lang_Polish			0x20
+#define LP_Lang_Russian			0x40
+#define LP_Lang_ChinesePRC		0x80
+#define LP_Lang_ChineseTaiwan	0x100
+#define LP_Lang_Japanese		0x200
+#define LP_Lang_Korean			0x400
+#define LP_Lang_Portuguese		0x800
+#define LP_Lang_Turkish			0x1000
+#define LP_Lang_Dutch			0x2000
+typedef struct _LayoutProviderStyle {
+    _LayoutProviderStyle()
+    {
+        m_Language = LP_Lang_Unknow;
+        m_bIgnoreInvisibleText = TRUE;
+    }
+    FX_INT32	m_Language;
+    FX_BOOL		m_bIgnoreInvisibleText;
+} LAYOUTPROVIDER_STYLE;
+class IPDF_LayoutProvider
+{
+public:
+
+    virtual ~IPDF_LayoutProvider() {};
+
+    static IPDF_LayoutProvider* Create_LayoutProvider_TaggedPDF(CPDF_PageObjects* pPageObjs);
+
+    static IPDF_LayoutProvider* Create_LayoutProvider_AutoReflow(CPDF_PageObjects* pPageObjs, FX_BOOL bReadOrder);
+
+    virtual void			SetLayoutProviderStyle(LAYOUTPROVIDER_STYLE Style) = 0;
+
+
+
+
+    virtual LayoutStatus	StartLoad(IFX_Pause* pPause = NULL) = 0;
+
+    virtual LayoutStatus	Continue() = 0;
+    virtual int				GetPosition() = 0;
+
+
+    virtual IPDF_LayoutElement* GetRoot() = 0;
+};
+#endif
diff --git a/core/include/reflow/reflowengine.h b/core/include/reflow/reflowengine.h
new file mode 100644
index 0000000..e6a5265
--- /dev/null
+++ b/core/include/reflow/reflowengine.h
@@ -0,0 +1,76 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef _REFLOW_ENGINE_H
+#define _REFLOW_ENGINE_H
+#include "../fpdfapi/fpdf_render.h"
+#include "../fpdftext/fpdf_text.h"
+#include "fpdf_layout.h"
+#include "../fpdfapi/fpdf_pageobj.h"
+#include "../fpdfdoc/fpdf_tagged.h"
+class IPDF_ReflowedPage
+{
+public:
+    static IPDF_ReflowedPage* Create();
+
+    virtual ~IPDF_ReflowedPage() {}
+    virtual CFX_PrivateData*	GetPrivateDataCtrl() = 0;
+
+
+    virtual void		GetDisplayMatrix(CFX_AffineMatrix& matrix, FX_INT32 xPos, FX_INT32 yPos, FX_INT32 xSize, FX_INT32 ySize, FX_INT32 iRotate, const CFX_AffineMatrix* pPageMatrix) = 0;
+    virtual FX_FLOAT	GetPageHeight() = 0;
+    virtual FX_FLOAT	GetPageWidth() = 0;
+    virtual void		FocusGetData(const CFX_AffineMatrix matrix, FX_INT32 x, FX_INT32 y, CFX_ByteString& str) = 0;
+    virtual FX_BOOL		FocusGetPosition(const CFX_AffineMatrix matrix, CFX_ByteString str, FX_INT32& x, FX_INT32& y) = 0;
+};
+typedef struct _RF_ParseStyle {
+    _RF_ParseStyle()
+    {
+        m_LineSpace = 0;
+    };
+    FX_FLOAT m_LineSpace;
+} RF_ParseStyle;
+class IPDF_ProgressiveReflowPageParser
+{
+public:
+    static IPDF_ProgressiveReflowPageParser* Create();
+    static FX_BOOL	IsTaggedPage(CPDF_PageObjects*pPage);
+
+    virtual ~IPDF_ProgressiveReflowPageParser() {}
+    typedef enum { Ready, ToBeContinued, Done, Failed } ParseStatus;
+
+    virtual ParseStatus		GetStatus() = 0;
+    virtual void			SetParserStyle(RF_ParseStyle style) = 0;
+    virtual void			Start(IPDF_ReflowedPage* pReflowPage, CPDF_Page* pPage, FX_FLOAT TopIndent, FX_FLOAT fWidth, FX_FLOAT fHeight, IFX_Pause* pPause, int flags) = 0;
+    virtual void			Continue(IFX_Pause* pPause) = 0;
+
+    virtual int				GetPosition() = 0;
+
+
+    virtual void			Clear() = 0;
+};
+class IPDF_ProgressiveReflowPageRender
+{
+public:
+    static IPDF_ProgressiveReflowPageRender* Create();
+
+    virtual ~IPDF_ProgressiveReflowPageRender() {}
+    typedef enum { Ready, ToBeContinued, Waiting, Done, Failed } RenderStatus;
+
+    virtual RenderStatus	GetStatus() = 0;
+
+
+    virtual void		Start(IPDF_ReflowedPage* pReflowPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pMatrix, IFX_Pause* pPause, int DitherBits ) = 0;
+    virtual void		Continue(IFX_Pause* pPause) = 0;
+    virtual int			GetPosition() = 0;
+
+
+    virtual void				Clear() = 0;
+};
+IPDF_ReflowedPage* Create_ReflowPage();
+IPDF_ProgressiveReflowPageParser* Create_ReflowPageParser();
+IPDF_ProgressiveReflowPageRender* Create_ReflowPageRender();
+#endif
diff --git a/core/include/thirdparties/freetype/foxitnames.h b/core/include/thirdparties/freetype/foxitnames.h
new file mode 100644
index 0000000..5749f9b
--- /dev/null
+++ b/core/include/thirdparties/freetype/foxitnames.h
@@ -0,0 +1,283 @@
+#ifndef _FX_FREETYPE_DONT_RENAME_

+// To avoid any possible linking confliction, we rename all FreeType exported names

+

+#define FT_Init_FreeType FPDFAPI_FT_Init_FreeType

+#define FT_Done_FreeType FPDFAPI_FT_Done_FreeType

+#define FT_New_Face		FPDFAPI_FT_New_Face

+#define FT_Select_Charmap FPDFAPI_FT_Select_Charmap 

+#define FT_Done_Face FPDFAPI_FT_Done_Face 

+#define FT_Get_Charmap_Index FPDFAPI_FT_Get_Charmap_Index 

+#define FT_New_Memory_Face FPDFAPI_FT_New_Memory_Face 

+#define FT_MulDiv FPDFAPI_FT_MulDiv 

+#define FT_Vector_Transform FPDFAPI_FT_Vector_Transform 

+#define FT_Cos FPDFAPI_FT_Cos 

+#define FT_Sin FPDFAPI_FT_Sin 

+#define FT_Load_Glyph FPDFAPI_FT_Load_Glyph 

+#define FT_DivFix FPDFAPI_FT_DivFix 

+#define FT_Realloc FPDFAPI_FT_Realloc 

+#define FT_Alloc FPDFAPI_FT_Alloc 

+#define FT_Get_Char_Index FPDFAPI_FT_Get_Char_Index 

+#define FT_GlyphLoader_CheckPoints FPDFAPI_FT_GlyphLoader_CheckPoints 

+#define FT_GlyphLoader_Add FPDFAPI_FT_GlyphLoader_Add 

+#define FT_GlyphLoader_CheckSubGlyphs FPDFAPI_FT_GlyphLoader_CheckSubGlyphs 

+#define FT_Outline_Translate FPDFAPI_FT_Outline_Translate 

+#define FT_Outline_Transform FPDFAPI_FT_Outline_Transform 

+#define FT_Outline_Get_CBox FPDFAPI_FT_Outline_Get_CBox 

+#define FT_GlyphLoader_Rewind FPDFAPI_FT_GlyphLoader_Rewind 

+#define FT_GlyphLoader_CopyPoints FPDFAPI_FT_GlyphLoader_CopyPoints 

+#define FT_GlyphLoader_New FPDFAPI_FT_GlyphLoader_New 

+#define FT_GlyphLoader_CreateExtra FPDFAPI_FT_GlyphLoader_CreateExtra 

+#define FT_Free FPDFAPI_FT_Free 

+#define FT_Set_Charmap FPDFAPI_FT_Set_Charmap 

+#define FT_GlyphLoader_Done FPDFAPI_FT_GlyphLoader_Done 

+#define _debug_mem_dummy FPDFAPI__debug_mem_dummy 

+#define _debug_mem_dummy FPDFAPI__debug_mem_dummy 

+#define FT_QAlloc FPDFAPI_FT_QAlloc 

+#define FT_QRealloc FPDFAPI_FT_QRealloc 

+#define FT_List_Find FPDFAPI_FT_List_Find 

+#define FT_List_Add FPDFAPI_FT_List_Add 

+#define FT_List_Insert FPDFAPI_FT_List_Insert 

+#define FT_List_Remove FPDFAPI_FT_List_Remove 

+#define FT_List_Up FPDFAPI_FT_List_Up 

+#define FT_List_Iterate FPDFAPI_FT_List_Iterate 

+#define FT_List_Finalize FPDFAPI_FT_List_Finalize 

+#define ft_highpow2 FPDFAPI_ft_highpow2 

+#define FT_Stream_OpenMemory FPDFAPI_FT_Stream_OpenMemory 

+#define FT_Stream_Close FPDFAPI_FT_Stream_Close 

+#define FT_Stream_Seek FPDFAPI_FT_Stream_Seek 

+#define FT_Stream_Skip FPDFAPI_FT_Stream_Skip 

+#define FT_Stream_Pos FPDFAPI_FT_Stream_Pos 

+#define FT_Stream_ReadAt FPDFAPI_FT_Stream_ReadAt 

+#define FT_Stream_Read FPDFAPI_FT_Stream_Read 

+#define FT_Stream_TryRead FPDFAPI_FT_Stream_TryRead 

+#define FT_Stream_EnterFrame FPDFAPI_FT_Stream_EnterFrame 

+#define FT_Stream_ExtractFrame FPDFAPI_FT_Stream_ExtractFrame 

+#define FT_Stream_ReleaseFrame FPDFAPI_FT_Stream_ReleaseFrame 

+#define FT_Stream_ExitFrame FPDFAPI_FT_Stream_ExitFrame 

+#define FT_Stream_GetChar FPDFAPI_FT_Stream_GetChar 

+#define FT_Stream_GetShort FPDFAPI_FT_Stream_GetShort 

+#define FT_Stream_GetShortLE FPDFAPI_FT_Stream_GetShortLE 

+#define FT_Stream_GetOffset FPDFAPI_FT_Stream_GetOffset 

+#define FT_Stream_GetLong FPDFAPI_FT_Stream_GetLong 

+#define FT_Stream_GetLongLE FPDFAPI_FT_Stream_GetLongLE 

+#define FT_Stream_ReadChar FPDFAPI_FT_Stream_ReadChar 

+#define FT_Stream_ReadShort FPDFAPI_FT_Stream_ReadShort 

+#define FT_Stream_ReadShortLE FPDFAPI_FT_Stream_ReadShortLE 

+#define FT_Stream_ReadOffset FPDFAPI_FT_Stream_ReadOffset 

+#define FT_Stream_ReadLong FPDFAPI_FT_Stream_ReadLong 

+#define FT_Stream_ReadLongLE FPDFAPI_FT_Stream_ReadLongLE 

+#define FT_Stream_ReadFields FPDFAPI_FT_Stream_ReadFields 

+#define FT_RoundFix FPDFAPI_FT_RoundFix 

+#define FT_CeilFix FPDFAPI_FT_CeilFix 

+#define FT_FloorFix FPDFAPI_FT_FloorFix 

+#define FT_Sqrt32 FPDFAPI_FT_Sqrt32 

+#define FT_SqrtFixed FPDFAPI_FT_SqrtFixed 

+#define FT_Tan FPDFAPI_FT_Tan 

+#define FT_Atan2 FPDFAPI_FT_Atan2 

+#define FT_Vector_Unit FPDFAPI_FT_Vector_Unit 

+#define FT_Vector_Rotate FPDFAPI_FT_Vector_Rotate 

+#define FT_Vector_Length FPDFAPI_FT_Vector_Length 

+#define FT_Vector_Polarize FPDFAPI_FT_Vector_Polarize 

+#define FT_Vector_From_Polar FPDFAPI_FT_Vector_From_Polar 

+#define FT_Angle_Diff FPDFAPI_FT_Angle_Diff 

+#define FT_Outline_Decompose FPDFAPI_FT_Outline_Decompose 

+#define FT_Outline_Done_Internal FPDFAPI_FT_Outline_Done_Internal 

+#define FT_Outline_New_Internal FPDFAPI_FT_Outline_New_Internal 

+#define FT_Outline_New FPDFAPI_FT_Outline_New 

+#define FT_Outline_Check FPDFAPI_FT_Outline_Check 

+#define FT_Outline_Copy FPDFAPI_FT_Outline_Copy 

+#define FT_Outline_Done FPDFAPI_FT_Outline_Done 

+#define FT_Outline_Reverse FPDFAPI_FT_Outline_Reverse 

+#define FT_Set_Renderer FPDFAPI_FT_Set_Renderer 

+#define FT_Lookup_Renderer FPDFAPI_FT_Lookup_Renderer 

+#define FT_Outline_Render FPDFAPI_FT_Outline_Render 

+#define FT_Outline_Get_Bitmap FPDFAPI_FT_Outline_Get_Bitmap 

+#define FT_Outline_Get_Orientation FPDFAPI_FT_Outline_Get_Orientation 

+#define FT_Outline_Embolden FPDFAPI_FT_Outline_Embolden 

+#define FT_GlyphLoader_Reset FPDFAPI_FT_GlyphLoader_Reset 

+#define FT_GlyphLoader_Prepare FPDFAPI_FT_GlyphLoader_Prepare 

+#define ft_service_list_lookup FPDFAPI_ft_service_list_lookup 

+#define ft_validator_init FPDFAPI_ft_validator_init 

+#define ft_validator_run FPDFAPI_ft_validator_run 

+#define ft_validator_error FPDFAPI_ft_validator_error 

+#define FT_Stream_New FPDFAPI_FT_Stream_New 

+#define FT_Stream_Free FPDFAPI_FT_Stream_Free 

+#define ft_glyphslot_free_bitmap FPDFAPI_ft_glyphslot_free_bitmap 

+#define ft_glyphslot_set_bitmap FPDFAPI_ft_glyphslot_set_bitmap 

+#define FT_GlyphSlot_Own_Bitmap FPDFAPI_FT_GlyphSlot_Own_Bitmap

+#define ft_glyphslot_alloc_bitmap FPDFAPI_ft_glyphslot_alloc_bitmap 

+#define FT_New_GlyphSlot FPDFAPI_FT_New_GlyphSlot 

+#define FT_Done_GlyphSlot FPDFAPI_FT_Done_GlyphSlot 

+#define FT_Set_Transform FPDFAPI_FT_Set_Transform 

+#define FT_Render_Glyph_Internal FPDFAPI_FT_Render_Glyph_Internal 

+#define FT_Render_Glyph FPDFAPI_FT_Render_Glyph 

+#define FT_Load_Char FPDFAPI_FT_Load_Char 

+#define FT_New_Size FPDFAPI_FT_New_Size 

+#define FT_Open_Face FPDFAPI_FT_Open_Face 

+#define FT_Attach_Stream FPDFAPI_FT_Attach_Stream 

+#define FT_Attach_File FPDFAPI_FT_Attach_File 

+#define FT_Done_Size FPDFAPI_FT_Done_Size 

+#define FT_Set_Char_Size FPDFAPI_FT_Set_Char_Size 

+#define FT_Set_Pixel_Sizes FPDFAPI_FT_Set_Pixel_Sizes 

+#define FT_Get_Kerning FPDFAPI_FT_Get_Kerning 

+#define FT_CMap_Done FPDFAPI_FT_CMap_Done 

+#define FT_CMap_New FPDFAPI_FT_CMap_New 

+#define FT_Get_Next_Char FPDFAPI_FT_Get_Next_Char 

+#define FT_Get_First_Char FPDFAPI_FT_Get_First_Char 

+#define FT_Get_Name_Index FPDFAPI_FT_Get_Name_Index 

+#define FT_Get_Glyph_Name FPDFAPI_FT_Get_Glyph_Name 

+#define FT_Get_Postscript_Name FPDFAPI_FT_Get_Postscript_Name 

+#define FT_Get_Sfnt_Table FPDFAPI_FT_Get_Sfnt_Table 

+#define FT_Load_Sfnt_Table FPDFAPI_FT_Load_Sfnt_Table 

+#define FT_Sfnt_Table_Info FPDFAPI_FT_Sfnt_Table_Info 

+#define FT_Get_CMap_Language_ID FPDFAPI_FT_Get_CMap_Language_ID 

+#define FT_Activate_Size FPDFAPI_FT_Activate_Size 

+#define FT_Get_Renderer FPDFAPI_FT_Get_Renderer 

+#define FT_Remove_Module FPDFAPI_FT_Remove_Module 

+#define FT_Add_Module FPDFAPI_FT_Add_Module 

+#define FT_Get_Module FPDFAPI_FT_Get_Module 

+#define FT_Get_Module_Interface FPDFAPI_FT_Get_Module_Interface 

+#define ft_module_get_service FPDFAPI_ft_module_get_service 

+#define FT_New_Library FPDFAPI_FT_New_Library 

+#define FT_Library_Version FPDFAPI_FT_Library_Version 

+#define FT_Done_Library FPDFAPI_FT_Done_Library 

+#define FT_Set_Debug_Hook FPDFAPI_FT_Set_Debug_Hook 

+#define FT_Raccess_Get_HeaderInfo FPDFAPI_FT_Raccess_Get_HeaderInfo 

+#define FT_Raccess_Get_DataOffsets FPDFAPI_FT_Raccess_Get_DataOffsets 

+#define FT_Raccess_Guess FPDFAPI_FT_Raccess_Guess

+#define af_dummy_script_class FPDFAPI_af_dummy_script_class

+#define af_latin_script_class FPDFAPI_af_latin_script_class

+#define af_cjk_script_class FPDFAPI_af_cjk_script_class

+#define af_autofitter_service FPDFAPI_af_autofitter_service

+#define autofit_module_class FPDFAPI_autofit_module_class

+#define cff_cmap_encoding_class_rec FPDFAPI_cff_cmap_encoding_class_rec

+#define cff_cmap_unicode_class_rec FPDFAPI_cff_cmap_unicode_class_rec

+#define cff_driver_class FPDFAPI_cff_driver_class

+#define FT_Stream_Open FPDFAPI_FT_Stream_Open

+#define FT_New_Memory FPDFAPI_FT_New_Memory

+#define FT_Done_Memory FPDFAPI_FT_Done_Memory

+#define ft_mem_qalloc FPDFAPI_ft_mem_qalloc

+#define ft_mem_alloc FPDFAPI_ft_mem_alloc

+#define ft_mem_free FPDFAPI_ft_mem_free

+#define ft_mem_qrealloc FPDFAPI_ft_mem_qrealloc

+#define ft_mem_realloc FPDFAPI_ft_mem_realloc

+#define FT_Get_TrueType_Engine_Type FPDFAPI_FT_Get_TrueType_Engine_Type

+#define ft_stub_set_char_sizes FPDFAPI_ft_stub_set_char_sizes

+#define ft_stub_set_pixel_sizes FPDFAPI_ft_stub_set_pixel_sizes

+#define FT_Get_SubGlyph_Info FPDFAPI_FT_Get_SubGlyph_Info

+#define FT_Get_Sfnt_Name_Count FPDFAPI_FT_Get_Sfnt_Name_Count

+#define FT_Get_Sfnt_Name FPDFAPI_FT_Get_Sfnt_Name

+#define FT_Bitmap_New FPDFAPI_FT_Bitmap_New

+#define FT_Bitmap_Copy FPDFAPI_FT_Bitmap_Copy

+#define FT_Bitmap_Done FPDFAPI_FT_Bitmap_Done

+#define FT_Bitmap_Convert FPDFAPI_FT_Bitmap_Convert

+#define FT_Bitmap_Embolden FPDFAPI_FT_Bitmap_Embolden

+#define ft_bitmap_glyph_class FPDFAPI_ft_bitmap_glyph_class

+#define ft_outline_glyph_class FPDFAPI_ft_outline_glyph_class

+#define FT_Matrix_Multiply FPDFAPI_FT_Matrix_Multiply

+#define FT_Matrix_Invert FPDFAPI_FT_Matrix_Invert

+#define FT_Done_Glyph FPDFAPI_FT_Done_Glyph

+#define FT_Glyph_Copy FPDFAPI_FT_Glyph_Copy

+#define FT_Get_Glyph FPDFAPI_FT_Get_Glyph

+#define FT_Glyph_Transform FPDFAPI_FT_Glyph_Transform

+#define FT_Glyph_Get_CBox FPDFAPI_FT_Glyph_Get_CBox

+#define FT_Glyph_To_Bitmap FPDFAPI_FT_Glyph_To_Bitmap

+#define FT_Add_Default_Modules FPDFAPI_FT_Add_Default_Modules

+#define FT_Get_Multi_Master FPDFAPI_FT_Get_Multi_Master

+#define FT_Get_MM_Var FPDFAPI_FT_Get_MM_Var

+#define FT_Set_MM_Design_Coordinates FPDFAPI_FT_Set_MM_Design_Coordinates

+#define FT_Set_Var_Design_Coordinates FPDFAPI_FT_Set_Var_Design_Coordinates

+#define FT_Set_MM_Blend_Coordinates FPDFAPI_FT_Set_MM_Blend_Coordinates

+#define FT_Set_Var_Blend_Coordinates FPDFAPI_FT_Set_Var_Blend_Coordinates

+#define ps_table_funcs FPDFAPI_ps_table_funcs

+#define ps_parser_funcs FPDFAPI_ps_parser_funcs

+#define t1_builder_funcs FPDFAPI_t1_builder_funcs

+#define t1_decoder_funcs FPDFAPI_t1_decoder_funcs

+#define afm_parser_funcs FPDFAPI_afm_parser_funcs

+#define t1_cmap_classes FPDFAPI_t1_cmap_classes

+#define t1_cmap_standard_class_rec FPDFAPI_t1_cmap_standard_class_rec

+#define t1_cmap_expert_class_rec FPDFAPI_t1_cmap_expert_class_rec

+#define t1_cmap_custom_class_rec FPDFAPI_t1_cmap_custom_class_rec

+#define t1_cmap_unicode_class_rec FPDFAPI_t1_cmap_unicode_class_rec

+#define psaux_module_class FPDFAPI_psaux_module_class

+#define pshinter_module_class FPDFAPI_pshinter_module_class

+#define ps_hints_apply FPDFAPI_ps_hints_apply

+#define psnames_module_class FPDFAPI_psnames_module_class

+#define ft_raster1_renderer_class FPDFAPI_ft_raster1_renderer_class

+#define ft_standard_raster FPDFAPI_ft_standard_raster

+#define ft_raster5_renderer_class FPDFAPI_ft_raster5_renderer_class

+#define tt_cmap0_class_rec FPDFAPI_tt_cmap0_class_rec

+#define tt_cmap2_class_rec FPDFAPI_tt_cmap2_class_rec

+#define tt_cmap4_class_rec FPDFAPI_tt_cmap4_class_rec

+#define tt_cmap6_class_rec FPDFAPI_tt_cmap6_class_rec

+#define tt_cmap8_class_rec FPDFAPI_tt_cmap8_class_rec

+#define tt_cmap10_class_rec FPDFAPI_tt_cmap10_class_rec

+#define tt_cmap12_class_rec FPDFAPI_tt_cmap12_class_rec

+#define tt_cmap13_class_rec FPDFAPI_tt_cmap13_class_rec

+#define tt_cmap14_class_rec FPDFAPI_tt_cmap14_class_rec

+#define sfnt_module_class FPDFAPI_sfnt_module_class

+#define ft_grays_raster FPDFAPI_ft_grays_raster

+#define ft_smooth_renderer_class FPDFAPI_ft_smooth_renderer_class

+#define ft_smooth_lcd_renderer_class FPDFAPI_ft_smooth_lcd_renderer_class

+#define ft_smooth_lcdv_renderer_class FPDFAPI_ft_smooth_lcdv_renderer_class

+#define tt_default_graphics_state FPDFAPI_tt_default_graphics_state

+#define tt_driver_class FPDFAPI_tt_driver_class

+#define TT_RunIns FPDFAPI_TT_RunIns

+#define TT_New_Context FPDFAPI_TT_New_Context

+#define t1_driver_class FPDFAPI_t1_driver_class

+#define t1cid_driver_class FPDFAPI_t1cid_driver_class

+#define FT_Get_Track_Kerning FPDFAPI_FT_Get_Track_Kerning

+#define FT_Match_Size FPDFAPI_FT_Match_Size

+#define FT_MulDiv_No_Round FPDFAPI_FT_MulDiv_No_Round

+#define FT_Request_Metrics FPDFAPI_FT_Request_Metrics

+#define FT_Request_Size FPDFAPI_FT_Request_Size

+#define FT_Select_Metrics FPDFAPI_FT_Select_Metrics

+#define FT_Select_Size FPDFAPI_FT_Select_Size

+#define ft_synthesize_vertical_metrics FPDFAPI_ft_synthesize_vertical_metrics

+#define New_Profile FPDFAPI_New_Profile

+#define End_Profile FPDFAPI_End_Profile

+#define Insert_Y_Turn FPDFAPI_Insert_Y_Turn 

+#define Split_Conic FPDFAPI_Split_Conic  

+#define Split_Cubic FPDFAPI_Split_Cubic

+#define Line_Up FPDFAPI_Line_Up 

+#define Bezier_Up FPDFAPI_Bezier_Up 

+#define Bezier_Down FPDFAPI_Bezier_Down 

+#define Line_To FPDFAPI_Line_To

+#define Conic_To FPDFAPI_Conic_To 

+#define Cubic_To FPDFAPI_Cubic_To

+#define Decompose_Curve FPDFAPI_Decompose_Curve

+#define Convert_Glyph FPDFAPI_Convert_Glyph 

+#define Sort FPDFAPI_Sort 

+#define Vertical_Sweep_Init FPDFAPI_Vertical_Sweep_Init 

+#define Vertical_Sweep_Span FPDFAPI_Vertical_Sweep_Span 

+#define Vertical_Sweep_Drop FPDFAPI_Vertical_Sweep_Drop 

+#define Vertical_Sweep_Step FPDFAPI_Vertical_Sweep_Step 

+#define Horizontal_Sweep_Init FPDFAPI_Horizontal_Sweep_Init 

+#define Horizontal_Sweep_Span FPDFAPI_Horizontal_Sweep_Span 

+#define Horizontal_Sweep_Drop FPDFAPI_Horizontal_Sweep_Drop 

+#define Horizontal_Sweep_Step FPDFAPI_Horizontal_Sweep_Step 

+#define Draw_Sweep FPDFAPI_Draw_Sweep 

+#define Render_Single_Pass FPDFAPI_Render_Single_Pass 

+#define Render_Glyph FPDFAPI_Render_Glyph  

+#define Finalize_Profile_Table FPDFAPI_Finalize_Profile_Table 

+#define InsNew FPDFAPI_InsNew 

+#define DelOld FPDFAPI_DelOld

+#define FT_MulFix FPDFAPI_FT_MulFix

+#define FT_Matrix_Multiply_Scaled FPDFAPI_FT_Matrix_Multiply_Scaled

+#define FT_Vector_Transform_Scaled FPDFAPI_FT_Vector_Transform_Scaled

+#define ft_corner_orientation FPDFAPI_ft_corner_orientation

+#define ft_corner_is_flat FPDFAPI_ft_corner_is_flat

+#define FT_Get_CMap_Format FPDFAPI_FT_Get_CMap_Format

+#define ft_mem_strcpyn FPDFAPI_ft_mem_strcpyn

+#define ft_mem_dup FPDFAPI_ft_mem_dup

+#define ft_mem_strdup FPDFAPI_ft_mem_strdup

+#define FT_Face_GetCharVariantIsDefault FPDFAPI_FT_Face_GetCharVariantIsDefault

+#define FT_Face_GetCharsOfVariant FPDFAPI_FT_Face_GetCharsOfVariant

+#define FT_Face_GetVariantsOfChar FPDFAPI_FT_Face_GetVariantsOfChar

+#define FT_Face_GetVariantSelectors FPDFAPI_FT_Face_GetVariantSelectors

+#define FT_Face_GetCharVariantIndex FPDFAPI_FT_Face_GetCharVariantIndex

+#define FT_Get_Advances FPDFAPI_FT_Get_Advances

+#define FT_Get_Advance FPDFAPI_FT_Get_Advance

+#define FT_Library_SetLcdFilter FPDFAPI_FT_Library_SetLcdFilter

+ 

+#endif // !_FX_FREETYPE_DONT_RENAME_

diff --git a/core/include/thirdparties/freetype/freetype/config/ftconfig.h b/core/include/thirdparties/freetype/freetype/config/ftconfig.h
new file mode 100644
index 0000000..e4eb4dc
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/config/ftconfig.h
@@ -0,0 +1,599 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftconfig.h                                                             */
+/*                                                                         */
+/*    ANSI-specific configuration file (specification only).               */
+/*                                                                         */
+/*  Copyright 1996-2004, 2006-2008, 2010-2011, 2013 by                     */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This header file contains a number of macro definitions that are used */
+  /* by the rest of the engine.  Most of the macros here are automatically */
+  /* determined at compile time, and you should not need to change it to   */
+  /* port FreeType, except to compile the library with a non-ANSI          */
+  /* compiler.                                                             */
+  /*                                                                       */
+  /* Note however that if some specific modifications are needed, we       */
+  /* advise you to place a modified copy in your build directory.          */
+  /*                                                                       */
+  /* The build directory is usually `freetype/builds/<system>', and        */
+  /* contains system-specific files that are always included first when    */
+  /* building the library.                                                 */
+  /*                                                                       */
+  /* This ANSI version should stay in `include/freetype/config'.           */
+  /*                                                                       */
+  /*************************************************************************/
+
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
+
+#include "../../ft2build.h"
+#include "ftoption.h"
+#include "ftstdlib.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
+  /*                                                                       */
+  /* These macros can be toggled to suit a specific system.  The current   */
+  /* ones are defaults used to compile FreeType in an ANSI C environment   */
+  /* (16bit compilers are also supported).  Copy this file to your own     */
+  /* `freetype/builds/<system>' directory, and edit it to port the engine. */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /* There are systems (like the Texas Instruments 'C54x) where a `char' */
+  /* has 16 bits.  ANSI C says that sizeof(char) is always 1.  Since an  */
+  /* `int' has 16 bits also for this system, sizeof(int) gives 1 which   */
+  /* is probably unexpected.                                             */
+  /*                                                                     */
+  /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a      */
+  /* `char' type.                                                        */
+
+#ifndef FT_CHAR_BIT
+#define FT_CHAR_BIT  CHAR_BIT
+#endif
+
+
+  /* The size of an `int' type.  */
+#if                                 FT_UINT_MAX == 0xFFFFUL
+#define FT_SIZEOF_INT  (16 / FT_CHAR_BIT)
+#elif                               FT_UINT_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_INT  (32 / FT_CHAR_BIT)
+#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_INT  (64 / FT_CHAR_BIT)
+#else
+#error "Unsupported size of `int' type!"
+#endif
+
+  /* The size of a `long' type.  A five-byte `long' (as used e.g. on the */
+  /* DM642) is recognized but avoided.                                   */
+#if                                  FT_ULONG_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_LONG  (32 / FT_CHAR_BIT)
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
+#define FT_SIZEOF_LONG  (32 / FT_CHAR_BIT)
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_LONG  (64 / FT_CHAR_BIT)
+#else
+#error "Unsupported size of `long' type!"
+#endif
+
+
+  /* FT_UNUSED is a macro used to indicate that a given parameter is not  */
+  /* used -- this is only used to get rid of unpleasant compiler warnings */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg )  ( (arg) = (arg) )
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                     AUTOMATIC CONFIGURATION MACROS                    */
+  /*                                                                       */
+  /* These macros are computed from the ones defined above.  Don't touch   */
+  /* their definition, unless you know precisely what you are doing.  No   */
+  /* porter should need to mess with them.                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Mac support                                                           */
+  /*                                                                       */
+  /*   This is the only necessary change, so it is defined here instead    */
+  /*   providing a new configuration file.                                 */
+  /*                                                                       */
+#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
+  /* no Carbon frameworks for 64bit 10.4.x */
+  /* AvailabilityMacros.h is available since Mac OS X 10.2,        */
+  /* so guess the system version by maximum errno before inclusion */
+#include <errno.h>
+#ifdef ECANCELED /* defined since 10.2 */
+#include "AvailabilityMacros.h"
+#endif
+#if defined( __LP64__ ) && \
+    ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
+#undef FT_MACINTOSH
+#endif
+
+#elif defined( __SC__ ) || defined( __MRC__ )
+  /* Classic MacOS compilers */
+#include "ConditionalMacros.h"
+#if TARGET_OS_MAC
+#define FT_MACINTOSH 1
+#endif
+
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    basic_types                                                        */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Int16                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for a 16bit signed integer type.                         */
+  /*                                                                       */
+  typedef signed short  FT_Int16;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_UInt16                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for a 16bit unsigned integer type.                       */
+  /*                                                                       */
+  typedef unsigned short  FT_UInt16;
+
+  /* */
+
+
+  /* this #if 0 ... #endif clause is for documentation purposes */
+#if 0
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Int32                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for a 32bit signed integer type.  The size depends on    */
+  /*    the configuration.                                                 */
+  /*                                                                       */
+  typedef signed XXX  FT_Int32;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_UInt32                                                          */
+  /*                                                                       */
+  /*    A typedef for a 32bit unsigned integer type.  The size depends on  */
+  /*    the configuration.                                                 */
+  /*                                                                       */
+  typedef unsigned XXX  FT_UInt32;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Int64                                                           */
+  /*                                                                       */
+  /*    A typedef for a 64bit signed integer type.  The size depends on    */
+  /*    the configuration.  Only defined if there is real 64bit support;   */
+  /*    otherwise, it gets emulated with a structure (if necessary).       */
+  /*                                                                       */
+  typedef signed XXX  FT_Int64;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_UInt64                                                          */
+  /*                                                                       */
+  /*    A typedef for a 64bit unsigned integer type.  The size depends on  */
+  /*    the configuration.  Only defined if there is real 64bit support;   */
+  /*    otherwise, it gets emulated with a structure (if necessary).       */
+  /*                                                                       */
+  typedef unsigned XXX  FT_UInt64;
+
+  /* */
+
+#endif
+
+#if FT_SIZEOF_INT == (32 / FT_CHAR_BIT)
+
+  typedef signed int      FT_Int32;
+  typedef unsigned int    FT_UInt32;
+
+#elif FT_SIZEOF_LONG == (32 / FT_CHAR_BIT)
+
+  typedef signed long     FT_Int32;
+  typedef unsigned long   FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+
+  /* look up an integer type that is at least 32 bits */
+#if FT_SIZEOF_INT >= (32 / FT_CHAR_BIT)
+
+  typedef int            FT_Fast;
+  typedef unsigned int   FT_UFast;
+
+#elif FT_SIZEOF_LONG >= (32 / FT_CHAR_BIT)
+
+  typedef long           FT_Fast;
+  typedef unsigned long  FT_UFast;
+
+#endif
+
+
+  /* determine whether we have a 64-bit int type for platforms without */
+  /* Autoconf                                                          */
+#if FT_SIZEOF_LONG == (64 / FT_CHAR_BIT)
+
+  /* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64   long
+#define FT_UINT64  unsigned long
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900  /* Visual C++ (and Intel C++) */
+
+  /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64   __int64
+#define FT_UINT64  unsigned __int64
+
+#elif defined( __BORLANDC__ )  /* Borland C++ */
+
+  /* XXXX: We should probably check the value of __BORLANDC__ in order */
+  /*       to test the compiler version.                               */
+
+  /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64   __int64
+#define FT_UINT64  unsigned __int64
+
+#elif defined( __WATCOMC__ )   /* Watcom C++ */
+
+  /* Watcom doesn't provide 64-bit data types */
+
+#elif defined( __MWERKS__ )    /* Metrowerks CodeWarrior */
+
+#define FT_LONG64
+#define FT_INT64   long long int
+#define FT_UINT64  unsigned long long int
+
+#elif defined( __GNUC__ )
+
+  /* GCC provides the `long long' type */
+#define FT_LONG64
+#define FT_INT64   long long int
+#define FT_UINT64  unsigned long long int
+
+#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* A 64-bit data type will create compilation problems if you compile    */
+  /* in strict ANSI mode.  To avoid them, we disable its use if __STDC__   */
+  /* is defined.  You can however ignore this rule by defining the         */
+  /* FT_CONFIG_OPTION_FORCE_INT64 configuration macro.                     */
+  /*                                                                       */
+#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
+
+#ifdef __STDC__
+
+  /* undefine the 64-bit macros in strict ANSI compilation mode */
+#undef FT_LONG64
+#undef FT_INT64
+
+#endif /* __STDC__ */
+
+#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
+
+#ifdef FT_LONG64
+  typedef FT_INT64   FT_Int64;
+  typedef FT_UINT64  FT_UInt64;
+#endif
+
+
+#define FT_BEGIN_STMNT  do {
+#define FT_END_STMNT    } while ( 0 )
+#define FT_DUMMY_STMNT  FT_BEGIN_STMNT FT_END_STMNT
+
+
+#ifndef  FT_CONFIG_OPTION_NO_ASSEMBLER
+  /* Provide assembler fragments for performance-critical functions. */
+  /* These must be defined `static __inline__' with GCC.             */
+
+  /**Johnson add !defined( __thumb__ )*/

+#if (defined( __CC_ARM ) || defined( __ARMCC__ ))&& !defined( __thumb__ )  /* RVCT */
+#define FT_MULFIX_ASSEMBLER  FT_MulFix_arm
+
+  /* documentation is in freetype.h */
+
+  static __inline FT_Int32
+  FT_MulFix_arm( FT_Int32  a,
+                 FT_Int32  b )
+  {
+    register FT_Int32  t, t2;
+
+
+    __asm
+    {
+      smull t2, t,  b,  a           /* (lo=t2,hi=t) = a*b */
+      mov   a,  t,  asr #31         /* a   = (hi >> 31) */
+      add   a,  a,  #0x8000         /* a  += 0x8000 */
+      adds  t2, t2, a               /* t2 += a */
+      adc   t,  t,  #0              /* t  += carry */
+      mov   a,  t2, lsr #16         /* a   = t2 >> 16 */
+      orr   a,  a,  t,  lsl #16     /* a  |= t << 16 */
+    }
+    return a;
+  }
+
+#endif /* __CC_ARM || __ARMCC__ */
+
+
+#ifdef __GNUC__
+
+#if defined( __arm__ ) && !defined( __thumb__ )    && \
+    !( defined( __CC_ARM ) || defined( __ARMCC__ ) )
+#define FT_MULFIX_ASSEMBLER  FT_MulFix_arm
+
+  /* documentation is in freetype.h */
+
+  static __inline__ FT_Int32
+  FT_MulFix_arm( FT_Int32  a,
+                 FT_Int32  b )
+  {
+    register FT_Int32  t, t2;
+
+
+    __asm__ __volatile__ (
+      "smull  %1, %2, %4, %3\n\t"       /* (lo=%1,hi=%2) = a*b */
+      "mov    %0, %2, asr #31\n\t"      /* %0  = (hi >> 31) */
+      "add    %0, %0, #0x8000\n\t"      /* %0 += 0x8000 */
+      "adds   %1, %1, %0\n\t"           /* %1 += %0 */
+      "adc    %2, %2, #0\n\t"           /* %2 += carry */
+      "mov    %0, %1, lsr #16\n\t"      /* %0  = %1 >> 16 */
+      "orr    %0, %0, %2, lsl #16\n\t"  /* %0 |= %2 << 16 */
+      : "=r"(a), "=&r"(t2), "=&r"(t)
+      : "r"(a), "r"(b)
+      : "cc" );
+    return a;
+  }
+
+#endif /* __arm__ && !__thumb__ && !( __CC_ARM || __ARMCC__ ) */
+
+#if defined( __i386__ )
+#define FT_MULFIX_ASSEMBLER  FT_MulFix_i386
+
+  /* documentation is in freetype.h */
+
+  static __inline__ FT_Int32
+  FT_MulFix_i386( FT_Int32  a,
+                  FT_Int32  b )
+  {
+    register FT_Int32  result;
+
+
+    __asm__ __volatile__ (
+      "imul  %%edx\n"
+      "movl  %%edx, %%ecx\n"
+      "sarl  $31, %%ecx\n"
+      "addl  $0x8000, %%ecx\n"
+      "addl  %%ecx, %%eax\n"
+      "adcl  $0, %%edx\n"
+      "shrl  $16, %%eax\n"
+      "shll  $16, %%edx\n"
+      "addl  %%edx, %%eax\n"
+      : "=a"(result), "=d"(b)
+      : "a"(a), "d"(b)
+      : "%ecx", "cc" );
+    return result;
+  }
+
+#endif /* i386 */
+
+#endif /* __GNUC__ */
+
+
+#ifdef _MSC_VER /* Visual C++ */
+
+#ifdef _M_IX86
+
+#define FT_MULFIX_ASSEMBLER  FT_MulFix_i386
+
+  /* documentation is in freetype.h */
+
+  static __inline FT_Int32
+  FT_MulFix_i386( FT_Int32  a,
+                  FT_Int32  b )
+  {
+    register FT_Int32  result;
+
+    __asm
+    {
+      mov eax, a
+      mov edx, b
+      imul edx
+      mov ecx, edx
+      sar ecx, 31
+      add ecx, 8000h
+      add eax, ecx
+      adc edx, 0
+      shr eax, 16
+      shl edx, 16
+      add eax, edx
+      mov result, eax
+    }
+    return result;
+  }
+
+#endif /* _M_IX86 */
+
+#endif /* _MSC_VER */
+
+#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
+
+
+#ifdef FT_CONFIG_OPTION_INLINE_MULFIX
+#ifdef FT_MULFIX_ASSEMBLER
+#define FT_MULFIX_INLINED  FT_MULFIX_ASSEMBLER
+#endif
+#endif
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x )      static  x
+#define FT_LOCAL_DEF( x )  static  x
+
+#else
+
+#ifdef __cplusplus
+#define FT_LOCAL( x )      extern "C"  x
+#define FT_LOCAL_DEF( x )  extern "C"  x
+#else
+#define FT_LOCAL( x )      extern  x
+#define FT_LOCAL_DEF( x )  x
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x )  extern "C"  x
+#else
+#define FT_BASE( x )  extern  x
+#endif
+
+#endif /* !FT_BASE */
+
+
+#ifndef FT_BASE_DEF
+
+#ifdef __cplusplus
+#define FT_BASE_DEF( x )  x
+#else
+#define FT_BASE_DEF( x )  x
+#endif
+
+#endif /* !FT_BASE_DEF */
+
+
+#ifndef FT_EXPORT
+
+#ifdef __cplusplus
+#define FT_EXPORT( x )  extern "C"  x
+#else
+#define FT_EXPORT( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT */
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x )  extern "C"  x
+#else
+#define FT_EXPORT_DEF( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x )  extern "C"  x
+#else
+#define FT_EXPORT_VAR( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+  /* The following macros are needed to compile the library with a   */
+  /* C++ compiler and with 16bit compilers.                          */
+  /*                                                                 */
+
+  /* This is special.  Within C++, you must specify `extern "C"' for */
+  /* functions which are used via function pointers, and you also    */
+  /* must do that for structures which contain function pointers to  */
+  /* assure C linkage -- it's not possible to have (local) anonymous */
+  /* functions which are accessed by (global) function pointers.     */
+  /*                                                                 */
+  /*                                                                 */
+  /* FT_CALLBACK_DEF is used to _define_ a callback function.        */
+  /*                                                                 */
+  /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+  /* contains pointers to callback functions.                        */
+  /*                                                                 */
+  /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable   */
+  /* that contains pointers to callback functions.                   */
+  /*                                                                 */
+  /*                                                                 */
+  /* Some 16bit compilers have to redefine these macros to insert    */
+  /* the infamous `_cdecl' or `__fastcall' declarations.             */
+  /*                                                                 */
+#ifndef FT_CALLBACK_DEF
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x )  extern "C"  x
+#else
+#define FT_CALLBACK_DEF( x )  static  x
+#endif
+#endif /* FT_CALLBACK_DEF */
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE      extern "C"
+#define FT_CALLBACK_TABLE_DEF  extern "C"
+#else
+#define FT_CALLBACK_TABLE      extern
+#define FT_CALLBACK_TABLE_DEF  /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCONFIG_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/config/ftheader.h b/core/include/thirdparties/freetype/freetype/config/ftheader.h
new file mode 100644
index 0000000..d979104
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/config/ftheader.h
@@ -0,0 +1,832 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftheader.h                                                             */
+/*                                                                         */
+/*    Build macros of the FreeType 2 library.                              */
+/*                                                                         */
+/*  Copyright 1996-2008, 2010, 2012, 2013 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+#ifndef __FT_HEADER_H__
+#define __FT_HEADER_H__
+
+
+  /*@***********************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_BEGIN_HEADER                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This macro is used in association with @FT_END_HEADER in header    */
+  /*    files to ensure that the declarations within are properly          */
+  /*    encapsulated in an `extern "C" { .. }' block when included from a  */
+  /*    C++ compiler.                                                      */
+  /*                                                                       */
+#ifdef __cplusplus
+#define FT_BEGIN_HEADER  extern "C" {
+#else
+#define FT_BEGIN_HEADER  /* nothing */
+#endif
+
+
+  /*@***********************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_END_HEADER                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This macro is used in association with @FT_BEGIN_HEADER in header  */
+  /*    files to ensure that the declarations within are properly          */
+  /*    encapsulated in an `extern "C" { .. }' block when included from a  */
+  /*    C++ compiler.                                                      */
+  /*                                                                       */
+#ifdef __cplusplus
+#define FT_END_HEADER  }
+#else
+#define FT_END_HEADER  /* nothing */
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Aliases for the FreeType 2 public and configuration files.            */
+  /*                                                                       */
+  /*************************************************************************/
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    header_file_macros                                                 */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Header File Macros                                                 */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Macro definitions used to #include specific header files.          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The following macros are defined to the name of specific           */
+  /*    FreeType~2 header files.  They can be used directly in #include    */
+  /*    statements as in:                                                  */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      #include "../freetype.h"                                           */
+  /*      #include "../ftmm.h"                                   */
+  /*      #include "../ftglyph.h"                                              */
+  /*    }                                                                  */
+  /*                                                                       */
+  /*    There are several reasons why we are now using macros to name      */
+  /*    public header files.  The first one is that such macros are not    */
+  /*    limited to the infamous 8.3~naming rule required by DOS (and       */
+  /*    `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h').   */
+  /*                                                                       */
+  /*    The second reason is that it allows for more flexibility in the    */
+  /*    way FreeType~2 is installed on a given system.                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /* configuration files */
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CONFIG_CONFIG_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing
+   *   FreeType~2 configuration data.
+   *
+   */
+#ifndef FT_CONFIG_CONFIG_H
+#define FT_CONFIG_CONFIG_H  <freetype/config/ftconfig.h>
+#endif
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CONFIG_STANDARD_LIBRARY_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing
+   *   FreeType~2 interface to the standard C library functions.
+   *
+   */
+#ifndef FT_CONFIG_STANDARD_LIBRARY_H
+#define FT_CONFIG_STANDARD_LIBRARY_H  <freetype/config/ftstdlib.h>
+#endif
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CONFIG_OPTIONS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing
+   *   FreeType~2 project-specific configuration options.
+   *
+   */
+#ifndef FT_CONFIG_OPTIONS_H
+#define FT_CONFIG_OPTIONS_H  <freetype/config/ftoption.h>
+#endif
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CONFIG_MODULES_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   list of FreeType~2 modules that are statically linked to new library
+   *   instances in @FT_Init_FreeType.
+   *
+   */
+#ifndef FT_CONFIG_MODULES_H
+#define FT_CONFIG_MODULES_H  <freetype/config/ftmodule.h>
+#endif
+
+  /* */
+
+  /* public headers */
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_FREETYPE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   base FreeType~2 API.
+   *
+   */
+#define FT_FREETYPE_H  <freetype/freetype.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_ERRORS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   list of FreeType~2 error codes (and messages).
+   *
+   *   It is included by @FT_FREETYPE_H.
+   *
+   */
+#define FT_ERRORS_H  <freetype/fterrors.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_MODULE_ERRORS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   list of FreeType~2 module error offsets (and messages).
+   *
+   */
+#define FT_MODULE_ERRORS_H  <freetype/ftmoderr.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_SYSTEM_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 interface to low-level operations (i.e., memory management
+   *   and stream i/o).
+   *
+   *   It is included by @FT_FREETYPE_H.
+   *
+   */
+#define FT_SYSTEM_H  <freetype/ftsystem.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_IMAGE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing type
+   *   definitions related to glyph images (i.e., bitmaps, outlines,
+   *   scan-converter parameters).
+   *
+   *   It is included by @FT_FREETYPE_H.
+   *
+   */
+#define FT_IMAGE_H  <freetype/ftimage.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_TYPES_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   basic data types defined by FreeType~2.
+   *
+   *   It is included by @FT_FREETYPE_H.
+   *
+   */
+#define FT_TYPES_H  <freetype/fttypes.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_LIST_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   list management API of FreeType~2.
+   *
+   *   (Most applications will never need to include this file.)
+   *
+   */
+#define FT_LIST_H  <freetype/ftlist.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_OUTLINE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   scalable outline management API of FreeType~2.
+   *
+   */
+#define FT_OUTLINE_H  <freetype/ftoutln.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_SIZES_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   API which manages multiple @FT_Size objects per face.
+   *
+   */
+#define FT_SIZES_H  <freetype/ftsizes.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_MODULE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   module management API of FreeType~2.
+   *
+   */
+#define FT_MODULE_H  <freetype/ftmodapi.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_RENDER_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   renderer module management API of FreeType~2.
+   *
+   */
+#define FT_RENDER_H  <freetype/ftrender.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_AUTOHINTER_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing
+   *   structures and macros related to the auto-hinting module.
+   *
+   */
+#define FT_AUTOHINTER_H  <freetype/ftautoh.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CFF_DRIVER_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing
+   *   structures and macros related to the CFF driver module.
+   *
+   */
+#define FT_CFF_DRIVER_H  <freetype/ftcffdrv.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_TRUETYPE_DRIVER_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing
+   *   structures and macros related to the TrueType driver module.
+   *
+   */
+#define FT_TRUETYPE_DRIVER_H  <freetype/ftttdrv.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_TYPE1_TABLES_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   types and API specific to the Type~1 format.
+   *
+   */
+#define FT_TYPE1_TABLES_H  <freetype/t1tables.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_TRUETYPE_IDS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   enumeration values which identify name strings, languages, encodings,
+   *   etc.  This file really contains a _large_ set of constant macro
+   *   definitions, taken from the TrueType and OpenType specifications.
+   *
+   */
+#define FT_TRUETYPE_IDS_H  <freetype/ttnameid.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_TRUETYPE_TABLES_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   types and API specific to the TrueType (as well as OpenType) format.
+   *
+   */
+#define FT_TRUETYPE_TABLES_H  <freetype/tttables.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_TRUETYPE_TAGS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   definitions of TrueType four-byte `tags' which identify blocks in
+   *   SFNT-based font formats (i.e., TrueType and OpenType).
+   *
+   */
+#define FT_TRUETYPE_TAGS_H  <freetype/tttags.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_BDF_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   definitions of an API which accesses BDF-specific strings from a
+   *   face.
+   *
+   */
+#define FT_BDF_H  <freetype/ftbdf.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CID_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   definitions of an API which access CID font information from a
+   *   face.
+   *
+   */
+#define FT_CID_H  <freetype/ftcid.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_GZIP_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   definitions of an API which supports gzip-compressed files.
+   *
+   */
+#define FT_GZIP_H  <freetype/ftgzip.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_LZW_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   definitions of an API which supports LZW-compressed files.
+   *
+   */
+#define FT_LZW_H  <freetype/ftlzw.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_BZIP2_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   definitions of an API which supports bzip2-compressed files.
+   *
+   */
+#define FT_BZIP2_H  <freetype/ftbzip2.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_WINFONTS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   definitions of an API which supports Windows FNT files.
+   *
+   */
+#define FT_WINFONTS_H   <freetype/ftwinfnt.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_GLYPH_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   API of the optional glyph management component.
+   *
+   */
+#define FT_GLYPH_H  <freetype/ftglyph.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_BITMAP_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   API of the optional bitmap conversion component.
+   *
+   */
+#define FT_BITMAP_H  <freetype/ftbitmap.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_BBOX_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   API of the optional exact bounding box computation routines.
+   *
+   */
+#define FT_BBOX_H  <freetype/ftbbox.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CACHE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   API of the optional FreeType~2 cache sub-system.
+   *
+   */
+#define FT_CACHE_H  <freetype/ftcache.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CACHE_IMAGE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   `glyph image' API of the FreeType~2 cache sub-system.
+   *
+   *   It is used to define a cache for @FT_Glyph elements.  You can also
+   *   use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to
+   *   store small glyph bitmaps, as it will use less memory.
+   *
+   *   This macro is deprecated.  Simply include @FT_CACHE_H to have all
+   *   glyph image-related cache declarations.
+   *
+   */
+#define FT_CACHE_IMAGE_H  FT_CACHE_H
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CACHE_SMALL_BITMAPS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   `small bitmaps' API of the FreeType~2 cache sub-system.
+   *
+   *   It is used to define a cache for small glyph bitmaps in a relatively
+   *   memory-efficient way.  You can also use the API defined in
+   *   @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images,
+   *   including scalable outlines.
+   *
+   *   This macro is deprecated.  Simply include @FT_CACHE_H to have all
+   *   small bitmaps-related cache declarations.
+   *
+   */
+#define FT_CACHE_SMALL_BITMAPS_H  FT_CACHE_H
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_CACHE_CHARMAP_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   `charmap' API of the FreeType~2 cache sub-system.
+   *
+   *   This macro is deprecated.  Simply include @FT_CACHE_H to have all
+   *   charmap-based cache declarations.
+   *
+   */
+#define FT_CACHE_CHARMAP_H  FT_CACHE_H
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_MAC_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   Macintosh-specific FreeType~2 API.  The latter is used to access
+   *   fonts embedded in resource forks.
+   *
+   *   This header file must be explicitly included by client applications
+   *   compiled on the Mac (note that the base API still works though).
+   *
+   */
+#define FT_MAC_H  <freetype/ftmac.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_MULTIPLE_MASTERS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   optional multiple-masters management API of FreeType~2.
+   *
+   */
+#define FT_MULTIPLE_MASTERS_H  <freetype/ftmm.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_SFNT_NAMES_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   optional FreeType~2 API which accesses embedded `name' strings in
+   *   SFNT-based font formats (i.e., TrueType and OpenType).
+   *
+   */
+#define FT_SFNT_NAMES_H  <freetype/ftsnames.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_OPENTYPE_VALIDATE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   optional FreeType~2 API which validates OpenType tables (BASE, GDEF,
+   *   GPOS, GSUB, JSTF).
+   *
+   */
+#define FT_OPENTYPE_VALIDATE_H  <freetype/ftotval.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_GX_VALIDATE_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat,
+   *   mort, morx, bsln, just, kern, opbd, trak, prop).
+   *
+   */
+#define FT_GX_VALIDATE_H  <freetype/ftgxval.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_PFR_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which accesses PFR-specific data.
+   *
+   */
+#define FT_PFR_H  <freetype/ftpfr.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_STROKER_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which provides functions to stroke outline paths.
+   */
+#define FT_STROKER_H  <freetype/ftstroke.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_SYNTHESIS_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which performs artificial obliquing and emboldening.
+   */
+#define FT_SYNTHESIS_H  <freetype/ftsynth.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_XFREE86_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which provides functions specific to the XFree86 and
+   *   X.Org X11 servers.
+   */
+#define FT_XFREE86_H  <freetype/ftxf86.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_TRIGONOMETRY_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which performs trigonometric computations (e.g.,
+   *   cosines and arc tangents).
+   */
+#define FT_TRIGONOMETRY_H  <freetype/fttrigon.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_LCD_FILTER_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which performs color filtering for subpixel rendering.
+   */
+#define FT_LCD_FILTER_H  <freetype/ftlcdfil.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_UNPATENTED_HINTING_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which performs color filtering for subpixel rendering.
+   */
+#define FT_UNPATENTED_HINTING_H  <freetype/ttunpat.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_INCREMENTAL_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which performs color filtering for subpixel rendering.
+   */
+#define FT_INCREMENTAL_H  <freetype/ftincrem.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_GASP_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which returns entries from the TrueType GASP table.
+   */
+#define FT_GASP_H  <freetype/ftgasp.h>
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_ADVANCES_H
+   *
+   * @description:
+   *   A macro used in #include statements to name the file containing the
+   *   FreeType~2 API which returns individual and ranged glyph advances.
+   */
+#define FT_ADVANCES_H  <freetype/ftadvanc.h>
+
+
+  /* */
+
+#define FT_ERROR_DEFINITIONS_H  <freetype/fterrdef.h>
+
+
+  /* The internals of the cache sub-system are no longer exposed.  We */
+  /* default to FT_CACHE_H at the moment just in case, but we know of */
+  /* no rogue client that uses them.                                  */
+  /*                                                                  */
+#define FT_CACHE_MANAGER_H           <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_MRU_H      <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_MANAGER_H  <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_CACHE_H    <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_GLYPH_H    <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_IMAGE_H    <freetype/ftcache.h>
+#define FT_CACHE_INTERNAL_SBITS_H    <freetype/ftcache.h>
+
+
+#define FT_INCREMENTAL_H          <freetype/ftincrem.h>
+
+#define FT_TRUETYPE_UNPATENTED_H  <freetype/ttunpat.h>
+
+
+  /*
+   * Include internal headers definitions from <freetype/internal/...>
+   * only when building the library.
+   */
+#ifdef FT2_BUILD_LIBRARY
+#define  FT_INTERNAL_INTERNAL_H  <freetype/internal/internal.h>
+#include "../internal/internal.h"
+#endif /* FT2_BUILD_LIBRARY */
+
+
+#endif /* __FT2_BUILD_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/config/ftmodule.h b/core/include/thirdparties/freetype/freetype/config/ftmodule.h
new file mode 100644
index 0000000..0d31ce6
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/config/ftmodule.h
@@ -0,0 +1,32 @@
+/*
+ *  This file registers the FreeType modules compiled into the library.
+ *
+ *  If you use GNU make, this file IS NOT USED!  Instead, it is created in
+ *  the objects directory (normally `<topdir>/objs/') based on information
+ *  from `<topdir>/modules.cfg'.
+ *
+ *  Please read `docs/INSTALL.ANY' and `docs/CUSTOMIZE' how to compile
+ *  FreeType without GNU make.
+ *
+ */
+
+//FT_USE_MODULE( FT_Module_Class, autofit_module_class )
+FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class )
+FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class )
+//FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class )
+//FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class )
+//FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class )
+//FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class )
+FT_USE_MODULE( FT_Module_Class, psaux_module_class )
+FT_USE_MODULE( FT_Module_Class, psnames_module_class )
+FT_USE_MODULE( FT_Module_Class, pshinter_module_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
+FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class )
+FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class )
+//FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
+
+/* EOF */
diff --git a/core/include/thirdparties/freetype/freetype/config/ftoption.h b/core/include/thirdparties/freetype/freetype/config/ftoption.h
new file mode 100644
index 0000000..e16e3c1
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/config/ftoption.h
@@ -0,0 +1,833 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftoption.h                                                             */
+/*                                                                         */
+/*    User-selectable configuration macros (specification only).           */
+/*                                                                         */
+/*  Copyright 1996-2013 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTOPTION_H__
+#define __FTOPTION_H__
+
+
+#include "../../ft2build.h"
+
+
+FT_BEGIN_HEADER
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                 USER-SELECTABLE CONFIGURATION MACROS                  */
+  /*                                                                       */
+  /* This file contains the default configuration macro definitions for    */
+  /* a standard build of the FreeType library.  There are three ways to    */
+  /* use this file to build project-specific versions of the library:      */
+  /*                                                                       */
+  /*  - You can modify this file by hand, but this is not recommended in   */
+  /*    cases where you would like to build several versions of the        */
+  /*    library from a single source directory.                            */
+  /*                                                                       */
+  /*  - You can put a copy of this file in your build directory, more      */
+  /*    precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD'   */
+  /*    is the name of a directory that is included _before_ the FreeType  */
+  /*    include path during compilation.                                   */
+  /*                                                                       */
+  /*    The default FreeType Makefiles and Jamfiles use the build          */
+  /*    directory `builds/<system>' by default, but you can easily change  */
+  /*    that for your own projects.                                        */
+  /*                                                                       */
+  /*  - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it    */
+  /*    slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to       */
+  /*    locate this file during the build.  For example,                   */
+  /*                                                                       */
+  /*      #define FT_CONFIG_OPTIONS_H  <myftoptions.h>                     */
+  /*      #include <freetype/config/ftheader.h>                            */
+  /*                                                                       */
+  /*    will use `$BUILD/myftoptions.h' instead of this file for macro     */
+  /*    definitions.                                                       */
+  /*                                                                       */
+  /*    Note also that you can similarly pre-define the macro              */
+  /*    FT_CONFIG_MODULES_H used to locate the file listing of the modules */
+  /*    that are statically linked to the library at compile time.  By     */
+  /*    default, this file is <freetype/config/ftmodule.h>.                */
+  /*                                                                       */
+  /*  We highly recommend using the third method whenever possible.        */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /**** G E N E R A L   F R E E T Y P E   2   C O N F I G U R A T I O N ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Uncomment the line below if you want to activate sub-pixel rendering  */
+  /* (a.k.a. LCD rendering, or ClearType) in this build of the library.    */
+  /*                                                                       */
+  /* Note that this feature is covered by several Microsoft patents        */
+  /* and should not be activated in any default build of the library.      */
+  /*                                                                       */
+  /* This macro has no impact on the FreeType API, only on its             */
+  /* _implementation_.  For example, using FT_RENDER_MODE_LCD when calling */
+  /* FT_Render_Glyph still generates a bitmap that is 3 times wider than   */
+  /* the original size in case this macro isn't defined; however, each     */
+  /* triplet of subpixels has R=G=B.                                       */
+  /*                                                                       */
+  /* This is done to allow FreeType clients to run unmodified, forcing     */
+  /* them to display normal gray-level anti-aliased glyphs.                */
+  /*                                                                       */
+#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Many compilers provide a non-ANSI 64-bit data type that can be used   */
+  /* by FreeType to speed up some computations.  However, this will create */
+  /* some problems when compiling the library in strict ANSI mode.         */
+  /*                                                                       */
+  /* For this reason, the use of 64-bit integers is normally disabled when */
+  /* the __STDC__ macro is defined.  You can however disable this by       */
+  /* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here.                 */
+  /*                                                                       */
+  /* For most compilers, this will only create compilation warnings when   */
+  /* building the library.                                                 */
+  /*                                                                       */
+  /* ObNote: The compiler-specific 64-bit integers are detected in the     */
+  /*         file `ftconfig.h' either statically or through the            */
+  /*         `configure' script on supported platforms.                    */
+  /*                                                                       */
+#undef FT_CONFIG_OPTION_FORCE_INT64
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* If this macro is defined, do not try to use an assembler version of   */
+  /* performance-critical functions (e.g. FT_MulFix).  You should only do  */
+  /* that to verify that the assembler function works properly, or to      */
+  /* execute benchmark tests of the various implementations.               */
+/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* If this macro is defined, try to use an inlined assembler version of  */
+  /* the `FT_MulFix' function, which is a `hotspot' when loading and       */
+  /* hinting glyphs, and which should be executed as fast as possible.     */
+  /*                                                                       */
+  /* Note that if your compiler or CPU is not supported, this will default */
+  /* to the standard and portable implementation found in `ftcalc.c'.      */
+  /*                                                                       */
+#define FT_CONFIG_OPTION_INLINE_MULFIX
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* LZW-compressed file support.                                          */
+  /*                                                                       */
+  /*   FreeType now handles font files that have been compressed with the  */
+  /*   `compress' program.  This is mostly used to parse many of the PCF   */
+  /*   files that come with various X11 distributions.  The implementation */
+  /*   uses NetBSD's `zopen' to partially uncompress the file on the fly   */
+  /*   (see src/lzw/ftgzip.c).                                             */
+  /*                                                                       */
+  /*   Define this macro if you want to enable this `feature'.             */
+  /*                                                                       */
+#define FT_CONFIG_OPTION_USE_LZW
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Gzip-compressed file support.                                         */
+  /*                                                                       */
+  /*   FreeType now handles font files that have been compressed with the  */
+  /*   `gzip' program.  This is mostly used to parse many of the PCF files */
+  /*   that come with XFree86.  The implementation uses `zlib' to          */
+  /*   partially uncompress the file on the fly (see src/gzip/ftgzip.c).   */
+  /*                                                                       */
+  /*   Define this macro if you want to enable this `feature'.  See also   */
+  /*   the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below.                       */
+  /*                                                                       */
+#define FT_CONFIG_OPTION_USE_ZLIB
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* ZLib library selection                                                */
+  /*                                                                       */
+  /*   This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined.  */
+  /*   It allows FreeType's `ftgzip' component to link to the system's     */
+  /*   installation of the ZLib library.  This is useful on systems like   */
+  /*   Unix or VMS where it generally is already available.                */
+  /*                                                                       */
+  /*   If you let it undefined, the component will use its own copy        */
+  /*   of the zlib sources instead.  These have been modified to be        */
+  /*   included directly within the component and *not* export external    */
+  /*   function names.  This allows you to link any program with FreeType  */
+  /*   _and_ ZLib without linking conflicts.                               */
+  /*                                                                       */
+  /*   Do not #undef this macro here since the build system might define   */
+  /*   it for certain configurations only.                                 */
+  /*                                                                       */
+/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Bzip2-compressed file support.                                        */
+  /*                                                                       */
+  /*   FreeType now handles font files that have been compressed with the  */
+  /*   `bzip2' program.  This is mostly used to parse many of the PCF      */
+  /*   files that come with XFree86.  The implementation uses `libbz2' to  */
+  /*   partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
+  /*   Contrary to gzip, bzip2 currently is not included and need to use   */
+  /*   the system available bzip2 implementation.                          */
+  /*                                                                       */
+  /*   Define this macro if you want to enable this `feature'.             */
+  /*                                                                       */
+/* #define FT_CONFIG_OPTION_USE_BZIP2 */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define to disable the use of file stream functions and types, FILE,   */
+  /* fopen() etc.  Enables the use of smaller system libraries on embedded */
+  /* systems that have multiple system libraries, some with or without     */
+  /* file stream support, in the cases where file stream support is not    */
+  /* necessary such as memory loading of font files.                       */
+  /*                                                                       */
+/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*  PNG bitmap support.                                                  */
+  /*                                                                       */
+  /*   FreeType now handles loading color bitmap glyphs in the PNG format. */
+  /*   This requires help from the external libpng library.  Uncompressed  */
+  /*   color bitmaps do not need any external libraries and will be        */
+  /*   supported regardless of this configuration.                         */
+  /*                                                                       */
+  /*   Define this macro if you want to enable this `feature'.             */
+  /*                                                                       */
+/* #define FT_CONFIG_OPTION_USE_PNG */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* DLL export compilation                                                */
+  /*                                                                       */
+  /*   When compiling FreeType as a DLL, some systems/compilers need a     */
+  /*   special keyword in front OR after the return type of function       */
+  /*   declarations.                                                       */
+  /*                                                                       */
+  /*   Two macros are used within the FreeType source code to define       */
+  /*   exported library functions: FT_EXPORT and FT_EXPORT_DEF.            */
+  /*                                                                       */
+  /*     FT_EXPORT( return_type )                                          */
+  /*                                                                       */
+  /*       is used in a function declaration, as in                        */
+  /*                                                                       */
+  /*         FT_EXPORT( FT_Error )                                         */
+  /*         FT_Init_FreeType( FT_Library*  alibrary );                    */
+  /*                                                                       */
+  /*                                                                       */
+  /*     FT_EXPORT_DEF( return_type )                                      */
+  /*                                                                       */
+  /*       is used in a function definition, as in                         */
+  /*                                                                       */
+  /*         FT_EXPORT_DEF( FT_Error )                                     */
+  /*         FT_Init_FreeType( FT_Library*  alibrary )                     */
+  /*         {                                                             */
+  /*           ... some code ...                                           */
+  /*           return FT_Err_Ok;                                           */
+  /*         }                                                             */
+  /*                                                                       */
+  /*   You can provide your own implementation of FT_EXPORT and            */
+  /*   FT_EXPORT_DEF here if you want.  If you leave them undefined, they  */
+  /*   will be later automatically defined as `extern return_type' to      */
+  /*   allow normal compilation.                                           */
+  /*                                                                       */
+  /*   Do not #undef these macros here since the build system might define */
+  /*   them for certain configurations only.                               */
+  /*                                                                       */
+/* #define FT_EXPORT(x)      extern x */
+/* #define FT_EXPORT_DEF(x)  x */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Glyph Postscript Names handling                                       */
+  /*                                                                       */
+  /*   By default, FreeType 2 is compiled with the `psnames' module.  This */
+  /*   module is in charge of converting a glyph name string into a        */
+  /*   Unicode value, or return a Macintosh standard glyph name for the    */
+  /*   use with the TrueType `post' table.                                 */
+  /*                                                                       */
+  /*   Undefine this macro if you do not want `psnames' compiled in your   */
+  /*   build of FreeType.  This has the following effects:                 */
+  /*                                                                       */
+  /*   - The TrueType driver will provide its own set of glyph names,      */
+  /*     if you build it to support postscript names in the TrueType       */
+  /*     `post' table.                                                     */
+  /*                                                                       */
+  /*   - The Type 1 driver will not be able to synthesize a Unicode        */
+  /*     charmap out of the glyphs found in the fonts.                     */
+  /*                                                                       */
+  /*   You would normally undefine this configuration macro when building  */
+  /*   a version of FreeType that doesn't contain a Type 1 or CFF driver.  */
+  /*                                                                       */
+#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Postscript Names to Unicode Values support                            */
+  /*                                                                       */
+  /*   By default, FreeType 2 is built with the `PSNames' module compiled  */
+  /*   in.  Among other things, the module is used to convert a glyph name */
+  /*   into a Unicode value.  This is especially useful in order to        */
+  /*   synthesize on the fly a Unicode charmap from the CFF/Type 1 driver  */
+  /*   through a big table named the `Adobe Glyph List' (AGL).             */
+  /*                                                                       */
+  /*   Undefine this macro if you do not want the Adobe Glyph List         */
+  /*   compiled in your `PSNames' module.  The Type 1 driver will not be   */
+  /*   able to synthesize a Unicode charmap out of the glyphs found in the */
+  /*   fonts.                                                              */
+  /*                                                                       */
+#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Support for Mac fonts                                                 */
+  /*                                                                       */
+  /*   Define this macro if you want support for outline fonts in Mac      */
+  /*   format (mac dfont, mac resource, macbinary containing a mac         */
+  /*   resource) on non-Mac platforms.                                     */
+  /*                                                                       */
+  /*   Note that the `FOND' resource isn't checked.                        */
+  /*                                                                       */
+//#define FT_CONFIG_OPTION_MAC_FONTS
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Guessing methods to access embedded resource forks                    */
+  /*                                                                       */
+  /*   Enable extra Mac fonts support on non-Mac platforms (e.g.           */
+  /*   GNU/Linux).                                                         */
+  /*                                                                       */
+  /*   Resource forks which include fonts data are stored sometimes in     */
+  /*   locations which users or developers don't expected.  In some cases, */
+  /*   resource forks start with some offset from the head of a file.  In  */
+  /*   other cases, the actual resource fork is stored in file different   */
+  /*   from what the user specifies.  If this option is activated,         */
+  /*   FreeType tries to guess whether such offsets or different file      */
+  /*   names must be used.                                                 */
+  /*                                                                       */
+  /*   Note that normal, direct access of resource forks is controlled via */
+  /*   the FT_CONFIG_OPTION_MAC_FONTS option.                              */
+  /*                                                                       */
+#ifdef FT_CONFIG_OPTION_MAC_FONTS
+#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Allow the use of FT_Incremental_Interface to load typefaces that      */
+  /* contain no glyph data, but supply it via a callback function.         */
+  /* This is required by clients supporting document formats which         */
+  /* supply font data incrementally as the document is parsed, such        */
+  /* as the Ghostscript interpreter for the PostScript language.           */
+  /*                                                                       */
+#define FT_CONFIG_OPTION_INCREMENTAL
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The size in bytes of the render pool used by the scan-line converter  */
+  /* to do all of its work.                                                */
+  /*                                                                       */
+  /* This must be greater than 4KByte if you use FreeType to rasterize     */
+  /* glyphs; otherwise, you may set it to zero to avoid unnecessary        */
+  /* allocation of the render pool.                                        */
+  /*                                                                       */
+#define FT_RENDER_POOL_SIZE  16384L
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* FT_MAX_MODULES                                                        */
+  /*                                                                       */
+  /*   The maximum number of modules that can be registered in a single    */
+  /*   FreeType library object.  32 is the default.                        */
+  /*                                                                       */
+#define FT_MAX_MODULES  32
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Debug level                                                           */
+  /*                                                                       */
+  /*   FreeType can be compiled in debug or trace mode.  In debug mode,    */
+  /*   errors are reported through the `ftdebug' component.  In trace      */
+  /*   mode, additional messages are sent to the standard output during    */
+  /*   execution.                                                          */
+  /*                                                                       */
+  /*   Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode.     */
+  /*   Define FT_DEBUG_LEVEL_TRACE to build it in trace mode.              */
+  /*                                                                       */
+  /*   Don't define any of these macros to compile in `release' mode!      */
+  /*                                                                       */
+  /*   Do not #undef these macros here since the build system might define */
+  /*   them for certain configurations only.                               */
+  /*                                                                       */
+/* #define FT_DEBUG_LEVEL_ERROR */
+/* #define FT_DEBUG_LEVEL_TRACE */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Autofitter debugging                                                  */
+  /*                                                                       */
+  /*   If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to     */
+  /*   control the autofitter behaviour for debugging purposes with global */
+  /*   boolean variables (consequently, you should *never* enable this     */
+  /*   while compiling in `release' mode):                                 */
+  /*                                                                       */
+  /*     _af_debug_disable_horz_hints                                      */
+  /*     _af_debug_disable_vert_hints                                      */
+  /*     _af_debug_disable_blue_hints                                      */
+  /*                                                                       */
+  /*   Additionally, the following functions provide dumps of various      */
+  /*   internal autofit structures to stdout (using `printf'):             */
+  /*                                                                       */
+  /*     af_glyph_hints_dump_points                                        */
+  /*     af_glyph_hints_dump_segments                                      */
+  /*     af_glyph_hints_dump_edges                                         */
+  /*                                                                       */
+  /*   As an argument, they use another global variable:                   */
+  /*                                                                       */
+  /*     _af_debug_hints                                                   */
+  /*                                                                       */
+  /*   Please have a look at the `ftgrid' demo program to see how those    */
+  /*   variables and macros should be used.                                */
+  /*                                                                       */
+  /*   Do not #undef these macros here since the build system might define */
+  /*   them for certain configurations only.                               */
+  /*                                                                       */
+/* #define FT_DEBUG_AUTOFIT */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Memory Debugging                                                      */
+  /*                                                                       */
+  /*   FreeType now comes with an integrated memory debugger that is       */
+  /*   capable of detecting simple errors like memory leaks or double      */
+  /*   deletes.  To compile it within your build of the library, you       */
+  /*   should define FT_DEBUG_MEMORY here.                                 */
+  /*                                                                       */
+  /*   Note that the memory debugger is only activated at runtime when     */
+  /*   when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
+  /*                                                                       */
+  /*   Do not #undef this macro here since the build system might define   */
+  /*   it for certain configurations only.                                 */
+  /*                                                                       */
+/* #define FT_DEBUG_MEMORY */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Module errors                                                         */
+  /*                                                                       */
+  /*   If this macro is set (which is _not_ the default), the higher byte  */
+  /*   of an error code gives the module in which the error has occurred,  */
+  /*   while the lower byte is the real error code.                        */
+  /*                                                                       */
+  /*   Setting this macro makes sense for debugging purposes only, since   */
+  /*   it would break source compatibility of certain programs that use    */
+  /*   FreeType 2.                                                         */
+  /*                                                                       */
+  /*   More details can be found in the files ftmoderr.h and fterrors.h.   */
+  /*                                                                       */
+#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Position Independent Code                                             */
+  /*                                                                       */
+  /*   If this macro is set (which is _not_ the default), FreeType2 will   */
+  /*   avoid creating constants that require address fixups.  Instead the  */
+  /*   constants will be moved into a struct and additional intialization  */
+  /*   code will be used.                                                  */
+  /*                                                                       */
+  /*   Setting this macro is needed for systems that prohibit address      */
+  /*   fixups, such as BREW.                                               */
+  /*                                                                       */
+/* #define FT_CONFIG_OPTION_PIC */
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****        S F N T   D R I V E R    C O N F I G U R A T I O N       ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support       */
+  /* embedded bitmaps in all formats using the SFNT module (namely         */
+  /* TrueType & OpenType).                                                 */
+  /*                                                                       */
+#undef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to    */
+  /* load and enumerate the glyph Postscript names in a TrueType or        */
+  /* OpenType file.                                                        */
+  /*                                                                       */
+  /* Note that when you do not compile the `PSNames' module by undefining  */
+  /* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will   */
+  /* contain additional code used to read the PS Names table from a font.  */
+  /*                                                                       */
+  /* (By default, the module uses `PSNames' to extract glyph names.)       */
+  /*                                                                       */
+#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to       */
+  /* access the internal name table in a SFNT-based format like TrueType   */
+  /* or OpenType.  The name table contains various strings used to         */
+  /* describe the font, like family name, copyright, version, etc.  It     */
+  /* does not contain any glyph name though.                               */
+  /*                                                                       */
+  /* Accessing SFNT names is done through the functions declared in        */
+  /* `freetype/ftsnames.h'.                                                */
+  /*                                                                       */
+#define TT_CONFIG_OPTION_SFNT_NAMES
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* TrueType CMap support                                                 */
+  /*                                                                       */
+  /*   Here you can fine-tune which TrueType CMap table format shall be    */
+  /*   supported.                                                          */
+#define TT_CONFIG_CMAP_FORMAT_0
+#define TT_CONFIG_CMAP_FORMAT_2
+#define TT_CONFIG_CMAP_FORMAT_4
+#define TT_CONFIG_CMAP_FORMAT_6
+#define TT_CONFIG_CMAP_FORMAT_8
+#define TT_CONFIG_CMAP_FORMAT_10
+#define TT_CONFIG_CMAP_FORMAT_12
+#define TT_CONFIG_CMAP_FORMAT_13
+#define TT_CONFIG_CMAP_FORMAT_14
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****    T R U E T Y P E   D R I V E R    C O N F I G U R A T I O N   ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile   */
+  /* a bytecode interpreter in the TrueType driver.                        */
+  /*                                                                       */
+  /* By undefining this, you will only compile the code necessary to load  */
+  /* TrueType glyphs without hinting.                                      */
+  /*                                                                       */
+  /*   Do not #undef this macro here, since the build system might         */
+  /*   define it for certain configurations only.                          */
+  /*                                                                       */
+#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile       */
+  /* EXPERIMENTAL subpixel hinting support into the TrueType driver.  This */
+  /* replaces the native TrueType hinting mechanism when anything but      */
+  /* FT_RENDER_MODE_MONO is requested.                                     */
+  /*                                                                       */
+  /* Enabling this causes the TrueType driver to ignore instructions under */
+  /* certain conditions.  This is done in accordance with the guide here,  */
+  /* with some minor differences:                                          */
+  /*                                                                       */
+  /*  http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
+  /*                                                                       */
+  /* By undefining this, you only compile the code necessary to hint       */
+  /* TrueType glyphs with native TT hinting.                               */
+  /*                                                                       */
+  /*   This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be    */
+  /*   defined.                                                            */
+  /*                                                                       */
+/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version  */
+  /* of the TrueType bytecode interpreter is used that doesn't implement   */
+  /* any of the patented opcodes and algorithms.  The patents related to   */
+  /* TrueType hinting have expired worldwide since May 2010; this option   */
+  /* is now deprecated.                                                    */
+  /*                                                                       */
+  /* Note that the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored*  */
+  /* if you define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; in other words,  */
+  /* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or                */
+  /* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time.    */
+  /*                                                                       */
+  /* This macro is only useful for a small number of font files (mostly    */
+  /* for Asian scripts) that require bytecode interpretation to properly   */
+  /* load glyphs.  For all other fonts, this produces unpleasant results,  */
+  /* thus the unpatented interpreter is never used to load glyphs from     */
+  /* TrueType fonts unless one of the following two options is used.       */
+  /*                                                                       */
+  /*   - The unpatented interpreter is explicitly activated by the user    */
+  /*     through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag         */
+  /*     when opening the FT_Face.                                         */
+  /*                                                                       */
+  /*   - FreeType detects that the FT_Face corresponds to one of the       */
+  /*     `trick' fonts (e.g., `Mingliu') it knows about.  The font engine  */
+  /*     contains a hard-coded list of font names and other matching       */
+  /*     parameters (see function `tt_face_init' in file                   */
+  /*     `src/truetype/ttobjs.c').                                         */
+  /*                                                                       */
+  /* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
+  /*                                                                       */
+  /*   {                                                                   */
+  /*     FT_Parameter  parameter;                                          */
+  /*     FT_Open_Args  open_args;                                          */
+  /*                                                                       */
+  /*                                                                       */
+  /*     parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING;                  */
+  /*                                                                       */
+  /*     open_args.flags      = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;         */
+  /*     open_args.pathname   = my_font_pathname;                          */
+  /*     open_args.num_params = 1;                                         */
+  /*     open_args.params     = &parameter;                                */
+  /*                                                                       */
+  /*     error = FT_Open_Face( library, &open_args, index, &face );        */
+  /*     ...                                                               */
+  /*   }                                                                   */
+  /*                                                                       */
+/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType    */
+  /* bytecode interpreter with a huge switch statement, rather than a call */
+  /* table.  This results in smaller and faster code for a number of       */
+  /* architectures.                                                        */
+  /*                                                                       */
+  /* Note however that on some compiler/processor combinations, undefining */
+  /* this macro will generate faster, though larger, code.                 */
+  /*                                                                       */
+#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the        */
+  /* TrueType glyph loader to use Apple's definition of how to handle      */
+  /* component offsets in composite glyphs.                                */
+  /*                                                                       */
+  /* Apple and MS disagree on the default behavior of component offsets    */
+  /* in composites.  Apple says that they should be scaled by the scaling  */
+  /* factors in the transformation matrix (roughly, it's more complex)     */
+  /* while MS says they should not.  OpenType defines two bits in the      */
+  /* composite flags array which can be used to disambiguate, but old      */
+  /* fonts will not have them.                                             */
+  /*                                                                       */
+  /*   http://www.microsoft.com/typography/otspec/glyf.htm                 */
+  /*   http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html                 */
+  /*                                                                       */
+#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include         */
+  /* support for Apple's distortable font technology (fvar, gvar, cvar,    */
+  /* and avar tables).  This has many similarities to Type 1 Multiple      */
+  /* Masters support.                                                      */
+  /*                                                                       */
+#undef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define TT_CONFIG_OPTION_BDF if you want to include support for        */
+  /* an embedded `BDF ' table within SFNT-based bitmap formats.            */
+  /*                                                                       */
+#undef TT_CONFIG_OPTION_BDF
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****      T Y P E 1   D R I V E R    C O N F I G U R A T I O N       ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and       */
+  /* arrays in the Type 1 stream (see t1load.c).  A minimum of 4 is        */
+  /* required.                                                             */
+  /*                                                                       */
+#define T1_MAX_DICT_DEPTH  5
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine   */
+  /* calls during glyph loading.                                           */
+  /*                                                                       */
+#define T1_MAX_SUBRS_CALLS  16
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity.  A     */
+  /* minimum of 16 is required.                                            */
+  /*                                                                       */
+  /* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
+  /*                                                                       */
+#define T1_MAX_CHARSTRINGS_OPERANDS  512
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define this configuration macro if you want to prevent the            */
+  /* compilation of `t1afm', which is in charge of reading Type 1 AFM      */
+  /* files into an existing face.  Note that if set, the T1 driver will be */
+  /* unable to produce kerning distances.                                  */
+  /*                                                                       */
+#undef T1_CONFIG_OPTION_NO_AFM
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define this configuration macro if you want to prevent the            */
+  /* compilation of the Multiple Masters font support in the Type 1        */
+  /* driver.                                                               */
+  /*                                                                       */
+#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****         C F F   D R I V E R    C O N F I G U R A T I O N        ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF       */
+  /* engine gets compiled into FreeType.  If defined, it is possible to    */
+  /* switch between the two engines using the `hinting-engine' property of */
+  /* the cff driver module.                                                */
+  /*                                                                       */
+/* #define CFF_CONFIG_OPTION_OLD_ENGINE */
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****    A U T O F I T   M O D U L E    C O N F I G U R A T I O N     ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Compile autofit module with CJK (Chinese, Japanese, Korean) script    */
+  /* support.                                                              */
+  /*                                                                       */
+#define AF_CONFIG_OPTION_CJK
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Compile autofit module with Indic script support.                     */
+  /*                                                                       */
+#define AF_CONFIG_OPTION_INDIC
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Compile autofit module with warp hinting.  The idea of the warping    */
+  /* code is to slightly scale and shift a glyph within a single dimension */
+  /* so that as much of its segments are aligned (more or less) on the     */
+  /* grid.  To find out the optimal scaling and shifting value, various    */
+  /* parameter combinations are tried and scored.                          */
+  /*                                                                       */
+  /* This experimental option is only active if the render mode is         */
+  /* FT_RENDER_MODE_LIGHT.                                                 */
+  /*                                                                       */
+/* #define AF_CONFIG_OPTION_USE_WARPER */
+
+  /* */
+
+
+  /*
+   *  This macro is obsolete.  Support has been removed in FreeType
+   *  version 2.5.
+   */
+/* #define FT_CONFIG_OPTION_OLD_INTERNALS */
+
+
+  /*
+   * This macro is defined if either unpatented or native TrueType
+   * hinting is requested by the definitions above.
+   */
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+#define  TT_USE_BYTECODE_INTERPRETER
+#undef   TT_CONFIG_OPTION_UNPATENTED_HINTING
+#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
+#define  TT_USE_BYTECODE_INTERPRETER
+#endif
+
+FT_END_HEADER
+
+
+#endif /* __FTOPTION_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/config/ftstdlib.h b/core/include/thirdparties/freetype/freetype/config/ftstdlib.h
new file mode 100644
index 0000000..03be04d
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/config/ftstdlib.h
@@ -0,0 +1,174 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftstdlib.h                                                             */
+/*                                                                         */
+/*    ANSI-specific library and header configuration file (specification   */
+/*    only).                                                               */
+/*                                                                         */
+/*  Copyright 2002-2007, 2009, 2011-2012 by                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This file is used to group all #includes to the ANSI C library that   */
+  /* FreeType normally requires.  It also defines macros to rename the     */
+  /* standard functions within the FreeType source code.                   */
+  /*                                                                       */
+  /* Load a file which defines __FTSTDLIB_H__ before this one to override  */
+  /* it.                                                                   */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTSTDLIB_H__
+#define __FTSTDLIB_H__
+
+
+#include <stddef.h>
+
+#define ft_ptrdiff_t  ptrdiff_t
+
+
+  /**********************************************************************/
+  /*                                                                    */
+  /*                           integer limits                           */
+  /*                                                                    */
+  /* UINT_MAX and ULONG_MAX are used to automatically compute the size  */
+  /* of `int' and `long' in bytes at compile-time.  So far, this works  */
+  /* for all platforms the library has been tested on.                  */
+  /*                                                                    */
+  /* Note that on the extremely rare platforms that do not provide      */
+  /* integer types that are _exactly_ 16 and 32 bits wide (e.g. some    */
+  /* old Crays where `int' is 36 bits), we do not make any guarantee    */
+  /* about the correct behaviour of FT2 with all fonts.                 */
+  /*                                                                    */
+  /* In these case, `ftconfig.h' will refuse to compile anyway with a   */
+  /* message like `couldn't find 32-bit type' or something similar.     */
+  /*                                                                    */
+  /**********************************************************************/
+
+
+#include <limits.h>
+
+#define FT_CHAR_BIT    CHAR_BIT
+#define FT_USHORT_MAX  USHRT_MAX
+#define FT_INT_MAX     INT_MAX
+#define FT_INT_MIN     INT_MIN
+#define FT_UINT_MAX    UINT_MAX
+#define FT_ULONG_MAX   ULONG_MAX
+
+
+  /**********************************************************************/
+  /*                                                                    */
+  /*                 character and string processing                    */
+  /*                                                                    */
+  /**********************************************************************/
+
+#include "../../../../fxcrt/fx_system.h"
+#include <string.h>
+
+#define ft_memchr   FXSYS_memchr
+#define ft_memcmp   FXSYS_memcmp32
+#define ft_memcpy   FXSYS_memcpy32
+#define ft_memmove  FXSYS_memmove32
+#define ft_memset   FXSYS_memset8
+//#define ft_strcat   FXSYS_strcat
+#define ft_strcmp   FXSYS_strcmp
+#define ft_strcpy   FXSYS_strcpy
+#define ft_strlen   FXSYS_strlen
+#define ft_strncmp  FXSYS_strncmp
+#define ft_strncpy  FXSYS_strncpy
+#define ft_strrchr  FXSYS_strrchr
+#define ft_strstr   FXSYS_strstr
+
+
+  /**********************************************************************/
+  /*                                                                    */
+  /*                           file handling                            */
+  /*                                                                    */
+  /**********************************************************************/
+
+
+#include <stdio.h>
+
+#define FT_FILE     FXSYS_FILE
+#define ft_fclose   FXSYS_fclose
+#define ft_fopen    FXSYS_fopen
+#define ft_fread    FXSYS_fread
+#define ft_fseek    FXSYS_fseek
+#define ft_ftell    FXSYS_ftell
+#define ft_sprintf  FXSYS_sprintf
+
+
+  /**********************************************************************/
+  /*                                                                    */
+  /*                             sorting                                */
+  /*                                                                    */
+  /**********************************************************************/
+
+
+//#include <stdlib.h>
+
+#define ft_qsort  FXSYS_qsort
+
+
+  /**********************************************************************/
+  /*                                                                    */
+  /*                        memory allocation                           */
+  /*                                                                    */
+  /**********************************************************************/
+
+
+#define ft_scalloc   calloc
+#define ft_sfree     free
+#define ft_smalloc   malloc
+#define ft_srealloc  realloc
+
+
+  /**********************************************************************/
+  /*                                                                    */
+  /*                          miscellaneous                             */
+  /*                                                                    */
+  /**********************************************************************/
+
+
+#define ft_atol   FXSYS_atoi
+#define ft_labs   labs
+
+
+  /**********************************************************************/
+  /*                                                                    */
+  /*                         execution control                          */
+  /*                                                                    */
+  /**********************************************************************/
+
+
+//#include <setjmp.h>
+
+#define ft_jmp_buf     jmp_buf  /* note: this cannot be a typedef since */
+                                /*       jmp_buf is defined as a macro  */
+                                /*       on certain platforms           */
+
+#define ft_longjmp     longjmp
+#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
+
+
+  /* the following is only used for debugging purposes, i.e., if */
+  /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined    */
+
+#include <stdarg.h>
+
+
+#endif /* __FTSTDLIB_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/freetype.h b/core/include/thirdparties/freetype/freetype/freetype.h
new file mode 100644
index 0000000..7a31923
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/freetype.h
@@ -0,0 +1,4016 @@
+/***************************************************************************/

+/*                                                                         */

+/*  freetype.h                                                             */

+/*                                                                         */

+/*    FreeType high-level API and common types (specification only).       */

+/*                                                                         */

+/*  Copyright 1996-2013 by                                                 */

+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */

+/*                                                                         */

+/*  This file is part of the FreeType project, and may only be used,       */

+/*  modified, and distributed under the terms of the FreeType project      */

+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */

+/*  this file you indicate that you have read the license and              */

+/*  understand and accept it fully.                                        */

+/*                                                                         */

+/***************************************************************************/

+

+

+#ifndef __FREETYPE_H__

+#define __FREETYPE_H__

+

+

+#ifndef FT_FREETYPE_H

+#error "`ft2build.h' hasn't been included yet!"

+#error "Please always use macros to include FreeType header files."

+#error "Example:"

+#error "  #include <ft2build.h>"

+#error "  #include FT_FREETYPE_H"

+#endif

+

+

+#include "../ft2build.h"

+#include "config/ftconfig.h"

+#include "fttypes.h"

+#include "fterrors.h"

+

+

+FT_BEGIN_HEADER

+

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Section>                                                             */

+  /*    user_allocation                                                    */

+  /*                                                                       */

+  /* <Title>                                                               */

+  /*    User allocation                                                    */

+  /*                                                                       */

+  /* <Abstract>                                                            */

+  /*    How client applications should allocate FreeType data structures.  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    FreeType assumes that structures allocated by the user and passed  */

+  /*    as arguments are zeroed out except for the actual data.  In other  */

+  /*    words, it is recommended to use `calloc' (or variants of it)       */

+  /*    instead of `malloc' for allocation.                                */

+  /*                                                                       */

+  /*************************************************************************/

+

+

+

+  /*************************************************************************/

+  /*************************************************************************/

+  /*                                                                       */

+  /*                        B A S I C   T Y P E S                          */

+  /*                                                                       */

+  /*************************************************************************/

+  /*************************************************************************/

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Section>                                                             */

+  /*    base_interface                                                     */

+  /*                                                                       */

+  /* <Title>                                                               */

+  /*    Base Interface                                                     */

+  /*                                                                       */

+  /* <Abstract>                                                            */

+  /*    The FreeType~2 base font interface.                                */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This section describes the public high-level API of FreeType~2.    */

+  /*                                                                       */

+  /* <Order>                                                               */

+  /*    FT_Library                                                         */

+  /*    FT_Face                                                            */

+  /*    FT_Size                                                            */

+  /*    FT_GlyphSlot                                                       */

+  /*    FT_CharMap                                                         */

+  /*    FT_Encoding                                                        */

+  /*                                                                       */

+  /*    FT_FaceRec                                                         */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_SCALABLE                                              */

+  /*    FT_FACE_FLAG_FIXED_SIZES                                           */

+  /*    FT_FACE_FLAG_FIXED_WIDTH                                           */

+  /*    FT_FACE_FLAG_HORIZONTAL                                            */

+  /*    FT_FACE_FLAG_VERTICAL                                              */

+  /*    FT_FACE_FLAG_SFNT                                                  */

+  /*    FT_FACE_FLAG_KERNING                                               */

+  /*    FT_FACE_FLAG_MULTIPLE_MASTERS                                      */

+  /*    FT_FACE_FLAG_GLYPH_NAMES                                           */

+  /*    FT_FACE_FLAG_EXTERNAL_STREAM                                       */

+  /*    FT_FACE_FLAG_FAST_GLYPHS                                           */

+  /*    FT_FACE_FLAG_HINTER                                                */

+  /*                                                                       */

+  /*    FT_STYLE_FLAG_BOLD                                                 */

+  /*    FT_STYLE_FLAG_ITALIC                                               */

+  /*                                                                       */

+  /*    FT_SizeRec                                                         */

+  /*    FT_Size_Metrics                                                    */

+  /*                                                                       */

+  /*    FT_GlyphSlotRec                                                    */

+  /*    FT_Glyph_Metrics                                                   */

+  /*    FT_SubGlyph                                                        */

+  /*                                                                       */

+  /*    FT_Bitmap_Size                                                     */

+  /*                                                                       */

+  /*    FT_Init_FreeType                                                   */

+  /*    FT_Done_FreeType                                                   */

+  /*                                                                       */

+  /*    FT_New_Face                                                        */

+  /*    FT_Done_Face                                                       */

+  /*    FT_New_Memory_Face                                                 */

+  /*    FT_Open_Face                                                       */

+  /*    FT_Open_Args                                                       */

+  /*    FT_Parameter                                                       */

+  /*    FT_Attach_File                                                     */

+  /*    FT_Attach_Stream                                                   */

+  /*                                                                       */

+  /*    FT_Set_Char_Size                                                   */

+  /*    FT_Set_Pixel_Sizes                                                 */

+  /*    FT_Request_Size                                                    */

+  /*    FT_Select_Size                                                     */

+  /*    FT_Size_Request_Type                                               */

+  /*    FT_Size_Request                                                    */

+  /*    FT_Set_Transform                                                   */

+  /*    FT_Load_Glyph                                                      */

+  /*    FT_Get_Char_Index                                                  */

+  /*    FT_Get_Name_Index                                                  */

+  /*    FT_Load_Char                                                       */

+  /*                                                                       */

+  /*    FT_OPEN_MEMORY                                                     */

+  /*    FT_OPEN_STREAM                                                     */

+  /*    FT_OPEN_PATHNAME                                                   */

+  /*    FT_OPEN_DRIVER                                                     */

+  /*    FT_OPEN_PARAMS                                                     */

+  /*                                                                       */

+  /*    FT_LOAD_DEFAULT                                                    */

+  /*    FT_LOAD_RENDER                                                     */

+  /*    FT_LOAD_MONOCHROME                                                 */

+  /*    FT_LOAD_LINEAR_DESIGN                                              */

+  /*    FT_LOAD_NO_SCALE                                                   */

+  /*    FT_LOAD_NO_HINTING                                                 */

+  /*    FT_LOAD_NO_BITMAP                                                  */

+  /*    FT_LOAD_CROP_BITMAP                                                */

+  /*                                                                       */

+  /*    FT_LOAD_VERTICAL_LAYOUT                                            */

+  /*    FT_LOAD_IGNORE_TRANSFORM                                           */

+  /*    FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH                                */

+  /*    FT_LOAD_FORCE_AUTOHINT                                             */

+  /*    FT_LOAD_NO_RECURSE                                                 */

+  /*    FT_LOAD_PEDANTIC                                                   */

+  /*                                                                       */

+  /*    FT_LOAD_TARGET_NORMAL                                              */

+  /*    FT_LOAD_TARGET_LIGHT                                               */

+  /*    FT_LOAD_TARGET_MONO                                                */

+  /*    FT_LOAD_TARGET_LCD                                                 */

+  /*    FT_LOAD_TARGET_LCD_V                                               */

+  /*                                                                       */

+  /*    FT_Render_Glyph                                                    */

+  /*    FT_Render_Mode                                                     */

+  /*    FT_Get_Kerning                                                     */

+  /*    FT_Kerning_Mode                                                    */

+  /*    FT_Get_Track_Kerning                                               */

+  /*    FT_Get_Glyph_Name                                                  */

+  /*    FT_Get_Postscript_Name                                             */

+  /*                                                                       */

+  /*    FT_CharMapRec                                                      */

+  /*    FT_Select_Charmap                                                  */

+  /*    FT_Set_Charmap                                                     */

+  /*    FT_Get_Charmap_Index                                               */

+  /*                                                                       */

+  /*    FT_FSTYPE_INSTALLABLE_EMBEDDING                                    */

+  /*    FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING                             */

+  /*    FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING                              */

+  /*    FT_FSTYPE_EDITABLE_EMBEDDING                                       */

+  /*    FT_FSTYPE_NO_SUBSETTING                                            */

+  /*    FT_FSTYPE_BITMAP_EMBEDDING_ONLY                                    */

+  /*                                                                       */

+  /*    FT_Get_FSType_Flags                                                */

+  /*                                                                       */

+  /*************************************************************************/

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_Glyph_Metrics                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A structure used to model the metrics of a single glyph.  The      */

+  /*    values are expressed in 26.6 fractional pixel format; if the flag  */

+  /*    @FT_LOAD_NO_SCALE has been used while loading the glyph, values    */

+  /*    are expressed in font units instead.                               */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    width ::                                                           */

+  /*      The glyph's width.                                               */

+  /*                                                                       */

+  /*    height ::                                                          */

+  /*      The glyph's height.                                              */

+  /*                                                                       */

+  /*    horiBearingX ::                                                    */

+  /*      Left side bearing for horizontal layout.                         */

+  /*                                                                       */

+  /*    horiBearingY ::                                                    */

+  /*      Top side bearing for horizontal layout.                          */

+  /*                                                                       */

+  /*    horiAdvance ::                                                     */

+  /*      Advance width for horizontal layout.                             */

+  /*                                                                       */

+  /*    vertBearingX ::                                                    */

+  /*      Left side bearing for vertical layout.                           */

+  /*                                                                       */

+  /*    vertBearingY ::                                                    */

+  /*      Top side bearing for vertical layout.  Larger positive values    */

+  /*      mean further below the vertical glyph origin.                    */

+  /*                                                                       */

+  /*    vertAdvance ::                                                     */

+  /*      Advance height for vertical layout.  Positive values mean the    */

+  /*      glyph has a positive advance downward.                           */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    If not disabled with @FT_LOAD_NO_HINTING, the values represent     */

+  /*    dimensions of the hinted glyph (in case hinting is applicable).    */

+  /*                                                                       */

+  /*    Stroking a glyph with an outside border does not increase          */

+  /*    `horiAdvance' or `vertAdvance'; you have to manually adjust these  */

+  /*    values to account for the added width and height.                  */

+  /*                                                                       */

+  typedef struct  FT_Glyph_Metrics_

+  {

+    FT_Pos  width;

+    FT_Pos  height;

+

+    FT_Pos  horiBearingX;

+    FT_Pos  horiBearingY;

+    FT_Pos  horiAdvance;

+

+    FT_Pos  vertBearingX;

+    FT_Pos  vertBearingY;

+    FT_Pos  vertAdvance;

+

+  } FT_Glyph_Metrics;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_Bitmap_Size                                                     */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This structure models the metrics of a bitmap strike (i.e., a set  */

+  /*    of glyphs for a given point size and resolution) in a bitmap font. */

+  /*    It is used for the `available_sizes' field of @FT_Face.            */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    height :: The vertical distance, in pixels, between two            */

+  /*              consecutive baselines.  It is always positive.           */

+  /*                                                                       */

+  /*    width  :: The average width, in pixels, of all glyphs in the       */

+  /*              strike.                                                  */

+  /*                                                                       */

+  /*    size   :: The nominal size of the strike in 26.6 fractional        */

+  /*              points.  This field is not very useful.                  */

+  /*                                                                       */

+  /*    x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional   */

+  /*              pixels.                                                  */

+  /*                                                                       */

+  /*    y_ppem :: The vertical ppem (nominal height) in 26.6 fractional    */

+  /*              pixels.                                                  */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Windows FNT:                                                       */

+  /*      The nominal size given in a FNT font is not reliable.  Thus when */

+  /*      the driver finds it incorrect, it sets `size' to some calculated */

+  /*      values and sets `x_ppem' and `y_ppem' to the pixel width and     */

+  /*      height given in the font, respectively.                          */

+  /*                                                                       */

+  /*    TrueType embedded bitmaps:                                         */

+  /*      `size', `width', and `height' values are not contained in the    */

+  /*      bitmap strike itself.  They are computed from the global font    */

+  /*      parameters.                                                      */

+  /*                                                                       */

+  typedef struct  FT_Bitmap_Size_

+  {

+    FT_Short  height;

+    FT_Short  width;

+

+    FT_Pos    size;

+

+    FT_Pos    x_ppem;

+    FT_Pos    y_ppem;

+

+  } FT_Bitmap_Size;

+

+

+  /*************************************************************************/

+  /*************************************************************************/

+  /*                                                                       */

+  /*                     O B J E C T   C L A S S E S                       */

+  /*                                                                       */

+  /*************************************************************************/

+  /*************************************************************************/

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Library                                                         */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a FreeType library instance.  Each `library' is        */

+  /*    completely independent from the others; it is the `root' of a set  */

+  /*    of objects like fonts, faces, sizes, etc.                          */

+  /*                                                                       */

+  /*    It also embeds a memory manager (see @FT_Memory), as well as a     */

+  /*    scan-line converter object (see @FT_Raster).                       */

+  /*                                                                       */

+  /*    In multi-threaded applications, make sure that the same FT_Library */

+  /*    object or any of its children doesn't get accessed in parallel.    */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Library objects are normally created by @FT_Init_FreeType, and     */

+  /*    destroyed with @FT_Done_FreeType.  If you need reference-counting  */

+  /*    (cf. @FT_Reference_Library), use @FT_New_Library and               */

+  /*    @FT_Done_Library.                                                  */

+  /*                                                                       */

+  typedef struct FT_LibraryRec_  *FT_Library;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Module                                                          */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a given FreeType module object.  Each module can be a  */

+  /*    font driver, a renderer, or anything else that provides services   */

+  /*    to the formers.                                                    */

+  /*                                                                       */

+  typedef struct FT_ModuleRec_*  FT_Module;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Driver                                                          */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a given FreeType font driver object.  Each font driver */

+  /*    is a special module capable of creating faces from font files.     */

+  /*                                                                       */

+  typedef struct FT_DriverRec_*  FT_Driver;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Renderer                                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a given FreeType renderer.  A renderer is a special    */

+  /*    module in charge of converting a glyph image to a bitmap, when     */

+  /*    necessary.  Each renderer supports a given glyph image format, and */

+  /*    one or more target surface depths.                                 */

+  /*                                                                       */

+  typedef struct FT_RendererRec_*  FT_Renderer;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Face                                                            */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a given typographic face object.  A face object models */

+  /*    a given typeface, in a given style.                                */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Each face object also owns a single @FT_GlyphSlot object, as well  */

+  /*    as one or more @FT_Size objects.                                   */

+  /*                                                                       */

+  /*    Use @FT_New_Face or @FT_Open_Face to create a new face object from */

+  /*    a given filepathname or a custom input stream.                     */

+  /*                                                                       */

+  /*    Use @FT_Done_Face to destroy it (along with its slot and sizes).   */

+  /*                                                                       */

+  /* <Also>                                                                */

+  /*    See @FT_FaceRec for the publicly accessible fields of a given face */

+  /*    object.                                                            */

+  /*                                                                       */

+  typedef struct FT_FaceRec_*  FT_Face;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Size                                                            */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to an object used to model a face scaled to a given       */

+  /*    character size.                                                    */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Each @FT_Face has an _active_ @FT_Size object that is used by      */

+  /*    functions like @FT_Load_Glyph to determine the scaling             */

+  /*    transformation which is used to load and hint glyphs and metrics.  */

+  /*                                                                       */

+  /*    You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes,                */

+  /*    @FT_Request_Size or even @FT_Select_Size to change the content     */

+  /*    (i.e., the scaling values) of the active @FT_Size.                 */

+  /*                                                                       */

+  /*    You can use @FT_New_Size to create additional size objects for a   */

+  /*    given @FT_Face, but they won't be used by other functions until    */

+  /*    you activate it through @FT_Activate_Size.  Only one size can be   */

+  /*    activated at any given time per face.                              */

+  /*                                                                       */

+  /* <Also>                                                                */

+  /*    See @FT_SizeRec for the publicly accessible fields of a given size */

+  /*    object.                                                            */

+  /*                                                                       */

+  typedef struct FT_SizeRec_*  FT_Size;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_GlyphSlot                                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a given `glyph slot'.  A slot is a container where it  */

+  /*    is possible to load any of the glyphs contained in its parent      */

+  /*    face.                                                              */

+  /*                                                                       */

+  /*    In other words, each time you call @FT_Load_Glyph or               */

+  /*    @FT_Load_Char, the slot's content is erased by the new glyph data, */

+  /*    i.e., the glyph's metrics, its image (bitmap or outline), and      */

+  /*    other control information.                                         */

+  /*                                                                       */

+  /* <Also>                                                                */

+  /*    See @FT_GlyphSlotRec for the publicly accessible glyph fields.     */

+  /*                                                                       */

+  typedef struct FT_GlyphSlotRec_*  FT_GlyphSlot;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_CharMap                                                         */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a given character map.  A charmap is used to translate */

+  /*    character codes in a given encoding into glyph indexes for its     */

+  /*    parent's face.  Some font formats may provide several charmaps per */

+  /*    font.                                                              */

+  /*                                                                       */

+  /*    Each face object owns zero or more charmaps, but only one of them  */

+  /*    can be `active' and used by @FT_Get_Char_Index or @FT_Load_Char.   */

+  /*                                                                       */

+  /*    The list of available charmaps in a face is available through the  */

+  /*    `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec.   */

+  /*                                                                       */

+  /*    The currently active charmap is available as `face->charmap'.      */

+  /*    You should call @FT_Set_Charmap to change it.                      */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    When a new face is created (either through @FT_New_Face or         */

+  /*    @FT_Open_Face), the library looks for a Unicode charmap within     */

+  /*    the list and automatically activates it.                           */

+  /*                                                                       */

+  /* <Also>                                                                */

+  /*    See @FT_CharMapRec for the publicly accessible fields of a given   */

+  /*    character map.                                                     */

+  /*                                                                       */

+  typedef struct FT_CharMapRec_*  FT_CharMap;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Macro>                                                               */

+  /*    FT_ENC_TAG                                                         */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This macro converts four-letter tags into an unsigned long.  It is */

+  /*    used to define `encoding' identifiers (see @FT_Encoding).          */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Since many 16-bit compilers don't like 32-bit enumerations, you    */

+  /*    should redefine this macro in case of problems to something like   */

+  /*    this:                                                              */

+  /*                                                                       */

+  /*    {                                                                  */

+  /*      #define FT_ENC_TAG( value, a, b, c, d )  value                   */

+  /*    }                                                                  */

+  /*                                                                       */

+  /*    to get a simple enumeration without assigning special numbers.     */

+  /*                                                                       */

+

+#ifndef FT_ENC_TAG

+#define FT_ENC_TAG( value, a, b, c, d )         \

+          value = ( ( (FT_UInt32)(a) << 24 ) |  \

+                    ( (FT_UInt32)(b) << 16 ) |  \

+                    ( (FT_UInt32)(c) <<  8 ) |  \

+                      (FT_UInt32)(d)         )

+

+#endif /* FT_ENC_TAG */

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    FT_Encoding                                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    An enumeration used to specify character sets supported by         */

+  /*    charmaps.  Used in the @FT_Select_Charmap API function.            */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Despite the name, this enumeration lists specific character        */

+  /*    repertories (i.e., charsets), and not text encoding methods (e.g., */

+  /*    UTF-8, UTF-16, etc.).                                              */

+  /*                                                                       */

+  /*    Other encodings might be defined in the future.                    */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_ENCODING_NONE ::                                                */

+  /*      The encoding value~0 is reserved.                                */

+  /*                                                                       */

+  /*    FT_ENCODING_UNICODE ::                                             */

+  /*      Corresponds to the Unicode character set.  This value covers     */

+  /*      all versions of the Unicode repertoire, including ASCII and      */

+  /*      Latin-1.  Most fonts include a Unicode charmap, but not all      */

+  /*      of them.                                                         */

+  /*                                                                       */

+  /*      For example, if you want to access Unicode value U+1F028 (and    */

+  /*      the font contains it), use value 0x1F028 as the input value for  */

+  /*      @FT_Get_Char_Index.                                              */

+  /*                                                                       */

+  /*    FT_ENCODING_MS_SYMBOL ::                                           */

+  /*      Corresponds to the Microsoft Symbol encoding, used to encode     */

+  /*      mathematical symbols in the 32..255 character code range.  For   */

+  /*      more information, see `http://www.ceviz.net/symbol.htm'.         */

+  /*                                                                       */

+  /*    FT_ENCODING_SJIS ::                                                */

+  /*      Corresponds to Japanese SJIS encoding.  More info at             */

+  /*      at `http://langsupport.japanreference.com/encoding.shtml'.       */

+  /*      See note on multi-byte encodings below.                          */

+  /*                                                                       */

+  /*    FT_ENCODING_GB2312 ::                                              */

+  /*      Corresponds to an encoding system for Simplified Chinese as used */

+  /*      used in mainland China.                                          */

+  /*                                                                       */

+  /*    FT_ENCODING_BIG5 ::                                                */

+  /*      Corresponds to an encoding system for Traditional Chinese as     */

+  /*      used in Taiwan and Hong Kong.                                    */

+  /*                                                                       */

+  /*    FT_ENCODING_WANSUNG ::                                             */

+  /*      Corresponds to the Korean encoding system known as Wansung.      */

+  /*      For more information see                                         */

+  /*      `http://www.microsoft.com/typography/unicode/949.txt'.           */

+  /*                                                                       */

+  /*    FT_ENCODING_JOHAB ::                                               */

+  /*      The Korean standard character set (KS~C 5601-1992), which        */

+  /*      corresponds to MS Windows code page 1361.  This character set    */

+  /*      includes all possible Hangeul character combinations.            */

+  /*                                                                       */

+  /*    FT_ENCODING_ADOBE_LATIN_1 ::                                       */

+  /*      Corresponds to a Latin-1 encoding as defined in a Type~1         */

+  /*      PostScript font.  It is limited to 256 character codes.          */

+  /*                                                                       */

+  /*    FT_ENCODING_ADOBE_STANDARD ::                                      */

+  /*      Corresponds to the Adobe Standard encoding, as found in Type~1,  */

+  /*      CFF, and OpenType/CFF fonts.  It is limited to 256 character     */

+  /*      codes.                                                           */

+  /*                                                                       */

+  /*    FT_ENCODING_ADOBE_EXPERT ::                                        */

+  /*      Corresponds to the Adobe Expert encoding, as found in Type~1,    */

+  /*      CFF, and OpenType/CFF fonts.  It is limited to 256 character     */

+  /*      codes.                                                           */

+  /*                                                                       */

+  /*    FT_ENCODING_ADOBE_CUSTOM ::                                        */

+  /*      Corresponds to a custom encoding, as found in Type~1, CFF, and   */

+  /*      OpenType/CFF fonts.  It is limited to 256 character codes.       */

+  /*                                                                       */

+  /*    FT_ENCODING_APPLE_ROMAN ::                                         */

+  /*      Corresponds to the 8-bit Apple roman encoding.  Many TrueType    */

+  /*      and OpenType fonts contain a charmap for this encoding, since    */

+  /*      older versions of Mac OS are able to use it.                     */

+  /*                                                                       */

+  /*    FT_ENCODING_OLD_LATIN_2 ::                                         */

+  /*      This value is deprecated and was never used nor reported by      */

+  /*      FreeType.  Don't use or test for it.                             */

+  /*                                                                       */

+  /*    FT_ENCODING_MS_SJIS ::                                             */

+  /*      Same as FT_ENCODING_SJIS.  Deprecated.                           */

+  /*                                                                       */

+  /*    FT_ENCODING_MS_GB2312 ::                                           */

+  /*      Same as FT_ENCODING_GB2312.  Deprecated.                         */

+  /*                                                                       */

+  /*    FT_ENCODING_MS_BIG5 ::                                             */

+  /*      Same as FT_ENCODING_BIG5.  Deprecated.                           */

+  /*                                                                       */

+  /*    FT_ENCODING_MS_WANSUNG ::                                          */

+  /*      Same as FT_ENCODING_WANSUNG.  Deprecated.                        */

+  /*                                                                       */

+  /*    FT_ENCODING_MS_JOHAB ::                                            */

+  /*      Same as FT_ENCODING_JOHAB.  Deprecated.                          */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    By default, FreeType automatically synthesizes a Unicode charmap   */

+  /*    for PostScript fonts, using their glyph names dictionaries.        */

+  /*    However, it also reports the encodings defined explicitly in the   */

+  /*    font file, for the cases when they are needed, with the Adobe      */

+  /*    values as well.                                                    */

+  /*                                                                       */

+  /*    FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap  */

+  /*    is neither Unicode nor ISO-8859-1 (otherwise it is set to          */

+  /*    FT_ENCODING_UNICODE).  Use @FT_Get_BDF_Charset_ID to find out      */

+  /*    which encoding is really present.  If, for example, the            */

+  /*    `cs_registry' field is `KOI8' and the `cs_encoding' field is `R',  */

+  /*    the font is encoded in KOI8-R.                                     */

+  /*                                                                       */

+  /*    FT_ENCODING_NONE is always set (with a single exception) by the    */

+  /*    winfonts driver.  Use @FT_Get_WinFNT_Header and examine the        */

+  /*    `charset' field of the @FT_WinFNT_HeaderRec structure to find out  */

+  /*    which encoding is really present.  For example,                    */

+  /*    @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for       */

+  /*    Russian).                                                          */

+  /*                                                                       */

+  /*    FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */

+  /*    and `encoding_id' is not @TT_MAC_ID_ROMAN (otherwise it is set to  */

+  /*    FT_ENCODING_APPLE_ROMAN).                                          */

+  /*                                                                       */

+  /*    If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function       */

+  /*    @FT_Get_CMap_Language_ID  to query the Mac language ID which may   */

+  /*    be needed to be able to distinguish Apple encoding variants.  See  */

+  /*                                                                       */

+  /*      http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT  */

+  /*                                                                       */

+  /*    to get an idea how to do that.  Basically, if the language ID      */

+  /*    is~0, don't use it, otherwise subtract 1 from the language ID.     */

+  /*    Then examine `encoding_id'.  If, for example, `encoding_id' is     */

+  /*    @TT_MAC_ID_ROMAN and the language ID (minus~1) is                  */

+  /*    `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman.        */

+  /*    @TT_MAC_ID_ARABIC with `TT_MAC_LANGID_FARSI' means the Farsi       */

+  /*    variant the Arabic encoding.                                       */

+  /*                                                                       */

+  typedef enum  FT_Encoding_

+  {

+    FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ),

+

+    FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ),

+    FT_ENC_TAG( FT_ENCODING_UNICODE,   'u', 'n', 'i', 'c' ),

+

+    FT_ENC_TAG( FT_ENCODING_SJIS,    's', 'j', 'i', 's' ),

+    FT_ENC_TAG( FT_ENCODING_GB2312,  'g', 'b', ' ', ' ' ),

+    FT_ENC_TAG( FT_ENCODING_BIG5,    'b', 'i', 'g', '5' ),

+    FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ),

+    FT_ENC_TAG( FT_ENCODING_JOHAB,   'j', 'o', 'h', 'a' ),

+

+    /* for backwards compatibility */

+    FT_ENCODING_MS_SJIS    = FT_ENCODING_SJIS,

+    FT_ENCODING_MS_GB2312  = FT_ENCODING_GB2312,

+    FT_ENCODING_MS_BIG5    = FT_ENCODING_BIG5,

+    FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,

+    FT_ENCODING_MS_JOHAB   = FT_ENCODING_JOHAB,

+

+    FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ),

+    FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT,   'A', 'D', 'B', 'E' ),

+    FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM,   'A', 'D', 'B', 'C' ),

+    FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1,  'l', 'a', 't', '1' ),

+

+    FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ),

+

+    FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' )

+

+  } FT_Encoding;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    ft_encoding_xxx                                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    These constants are deprecated; use the corresponding @FT_Encoding */

+  /*    values instead.                                                    */

+  /*                                                                       */

+#define ft_encoding_none            FT_ENCODING_NONE

+#define ft_encoding_unicode         FT_ENCODING_UNICODE

+#define ft_encoding_symbol          FT_ENCODING_MS_SYMBOL

+#define ft_encoding_latin_1         FT_ENCODING_ADOBE_LATIN_1

+#define ft_encoding_latin_2         FT_ENCODING_OLD_LATIN_2

+#define ft_encoding_sjis            FT_ENCODING_SJIS

+#define ft_encoding_gb2312          FT_ENCODING_GB2312

+#define ft_encoding_big5            FT_ENCODING_BIG5

+#define ft_encoding_wansung         FT_ENCODING_WANSUNG

+#define ft_encoding_johab           FT_ENCODING_JOHAB

+

+#define ft_encoding_adobe_standard  FT_ENCODING_ADOBE_STANDARD

+#define ft_encoding_adobe_expert    FT_ENCODING_ADOBE_EXPERT

+#define ft_encoding_adobe_custom    FT_ENCODING_ADOBE_CUSTOM

+#define ft_encoding_apple_roman     FT_ENCODING_APPLE_ROMAN

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_CharMapRec                                                      */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    The base charmap structure.                                        */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    face        :: A handle to the parent face object.                 */

+  /*                                                                       */

+  /*    encoding    :: An @FT_Encoding tag identifying the charmap.  Use   */

+  /*                   this with @FT_Select_Charmap.                       */

+  /*                                                                       */

+  /*    platform_id :: An ID number describing the platform for the        */

+  /*                   following encoding ID.  This comes directly from    */

+  /*                   the TrueType specification and should be emulated   */

+  /*                   for other formats.                                  */

+  /*                                                                       */

+  /*    encoding_id :: A platform specific encoding number.  This also     */

+  /*                   comes from the TrueType specification and should be */

+  /*                   emulated similarly.                                 */

+  /*                                                                       */

+  typedef struct  FT_CharMapRec_

+  {

+    FT_Face      face;

+    FT_Encoding  encoding;

+    FT_UShort    platform_id;

+    FT_UShort    encoding_id;

+

+  } FT_CharMapRec;

+

+

+  /*************************************************************************/

+  /*************************************************************************/

+  /*                                                                       */

+  /*                 B A S E   O B J E C T   C L A S S E S                 */

+  /*                                                                       */

+  /*************************************************************************/

+  /*************************************************************************/

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Face_Internal                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    An opaque handle to an `FT_Face_InternalRec' structure, used to    */

+  /*    model private data of a given @FT_Face object.                     */

+  /*                                                                       */

+  /*    This structure might change between releases of FreeType~2 and is  */

+  /*    not generally available to client applications.                    */

+  /*                                                                       */

+  typedef struct FT_Face_InternalRec_*  FT_Face_Internal;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_FaceRec                                                         */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    FreeType root face class structure.  A face object models a        */

+  /*    typeface in a font file.                                           */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    num_faces           :: The number of faces in the font file.  Some */

+  /*                           font formats can have multiple faces in     */

+  /*                           a font file.                                */

+  /*                                                                       */

+  /*    face_index          :: The index of the face in the font file.  It */

+  /*                           is set to~0 if there is only one face in    */

+  /*                           the font file.                              */

+  /*                                                                       */

+  /*    face_flags          :: A set of bit flags that give important      */

+  /*                           information about the face; see             */

+  /*                           @FT_FACE_FLAG_XXX for the details.          */

+  /*                                                                       */

+  /*    style_flags         :: A set of bit flags indicating the style of  */

+  /*                           the face; see @FT_STYLE_FLAG_XXX for the    */

+  /*                           details.                                    */

+  /*                                                                       */

+  /*    num_glyphs          :: The number of glyphs in the face.  If the   */

+  /*                           face is scalable and has sbits (see         */

+  /*                           `num_fixed_sizes'), it is set to the number */

+  /*                           of outline glyphs.                          */

+  /*                                                                       */

+  /*                           For CID-keyed fonts, this value gives the   */

+  /*                           highest CID used in the font.               */

+  /*                                                                       */

+  /*    family_name         :: The face's family name.  This is an ASCII   */

+  /*                           string, usually in English, which describes */

+  /*                           the typeface's family (like `Times New      */

+  /*                           Roman', `Bodoni', `Garamond', etc).  This   */

+  /*                           is a least common denominator used to list  */

+  /*                           fonts.  Some formats (TrueType & OpenType)  */

+  /*                           provide localized and Unicode versions of   */

+  /*                           this string.  Applications should use the   */

+  /*                           format specific interface to access them.   */

+  /*                           Can be NULL (e.g., in fonts embedded in a   */

+  /*                           PDF file).                                  */

+  /*                                                                       */

+  /*    style_name          :: The face's style name.  This is an ASCII    */

+  /*                           string, usually in English, which describes */

+  /*                           the typeface's style (like `Italic',        */

+  /*                           `Bold', `Condensed', etc).  Not all font    */

+  /*                           formats provide a style name, so this field */

+  /*                           is optional, and can be set to NULL.  As    */

+  /*                           for `family_name', some formats provide     */

+  /*                           localized and Unicode versions of this      */

+  /*                           string.  Applications should use the format */

+  /*                           specific interface to access them.          */

+  /*                                                                       */

+  /*    num_fixed_sizes     :: The number of bitmap strikes in the face.   */

+  /*                           Even if the face is scalable, there might   */

+  /*                           still be bitmap strikes, which are called   */

+  /*                           `sbits' in that case.                       */

+  /*                                                                       */

+  /*    available_sizes     :: An array of @FT_Bitmap_Size for all bitmap  */

+  /*                           strikes in the face.  It is set to NULL if  */

+  /*                           there is no bitmap strike.                  */

+  /*                                                                       */

+  /*    num_charmaps        :: The number of charmaps in the face.         */

+  /*                                                                       */

+  /*    charmaps            :: An array of the charmaps of the face.       */

+  /*                                                                       */

+  /*    generic             :: A field reserved for client uses.  See the  */

+  /*                           @FT_Generic type description.               */

+  /*                                                                       */

+  /*    bbox                :: The font bounding box.  Coordinates are     */

+  /*                           expressed in font units (see                */

+  /*                           `units_per_EM').  The box is large enough   */

+  /*                           to contain any glyph from the font.  Thus,  */

+  /*                           `bbox.yMax' can be seen as the `maximum     */

+  /*                           ascender', and `bbox.yMin' as the `minimum  */

+  /*                           descender'.  Only relevant for scalable     */

+  /*                           formats.                                    */

+  /*                                                                       */

+  /*                           Note that the bounding box might be off by  */

+  /*                           (at least) one pixel for hinted fonts.  See */

+  /*                           @FT_Size_Metrics for further discussion.    */

+  /*                                                                       */

+  /*    units_per_EM        :: The number of font units per EM square for  */

+  /*                           this face.  This is typically 2048 for      */

+  /*                           TrueType fonts, and 1000 for Type~1 fonts.  */

+  /*                           Only relevant for scalable formats.         */

+  /*                                                                       */

+  /*    ascender            :: The typographic ascender of the face,       */

+  /*                           expressed in font units.  For font formats  */

+  /*                           not having this information, it is set to   */

+  /*                           `bbox.yMax'.  Only relevant for scalable    */

+  /*                           formats.                                    */

+  /*                                                                       */

+  /*    descender           :: The typographic descender of the face,      */

+  /*                           expressed in font units.  For font formats  */

+  /*                           not having this information, it is set to   */

+  /*                           `bbox.yMin'.  Note that this field is       */

+  /*                           usually negative.  Only relevant for        */

+  /*                           scalable formats.                           */

+  /*                                                                       */

+  /*    height              :: This value is the vertical distance         */

+  /*                           between two consecutive baselines,          */

+  /*                           expressed in font units.  It is always      */

+  /*                           positive.  Only relevant for scalable       */

+  /*                           formats.                                    */

+  /*                                                                       */

+  /*                           If you want the global glyph height, use    */

+  /*                           `ascender - descender'.                     */

+  /*                                                                       */

+  /*    max_advance_width   :: The maximum advance width, in font units,   */

+  /*                           for all glyphs in this face.  This can be   */

+  /*                           used to make word wrapping computations     */

+  /*                           faster.  Only relevant for scalable         */

+  /*                           formats.                                    */

+  /*                                                                       */

+  /*    max_advance_height  :: The maximum advance height, in font units,  */

+  /*                           for all glyphs in this face.  This is only  */

+  /*                           relevant for vertical layouts, and is set   */

+  /*                           to `height' for fonts that do not provide   */

+  /*                           vertical metrics.  Only relevant for        */

+  /*                           scalable formats.                           */

+  /*                                                                       */

+  /*    underline_position  :: The position, in font units, of the         */

+  /*                           underline line for this face.  It is the    */

+  /*                           center of the underlining stem.  Only       */

+  /*                           relevant for scalable formats.              */

+  /*                                                                       */

+  /*    underline_thickness :: The thickness, in font units, of the        */

+  /*                           underline for this face.  Only relevant for */

+  /*                           scalable formats.                           */

+  /*                                                                       */

+  /*    glyph               :: The face's associated glyph slot(s).        */

+  /*                                                                       */

+  /*    size                :: The current active size for this face.      */

+  /*                                                                       */

+  /*    charmap             :: The current active charmap for this face.   */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Fields may be changed after a call to @FT_Attach_File or           */

+  /*    @FT_Attach_Stream.                                                 */

+  /*                                                                       */

+  typedef struct  FT_FaceRec_

+  {

+    FT_Long           num_faces;

+    FT_Long           face_index;

+

+    FT_Long           face_flags;

+    FT_Long           style_flags;

+

+    FT_Long           num_glyphs;

+

+    FT_String*        family_name;

+    FT_String*        style_name;

+

+    FT_Int            num_fixed_sizes;

+    FT_Bitmap_Size*   available_sizes;

+

+    FT_Int            num_charmaps;

+    FT_CharMap*       charmaps;

+

+#ifdef	_FX_MANAGED_CODE_

+#define generic		generic_data

+#endif

+

+    FT_Generic        generic;

+

+    /*# The following member variables (down to `underline_thickness') */

+    /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size    */

+    /*# for bitmap fonts.                                              */

+    FT_BBox           bbox;

+

+    FT_UShort         units_per_EM;

+    FT_Short          ascender;

+    FT_Short          descender;

+    FT_Short          height;

+

+    FT_Short          max_advance_width;

+    FT_Short          max_advance_height;

+

+    FT_Short          underline_position;

+    FT_Short          underline_thickness;

+

+    FT_GlyphSlot      glyph;

+    FT_Size           size;

+    FT_CharMap        charmap;

+

+    /*@private begin */

+

+    FT_Driver         driver;

+    FT_Memory         memory;

+    FT_Stream         stream;

+

+    FT_ListRec        sizes_list;

+

+    FT_Generic        autohint;   /* face-specific auto-hinter data */

+    void*             extensions; /* unused                         */

+

+    FT_Face_Internal  internal;

+

+    /*@private end */

+

+  } FT_FaceRec;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    FT_FACE_FLAG_XXX                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A list of bit flags used in the `face_flags' field of the          */

+  /*    @FT_FaceRec structure.  They inform client applications of         */

+  /*    properties of the corresponding face.                              */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_FACE_FLAG_SCALABLE ::                                           */

+  /*      Indicates that the face contains outline glyphs.  This doesn't   */

+  /*      prevent bitmap strikes, i.e., a face can have both this and      */

+  /*      and @FT_FACE_FLAG_FIXED_SIZES set.                               */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_FIXED_SIZES ::                                        */

+  /*      Indicates that the face contains bitmap strikes.  See also the   */

+  /*      `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec.   */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_FIXED_WIDTH ::                                        */

+  /*      Indicates that the face contains fixed-width characters (like    */

+  /*      Courier, Lucido, MonoType, etc.).                                */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_SFNT ::                                               */

+  /*      Indicates that the face uses the `sfnt' storage scheme.  For     */

+  /*      now, this means TrueType and OpenType.                           */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_HORIZONTAL ::                                         */

+  /*      Indicates that the face contains horizontal glyph metrics.  This */

+  /*      should be set for all common formats.                            */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_VERTICAL ::                                           */

+  /*      Indicates that the face contains vertical glyph metrics.  This   */

+  /*      is only available in some formats, not all of them.              */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_KERNING ::                                            */

+  /*      Indicates that the face contains kerning information.  If set,   */

+  /*      the kerning distance can be retrieved through the function       */

+  /*      @FT_Get_Kerning.  Otherwise the function always return the       */

+  /*      vector (0,0).  Note that FreeType doesn't handle kerning data    */

+  /*      from the `GPOS' table (as present in some OpenType fonts).       */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_FAST_GLYPHS ::                                        */

+  /*      THIS FLAG IS DEPRECATED.  DO NOT USE OR TEST IT.                 */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_MULTIPLE_MASTERS ::                                   */

+  /*      Indicates that the font contains multiple masters and is capable */

+  /*      of interpolating between them.  See the multiple-masters         */

+  /*      specific API for details.                                        */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_GLYPH_NAMES ::                                        */

+  /*      Indicates that the font contains glyph names that can be         */

+  /*      retrieved through @FT_Get_Glyph_Name.  Note that some TrueType   */

+  /*      fonts contain broken glyph name tables.  Use the function        */

+  /*      @FT_Has_PS_Glyph_Names when needed.                              */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_EXTERNAL_STREAM ::                                    */

+  /*      Used internally by FreeType to indicate that a face's stream was */

+  /*      provided by the client application and should not be destroyed   */

+  /*      when @FT_Done_Face is called.  Don't read or test this flag.     */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_HINTER ::                                             */

+  /*      Set if the font driver has a hinting machine of its own.  For    */

+  /*      example, with TrueType fonts, it makes sense to use data from    */

+  /*      the SFNT `gasp' table only if the native TrueType hinting engine */

+  /*      (with the bytecode interpreter) is available and active.         */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_CID_KEYED ::                                          */

+  /*      Set if the font is CID-keyed.  In that case, the font is not     */

+  /*      accessed by glyph indices but by CID values.  For subsetted      */

+  /*      CID-keyed fonts this has the consequence that not all index      */

+  /*      values are a valid argument to FT_Load_Glyph.  Only the CID      */

+  /*      values for which corresponding glyphs in the subsetted font      */

+  /*      exist make FT_Load_Glyph return successfully; in all other cases */

+  /*      you get an `FT_Err_Invalid_Argument' error.                      */

+  /*                                                                       */

+  /*      Note that CID-keyed fonts which are in an SFNT wrapper don't     */

+  /*      have this flag set since the glyphs are accessed in the normal   */

+  /*      way (using contiguous indices); the `CID-ness' isn't visible to  */

+  /*      the application.                                                 */

+  /*                                                                       */

+  /*    FT_FACE_FLAG_TRICKY ::                                             */

+  /*      Set if the font is `tricky', this is, it always needs the        */

+  /*      font format's native hinting engine to get a reasonable result.  */

+  /*      A typical example is the Chinese font `mingli.ttf' which uses    */

+  /*      TrueType bytecode instructions to move and scale all of its      */

+  /*      subglyphs.                                                       */

+  /*                                                                       */

+  /*      It is not possible to autohint such fonts using                  */

+  /*      @FT_LOAD_FORCE_AUTOHINT; it will also ignore                     */

+  /*      @FT_LOAD_NO_HINTING.  You have to set both @FT_LOAD_NO_HINTING   */

+  /*      and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */

+  /*      probably never want this except for demonstration purposes.      */

+  /*                                                                       */

+  /*      Currently, there are about a dozen TrueType fonts in the list of */

+  /*      tricky fonts; they are hard-coded in file `ttobjs.c'.            */

+  /*                                                                       */

+#define FT_FACE_FLAG_SCALABLE          ( 1L <<  0 )

+#define FT_FACE_FLAG_FIXED_SIZES       ( 1L <<  1 )

+#define FT_FACE_FLAG_FIXED_WIDTH       ( 1L <<  2 )

+#define FT_FACE_FLAG_SFNT              ( 1L <<  3 )

+#define FT_FACE_FLAG_HORIZONTAL        ( 1L <<  4 )

+#define FT_FACE_FLAG_VERTICAL          ( 1L <<  5 )

+#define FT_FACE_FLAG_KERNING           ( 1L <<  6 )

+#define FT_FACE_FLAG_FAST_GLYPHS       ( 1L <<  7 )

+#define FT_FACE_FLAG_MULTIPLE_MASTERS  ( 1L <<  8 )

+#define FT_FACE_FLAG_GLYPH_NAMES       ( 1L <<  9 )

+#define FT_FACE_FLAG_EXTERNAL_STREAM   ( 1L << 10 )

+#define FT_FACE_FLAG_HINTER            ( 1L << 11 )

+#define FT_FACE_FLAG_CID_KEYED         ( 1L << 12 )

+#define FT_FACE_FLAG_TRICKY            ( 1L << 13 )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_HAS_HORIZONTAL( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains

+   *   horizontal metrics (this is true for all font formats though).

+   *

+   * @also:

+   *   @FT_HAS_VERTICAL can be used to check for vertical metrics.

+   *

+   */

+#define FT_HAS_HORIZONTAL( face ) \

+          ( face->face_flags & FT_FACE_FLAG_HORIZONTAL )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_HAS_VERTICAL( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains real

+   *   vertical metrics (and not only synthesized ones).

+   *

+   */

+#define FT_HAS_VERTICAL( face ) \

+          ( face->face_flags & FT_FACE_FLAG_VERTICAL )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_HAS_KERNING( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains kerning

+   *   data that can be accessed with @FT_Get_Kerning.

+   *

+   */

+#define FT_HAS_KERNING( face ) \

+          ( face->face_flags & FT_FACE_FLAG_KERNING )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_IS_SCALABLE( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains a scalable

+   *   font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF,

+   *   and PFR font formats.

+   *

+   */

+#define FT_IS_SCALABLE( face ) \

+          ( face->face_flags & FT_FACE_FLAG_SCALABLE )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_IS_SFNT( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains a font

+   *   whose format is based on the SFNT storage scheme.  This usually

+   *   means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded

+   *   bitmap fonts.

+   *

+   *   If this macro is true, all functions defined in @FT_SFNT_NAMES_H and

+   *   @FT_TRUETYPE_TABLES_H are available.

+   *

+   */

+#define FT_IS_SFNT( face ) \

+          ( face->face_flags & FT_FACE_FLAG_SFNT )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_IS_FIXED_WIDTH( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains a font face

+   *   that contains fixed-width (or `monospace', `fixed-pitch', etc.)

+   *   glyphs.

+   *

+   */

+#define FT_IS_FIXED_WIDTH( face ) \

+          ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_HAS_FIXED_SIZES( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains some

+   *   embedded bitmaps.  See the `available_sizes' field of the

+   *   @FT_FaceRec structure.

+   *

+   */

+#define FT_HAS_FIXED_SIZES( face ) \

+          ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_HAS_FAST_GLYPHS( face )

+   *

+   * @description:

+   *   Deprecated.

+   *

+   */

+#define FT_HAS_FAST_GLYPHS( face )  0

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_HAS_GLYPH_NAMES( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains some glyph

+   *   names that can be accessed through @FT_Get_Glyph_Name.

+   *

+   */

+#define FT_HAS_GLYPH_NAMES( face ) \

+          ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_HAS_MULTIPLE_MASTERS( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains some

+   *   multiple masters.  The functions provided by @FT_MULTIPLE_MASTERS_H

+   *   are then available to choose the exact design you want.

+   *

+   */

+#define FT_HAS_MULTIPLE_MASTERS( face ) \

+          ( face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_IS_CID_KEYED( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face object contains a CID-keyed

+   *   font.  See the discussion of @FT_FACE_FLAG_CID_KEYED for more

+   *   details.

+   *

+   *   If this macro is true, all functions defined in @FT_CID_H are

+   *   available.

+   *

+   */

+#define FT_IS_CID_KEYED( face ) \

+          ( face->face_flags & FT_FACE_FLAG_CID_KEYED )

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_IS_TRICKY( face )

+   *

+   * @description:

+   *   A macro that returns true whenever a face represents a `tricky' font.

+   *   See the discussion of @FT_FACE_FLAG_TRICKY for more details.

+   *

+   */

+#define FT_IS_TRICKY( face ) \

+          ( face->face_flags & FT_FACE_FLAG_TRICKY )

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Const>                                                               */

+  /*    FT_STYLE_FLAG_XXX                                                  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A list of bit-flags used to indicate the style of a given face.    */

+  /*    These are used in the `style_flags' field of @FT_FaceRec.          */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_STYLE_FLAG_ITALIC ::                                            */

+  /*      Indicates that a given face style is italic or oblique.          */

+  /*                                                                       */

+  /*    FT_STYLE_FLAG_BOLD ::                                              */

+  /*      Indicates that a given face is bold.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The style information as provided by FreeType is very basic.  More */

+  /*    details are beyond the scope and should be done on a higher level  */

+  /*    (for example, by analyzing various fields of the `OS/2' table in   */

+  /*    SFNT based fonts).                                                 */

+  /*                                                                       */

+#define FT_STYLE_FLAG_ITALIC  ( 1 << 0 )

+#define FT_STYLE_FLAG_BOLD    ( 1 << 1 )

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Size_Internal                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    An opaque handle to an `FT_Size_InternalRec' structure, used to    */

+  /*    model private data of a given @FT_Size object.                     */

+  /*                                                                       */

+  typedef struct FT_Size_InternalRec_*  FT_Size_Internal;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_Size_Metrics                                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    The size metrics structure gives the metrics of a size object.     */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    x_ppem       :: The width of the scaled EM square in pixels, hence */

+  /*                    the term `ppem' (pixels per EM).  It is also       */

+  /*                    referred to as `nominal width'.                    */

+  /*                                                                       */

+  /*    y_ppem       :: The height of the scaled EM square in pixels,      */

+  /*                    hence the term `ppem' (pixels per EM).  It is also */

+  /*                    referred to as `nominal height'.                   */

+  /*                                                                       */

+  /*    x_scale      :: A 16.16 fractional scaling value used to convert   */

+  /*                    horizontal metrics from font units to 26.6         */

+  /*                    fractional pixels.  Only relevant for scalable     */

+  /*                    font formats.                                      */

+  /*                                                                       */

+  /*    y_scale      :: A 16.16 fractional scaling value used to convert   */

+  /*                    vertical metrics from font units to 26.6           */

+  /*                    fractional pixels.  Only relevant for scalable     */

+  /*                    font formats.                                      */

+  /*                                                                       */

+  /*    ascender     :: The ascender in 26.6 fractional pixels.  See       */

+  /*                    @FT_FaceRec for the details.                       */

+  /*                                                                       */

+  /*    descender    :: The descender in 26.6 fractional pixels.  See      */

+  /*                    @FT_FaceRec for the details.                       */

+  /*                                                                       */

+  /*    height       :: The height in 26.6 fractional pixels.  See         */

+  /*                    @FT_FaceRec for the details.                       */

+  /*                                                                       */

+  /*    max_advance  :: The maximum advance width in 26.6 fractional       */

+  /*                    pixels.  See @FT_FaceRec for the details.          */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The scaling values, if relevant, are determined first during a     */

+  /*    size changing operation.  The remaining fields are then set by the */

+  /*    driver.  For scalable formats, they are usually set to scaled      */

+  /*    values of the corresponding fields in @FT_FaceRec.                 */

+  /*                                                                       */

+  /*    Note that due to glyph hinting, these values might not be exact    */

+  /*    for certain fonts.  Thus they must be treated as unreliable        */

+  /*    with an error margin of at least one pixel!                        */

+  /*                                                                       */

+  /*    Indeed, the only way to get the exact metrics is to render _all_   */

+  /*    glyphs.  As this would be a definite performance hit, it is up to  */

+  /*    client applications to perform such computations.                  */

+  /*                                                                       */

+  /*    The FT_Size_Metrics structure is valid for bitmap fonts also.      */

+  /*                                                                       */

+  typedef struct  FT_Size_Metrics_

+  {

+    FT_UShort  x_ppem;      /* horizontal pixels per EM               */

+    FT_UShort  y_ppem;      /* vertical pixels per EM                 */

+

+    FT_Fixed   x_scale;     /* scaling values used to convert font    */

+    FT_Fixed   y_scale;     /* units to 26.6 fractional pixels        */

+

+    FT_Pos     ascender;    /* ascender in 26.6 frac. pixels          */

+    FT_Pos     descender;   /* descender in 26.6 frac. pixels         */

+    FT_Pos     height;      /* text height in 26.6 frac. pixels       */

+    FT_Pos     max_advance; /* max horizontal advance, in 26.6 pixels */

+

+  } FT_Size_Metrics;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_SizeRec                                                         */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    FreeType root size class structure.  A size object models a face   */

+  /*    object at a given size.                                            */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    face    :: Handle to the parent face object.                       */

+  /*                                                                       */

+  /*    generic :: A typeless pointer, which is unused by the FreeType     */

+  /*               library or any of its drivers.  It can be used by       */

+  /*               client applications to link their own data to each size */

+  /*               object.                                                 */

+  /*                                                                       */

+  /*    metrics :: Metrics for this size object.  This field is read-only. */

+  /*                                                                       */

+  typedef struct  FT_SizeRec_

+  {

+    FT_Face           face;      /* parent face object              */

+    FT_Generic        generic;   /* generic pointer for client uses */

+    FT_Size_Metrics   metrics;   /* size metrics                    */

+    FT_Size_Internal  internal;

+

+  } FT_SizeRec;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_SubGlyph                                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    The subglyph structure is an internal object used to describe      */

+  /*    subglyphs (for example, in the case of composites).                */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The subglyph implementation is not part of the high-level API,     */

+  /*    hence the forward structure declaration.                           */

+  /*                                                                       */

+  /*    You can however retrieve subglyph information with                 */

+  /*    @FT_Get_SubGlyph_Info.                                             */

+  /*                                                                       */

+  typedef struct FT_SubGlyphRec_*  FT_SubGlyph;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Type>                                                                */

+  /*    FT_Slot_Internal                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    An opaque handle to an `FT_Slot_InternalRec' structure, used to    */

+  /*    model private data of a given @FT_GlyphSlot object.                */

+  /*                                                                       */

+  typedef struct FT_Slot_InternalRec_*  FT_Slot_Internal;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_GlyphSlotRec                                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    FreeType root glyph slot class structure.  A glyph slot is a       */

+  /*    container where individual glyphs can be loaded, be they in        */

+  /*    outline or bitmap format.                                          */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    library           :: A handle to the FreeType library instance     */

+  /*                         this slot belongs to.                         */

+  /*                                                                       */

+  /*    face              :: A handle to the parent face object.           */

+  /*                                                                       */

+  /*    next              :: In some cases (like some font tools), several */

+  /*                         glyph slots per face object can be a good     */

+  /*                         thing.  As this is rare, the glyph slots are  */

+  /*                         listed through a direct, single-linked list   */

+  /*                         using its `next' field.                       */

+  /*                                                                       */

+  /*    generic           :: A typeless pointer which is unused by the     */

+  /*                         FreeType library or any of its drivers.  It   */

+  /*                         can be used by client applications to link    */

+  /*                         their own data to each glyph slot object.     */

+  /*                                                                       */

+  /*    metrics           :: The metrics of the last loaded glyph in the   */

+  /*                         slot.  The returned values depend on the last */

+  /*                         load flags (see the @FT_Load_Glyph API        */

+  /*                         function) and can be expressed either in 26.6 */

+  /*                         fractional pixels or font units.              */

+  /*                                                                       */

+  /*                         Note that even when the glyph image is        */

+  /*                         transformed, the metrics are not.             */

+  /*                                                                       */

+  /*    linearHoriAdvance :: The advance width of the unhinted glyph.      */

+  /*                         Its value is expressed in 16.16 fractional    */

+  /*                         pixels, unless @FT_LOAD_LINEAR_DESIGN is set  */

+  /*                         when loading the glyph.  This field can be    */

+  /*                         important to perform correct WYSIWYG layout.  */

+  /*                         Only relevant for outline glyphs.             */

+  /*                                                                       */

+  /*    linearVertAdvance :: The advance height of the unhinted glyph.     */

+  /*                         Its value is expressed in 16.16 fractional    */

+  /*                         pixels, unless @FT_LOAD_LINEAR_DESIGN is set  */

+  /*                         when loading the glyph.  This field can be    */

+  /*                         important to perform correct WYSIWYG layout.  */

+  /*                         Only relevant for outline glyphs.             */

+  /*                                                                       */

+  /*    advance           :: This shorthand is, depending on               */

+  /*                         @FT_LOAD_IGNORE_TRANSFORM, the transformed    */

+  /*                         advance width for the glyph (in 26.6          */

+  /*                         fractional pixel format).  As specified with  */

+  /*                         @FT_LOAD_VERTICAL_LAYOUT, it uses either the  */

+  /*                         `horiAdvance' or the `vertAdvance' value of   */

+  /*                         `metrics' field.                              */

+  /*                                                                       */

+  /*    format            :: This field indicates the format of the image  */

+  /*                         contained in the glyph slot.  Typically       */

+  /*                         @FT_GLYPH_FORMAT_BITMAP,                      */

+  /*                         @FT_GLYPH_FORMAT_OUTLINE, or                  */

+  /*                         @FT_GLYPH_FORMAT_COMPOSITE, but others are    */

+  /*                         possible.                                     */

+  /*                                                                       */

+  /*    bitmap            :: This field is used as a bitmap descriptor     */

+  /*                         when the slot format is                       */

+  /*                         @FT_GLYPH_FORMAT_BITMAP.  Note that the       */

+  /*                         address and content of the bitmap buffer can  */

+  /*                         change between calls of @FT_Load_Glyph and a  */

+  /*                         few other functions.                          */

+  /*                                                                       */

+  /*    bitmap_left       :: This is the bitmap's left bearing expressed   */

+  /*                         in integer pixels.  Of course, this is only   */

+  /*                         valid if the format is                        */

+  /*                         @FT_GLYPH_FORMAT_BITMAP.                      */

+  /*                                                                       */

+  /*    bitmap_top        :: This is the bitmap's top bearing expressed in */

+  /*                         integer pixels.  Remember that this is the    */

+  /*                         distance from the baseline to the top-most    */

+  /*                         glyph scanline, upwards y~coordinates being   */

+  /*                         *positive*.                                   */

+  /*                                                                       */

+  /*    outline           :: The outline descriptor for the current glyph  */

+  /*                         image if its format is                        */

+  /*                         @FT_GLYPH_FORMAT_OUTLINE.  Once a glyph is    */

+  /*                         loaded, `outline' can be transformed,         */

+  /*                         distorted, embolded, etc.  However, it must   */

+  /*                         not be freed.                                 */

+  /*                                                                       */

+  /*    num_subglyphs     :: The number of subglyphs in a composite glyph. */

+  /*                         This field is only valid for the composite    */

+  /*                         glyph format that should normally only be     */

+  /*                         loaded with the @FT_LOAD_NO_RECURSE flag.     */

+  /*                         For now this is internal to FreeType.         */

+  /*                                                                       */

+  /*    subglyphs         :: An array of subglyph descriptors for          */

+  /*                         composite glyphs.  There are `num_subglyphs'  */

+  /*                         elements in there.  Currently internal to     */

+  /*                         FreeType.                                     */

+  /*                                                                       */

+  /*    control_data      :: Certain font drivers can also return the      */

+  /*                         control data for a given glyph image (e.g.    */

+  /*                         TrueType bytecode, Type~1 charstrings, etc.). */

+  /*                         This field is a pointer to such data.         */

+  /*                                                                       */

+  /*    control_len       :: This is the length in bytes of the control    */

+  /*                         data.                                         */

+  /*                                                                       */

+  /*    other             :: Really wicked formats can use this pointer to */

+  /*                         present their own glyph image to client       */

+  /*                         applications.  Note that the application      */

+  /*                         needs to know about the image format.         */

+  /*                                                                       */

+  /*    lsb_delta         :: The difference between hinted and unhinted    */

+  /*                         left side bearing while autohinting is        */

+  /*                         active.  Zero otherwise.                      */

+  /*                                                                       */

+  /*    rsb_delta         :: The difference between hinted and unhinted    */

+  /*                         right side bearing while autohinting is       */

+  /*                         active.  Zero otherwise.                      */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    If @FT_Load_Glyph is called with default flags (see                */

+  /*    @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in   */

+  /*    its native format (e.g., an outline glyph for TrueType and Type~1  */

+  /*    formats).                                                          */

+  /*                                                                       */

+  /*    This image can later be converted into a bitmap by calling         */

+  /*    @FT_Render_Glyph.  This function finds the current renderer for    */

+  /*    the native image's format, then invokes it.                        */

+  /*                                                                       */

+  /*    The renderer is in charge of transforming the native image through */

+  /*    the slot's face transformation fields, then converting it into a   */

+  /*    bitmap that is returned in `slot->bitmap'.                         */

+  /*                                                                       */

+  /*    Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */

+  /*    to specify the position of the bitmap relative to the current pen  */

+  /*    position (e.g., coordinates (0,0) on the baseline).  Of course,    */

+  /*    `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP.         */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Here a small pseudo code fragment which shows how to use           */

+  /*    `lsb_delta' and `rsb_delta':                                       */

+  /*                                                                       */

+  /*    {                                                                  */

+  /*      FT_Pos  origin_x       = 0;                                      */

+  /*      FT_Pos  prev_rsb_delta = 0;                                      */

+  /*                                                                       */

+  /*                                                                       */

+  /*      for all glyphs do                                                */

+  /*        <compute kern between current and previous glyph and add it to */

+  /*         `origin_x'>                                                   */

+  /*                                                                       */

+  /*        <load glyph with `FT_Load_Glyph'>                              */

+  /*                                                                       */

+  /*        if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 )           */

+  /*          origin_x -= 64;                                              */

+  /*        else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 )      */

+  /*          origin_x += 64;                                              */

+  /*                                                                       */

+  /*        prev_rsb_delta = face->glyph->rsb_delta;                       */

+  /*                                                                       */

+  /*        <save glyph image, or render glyph, or ...>                    */

+  /*                                                                       */

+  /*        origin_x += face->glyph->advance.x;                            */

+  /*      endfor                                                           */

+  /*    }                                                                  */

+  /*                                                                       */

+  typedef struct  FT_GlyphSlotRec_

+  {

+    FT_Library        library;

+    FT_Face           face;

+    FT_GlyphSlot      next;

+    FT_UInt           reserved;       /* retained for binary compatibility */

+    FT_Generic        generic;

+

+    FT_Glyph_Metrics  metrics;

+    FT_Fixed          linearHoriAdvance;

+    FT_Fixed          linearVertAdvance;

+    FT_Vector         advance;

+

+    FT_Glyph_Format   format;

+

+    FT_Bitmap         bitmap;

+    FT_Int            bitmap_left;

+    FT_Int            bitmap_top;

+

+    FT_Outline        outline;

+

+    FT_UInt           num_subglyphs;

+    FT_SubGlyph       subglyphs;

+

+    void*             control_data;

+    long              control_len;

+

+    FT_Pos            lsb_delta;

+    FT_Pos            rsb_delta;

+

+    void*             other;

+

+    FT_Slot_Internal  internal;

+

+  } FT_GlyphSlotRec;

+

+

+  /*************************************************************************/

+  /*************************************************************************/

+  /*                                                                       */

+  /*                         F U N C T I O N S                             */

+  /*                                                                       */

+  /*************************************************************************/

+  /*************************************************************************/

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Init_FreeType                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Initialize a new FreeType library object.  The set of modules      */

+  /*    that are registered by this function is determined at build time.  */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    alibrary :: A handle to a new library object.                      */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    In case you want to provide your own memory allocating routines,   */

+  /*    use @FT_New_Library instead, followed by a call to                 */

+  /*    @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module).  */

+  /*                                                                       */

+  /*    For multi-threading applications each thread should have its own   */

+  /*    FT_Library object.                                                 */

+  /*                                                                       */

+  /*    If you need reference-counting (cf. @FT_Reference_Library), use    */

+  /*    @FT_New_Library and @FT_Done_Library.                              */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Init_FreeType( FT_Library  *alibrary );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Done_FreeType                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Destroy a given FreeType library object and all of its children,   */

+  /*    including resources, drivers, faces, sizes, etc.                   */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    library :: A handle to the target library object.                  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Done_FreeType( FT_Library  library );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    FT_OPEN_XXX                                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A list of bit-field constants used within the `flags' field of the */

+  /*    @FT_Open_Args structure.                                           */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_OPEN_MEMORY   :: This is a memory-based stream.                 */

+  /*                                                                       */

+  /*    FT_OPEN_STREAM   :: Copy the stream from the `stream' field.       */

+  /*                                                                       */

+  /*    FT_OPEN_PATHNAME :: Create a new input stream from a C~path        */

+  /*                        name.                                          */

+  /*                                                                       */

+  /*    FT_OPEN_DRIVER   :: Use the `driver' field.                        */

+  /*                                                                       */

+  /*    FT_OPEN_PARAMS   :: Use the `num_params' and `params' fields.      */

+  /*                                                                       */

+  /*    ft_open_memory   :: Deprecated; use @FT_OPEN_MEMORY instead.       */

+  /*                                                                       */

+  /*    ft_open_stream   :: Deprecated; use @FT_OPEN_STREAM instead.       */

+  /*                                                                       */

+  /*    ft_open_pathname :: Deprecated; use @FT_OPEN_PATHNAME instead.     */

+  /*                                                                       */

+  /*    ft_open_driver   :: Deprecated; use @FT_OPEN_DRIVER instead.       */

+  /*                                                                       */

+  /*    ft_open_params   :: Deprecated; use @FT_OPEN_PARAMS instead.       */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME'     */

+  /*    flags are mutually exclusive.                                      */

+  /*                                                                       */

+#define FT_OPEN_MEMORY    0x1

+#define FT_OPEN_STREAM    0x2

+#define FT_OPEN_PATHNAME  0x4

+#define FT_OPEN_DRIVER    0x8

+#define FT_OPEN_PARAMS    0x10

+

+#define ft_open_memory    FT_OPEN_MEMORY     /* deprecated */

+#define ft_open_stream    FT_OPEN_STREAM     /* deprecated */

+#define ft_open_pathname  FT_OPEN_PATHNAME   /* deprecated */

+#define ft_open_driver    FT_OPEN_DRIVER     /* deprecated */

+#define ft_open_params    FT_OPEN_PARAMS     /* deprecated */

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_Parameter                                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A simple structure used to pass more or less generic parameters to */

+  /*    @FT_Open_Face.                                                     */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    tag  :: A four-byte identification tag.                            */

+  /*                                                                       */

+  /*    data :: A pointer to the parameter data.                           */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The ID and function of parameters are driver-specific.  See the    */

+  /*    various FT_PARAM_TAG_XXX flags for more information.               */

+  /*                                                                       */

+  typedef struct  FT_Parameter_

+  {

+    FT_ULong    tag;

+    FT_Pointer  data;

+

+  } FT_Parameter;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_Open_Args                                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A structure used to indicate how to open a new font file or        */

+  /*    stream.  A pointer to such a structure can be used as a parameter  */

+  /*    for the functions @FT_Open_Face and @FT_Attach_Stream.             */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    flags       :: A set of bit flags indicating how to use the        */

+  /*                   structure.                                          */

+  /*                                                                       */

+  /*    memory_base :: The first byte of the file in memory.               */

+  /*                                                                       */

+  /*    memory_size :: The size in bytes of the file in memory.            */

+  /*                                                                       */

+  /*    pathname    :: A pointer to an 8-bit file pathname.                */

+  /*                                                                       */

+  /*    stream      :: A handle to a source stream object.                 */

+  /*                                                                       */

+  /*    driver      :: This field is exclusively used by @FT_Open_Face;    */

+  /*                   it simply specifies the font driver to use to open  */

+  /*                   the face.  If set to~0, FreeType tries to load the  */

+  /*                   face with each one of the drivers in its list.      */

+  /*                                                                       */

+  /*    num_params  :: The number of extra parameters.                     */

+  /*                                                                       */

+  /*    params      :: Extra parameters passed to the font driver when     */

+  /*                   opening a new face.                                 */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The stream type is determined by the contents of `flags' which     */

+  /*    are tested in the following order by @FT_Open_Face:                */

+  /*                                                                       */

+  /*    If the `FT_OPEN_MEMORY' bit is set, assume that this is a          */

+  /*    memory file of `memory_size' bytes, located at `memory_address'.   */

+  /*    The data are are not copied, and the client is responsible for     */

+  /*    releasing and destroying them _after_ the corresponding call to    */

+  /*    @FT_Done_Face.                                                     */

+  /*                                                                       */

+  /*    Otherwise, if the `FT_OPEN_STREAM' bit is set, assume that a       */

+  /*    custom input stream `stream' is used.                              */

+  /*                                                                       */

+  /*    Otherwise, if the `FT_OPEN_PATHNAME' bit is set, assume that this  */

+  /*    is a normal file and use `pathname' to open it.                    */

+  /*                                                                       */

+  /*    If the `FT_OPEN_DRIVER' bit is set, @FT_Open_Face only tries to    */

+  /*    open the file with the driver whose handler is in `driver'.        */

+  /*                                                                       */

+  /*    If the `FT_OPEN_PARAMS' bit is set, the parameters given by        */

+  /*    `num_params' and `params' is used.  They are ignored otherwise.    */

+  /*                                                                       */

+  /*    Ideally, both the `pathname' and `params' fields should be tagged  */

+  /*    as `const'; this is missing for API backwards compatibility.  In   */

+  /*    other words, applications should treat them as read-only.          */

+  /*                                                                       */

+  typedef struct  FT_Open_Args_

+  {

+    FT_UInt         flags;

+    const FT_Byte*  memory_base;

+    FT_Long         memory_size;

+    FT_String*      pathname;

+    FT_Stream       stream;

+    FT_Module       driver;

+    FT_Int          num_params;

+    FT_Parameter*   params;

+

+  } FT_Open_Args;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_New_Face                                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This function calls @FT_Open_Face to open a font by its pathname.  */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    library    :: A handle to the library resource.                    */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    pathname   :: A path to the font file.                             */

+  /*                                                                       */

+  /*    face_index :: The index of the face within the font.  The first    */

+  /*                  face has index~0.                                    */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    aface      :: A handle to a new face object.  If `face_index' is   */

+  /*                  greater than or equal to zero, it must be non-NULL.  */

+  /*                  See @FT_Open_Face for more details.                  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Use @FT_Done_Face to destroy the created @FT_Face object (along    */

+  /*    with its slot and sizes).                                          */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_New_Face( FT_Library   library,

+               const char*  filepathname,

+               FT_Long      face_index,

+               FT_Face     *aface );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_New_Memory_Face                                                 */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This function calls @FT_Open_Face to open a font which has been    */

+  /*    loaded into memory.                                                */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    library    :: A handle to the library resource.                    */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    file_base  :: A pointer to the beginning of the font data.         */

+  /*                                                                       */

+  /*    file_size  :: The size of the memory chunk used by the font data.  */

+  /*                                                                       */

+  /*    face_index :: The index of the face within the font.  The first    */

+  /*                  face has index~0.                                    */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    aface      :: A handle to a new face object.  If `face_index' is   */

+  /*                  greater than or equal to zero, it must be non-NULL.  */

+  /*                  See @FT_Open_Face for more details.                  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    You must not deallocate the memory before calling @FT_Done_Face.   */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_New_Memory_Face( FT_Library      library,

+                      const FT_Byte*  file_base,

+                      FT_Long         file_size,

+                      FT_Long         face_index,

+                      FT_Face        *aface );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Open_Face                                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Create a face object from a given resource described by            */

+  /*    @FT_Open_Args.                                                     */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    library    :: A handle to the library resource.                    */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    args       :: A pointer to an `FT_Open_Args' structure which must  */

+  /*                  be filled by the caller.                             */

+  /*                                                                       */

+  /*    face_index :: The index of the face within the font.  The first    */

+  /*                  face has index~0.                                    */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    aface      :: A handle to a new face object.  If `face_index' is   */

+  /*                  greater than or equal to zero, it must be non-NULL.  */

+  /*                  See note below.                                      */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Unlike FreeType 1.x, this function automatically creates a glyph   */

+  /*    slot for the face object which can be accessed directly through    */

+  /*    `face->glyph'.                                                     */

+  /*                                                                       */

+  /*    FT_Open_Face can be used to quickly check whether the font         */

+  /*    format of a given font resource is supported by FreeType.  If the  */

+  /*    `face_index' field is negative, the function's return value is~0   */

+  /*    if the font format is recognized, or non-zero otherwise;           */

+  /*    the function returns a more or less empty face handle in `*aface'  */

+  /*    (if `aface' isn't NULL).  The only useful field in this special    */

+  /*    case is `face->num_faces' which gives the number of faces within   */

+  /*    the font file.  After examination, the returned @FT_Face structure */

+  /*    should be deallocated with a call to @FT_Done_Face.                */

+  /*                                                                       */

+  /*    Each new face object created with this function also owns a        */

+  /*    default @FT_Size object, accessible as `face->size'.               */

+  /*                                                                       */

+  /*    One @FT_Library instance can have multiple face objects, this is,  */

+  /*    @FT_Open_Face and its siblings can be called multiple times using  */

+  /*    the same `library' argument.                                       */

+  /*                                                                       */

+  /*    See the discussion of reference counters in the description of     */

+  /*    @FT_Reference_Face.                                                */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Open_Face( FT_Library           library,

+                const FT_Open_Args*  args,

+                FT_Long              face_index,

+                FT_Face             *aface );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Attach_File                                                     */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This function calls @FT_Attach_Stream to attach a file.            */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face         :: The target face object.                            */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    filepathname :: The pathname.                                      */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Attach_File( FT_Face      face,

+                  const char*  filepathname );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Attach_Stream                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    `Attach' data to a face object.  Normally, this is used to read    */

+  /*    additional information for the face object.  For example, you can  */

+  /*    attach an AFM file that comes with a Type~1 font to get the        */

+  /*    kerning values and other metrics.                                  */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face       :: The target face object.                              */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    parameters :: A pointer to @FT_Open_Args which must be filled by   */

+  /*                  the caller.                                          */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The meaning of the `attach' (i.e., what really happens when the    */

+  /*    new file is read) is not fixed by FreeType itself.  It really      */

+  /*    depends on the font format (and thus the font driver).             */

+  /*                                                                       */

+  /*    Client applications are expected to know what they are doing       */

+  /*    when invoking this function.  Most drivers simply do not implement */

+  /*    file attachments.                                                  */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Attach_Stream( FT_Face        face,

+                    FT_Open_Args*  parameters );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Reference_Face                                                  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A counter gets initialized to~1 at the time an @FT_Face structure  */

+  /*    is created.  This function increments the counter.  @FT_Done_Face  */

+  /*    then only destroys a face if the counter is~1, otherwise it simply */

+  /*    decrements the counter.                                            */

+  /*                                                                       */

+  /*    This function helps in managing life-cycles of structures which    */

+  /*    reference @FT_Face objects.                                        */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face :: A handle to a target face object.                          */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.4.2                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Reference_Face( FT_Face  face );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Done_Face                                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Discard a given face object, as well as all of its child slots and */

+  /*    sizes.                                                             */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face :: A handle to a target face object.                          */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    See the discussion of reference counters in the description of     */

+  /*    @FT_Reference_Face.                                                */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Done_Face( FT_Face  face );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Select_Size                                                     */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Select a bitmap strike.                                            */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face         :: A handle to a target face object.                  */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    strike_index :: The index of the bitmap strike in the              */

+  /*                    `available_sizes' field of @FT_FaceRec structure.  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Select_Size( FT_Face  face,

+                  FT_Int   strike_index );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    FT_Size_Request_Type                                               */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    An enumeration type that lists the supported size request types.   */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_SIZE_REQUEST_TYPE_NOMINAL ::                                    */

+  /*      The nominal size.  The `units_per_EM' field of @FT_FaceRec is    */

+  /*      used to determine both scaling values.                           */

+  /*                                                                       */

+  /*    FT_SIZE_REQUEST_TYPE_REAL_DIM ::                                   */

+  /*      The real dimension.  The sum of the the `ascender' and (minus    */

+  /*      of) the `descender' fields of @FT_FaceRec are used to determine  */

+  /*      both scaling values.                                             */

+  /*                                                                       */

+  /*    FT_SIZE_REQUEST_TYPE_BBOX ::                                       */

+  /*      The font bounding box.  The width and height of the `bbox' field */

+  /*      of @FT_FaceRec are used to determine the horizontal and vertical */

+  /*      scaling value, respectively.                                     */

+  /*                                                                       */

+  /*    FT_SIZE_REQUEST_TYPE_CELL ::                                       */

+  /*      The `max_advance_width' field of @FT_FaceRec is used to          */

+  /*      determine the horizontal scaling value; the vertical scaling     */

+  /*      value is determined the same way as                              */

+  /*      @FT_SIZE_REQUEST_TYPE_REAL_DIM does.  Finally, both scaling      */

+  /*      values are set to the smaller one.  This type is useful if you   */

+  /*      want to specify the font size for, say, a window of a given      */

+  /*      dimension and 80x24 cells.                                       */

+  /*                                                                       */

+  /*    FT_SIZE_REQUEST_TYPE_SCALES ::                                     */

+  /*      Specify the scaling values directly.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The above descriptions only apply to scalable formats.  For bitmap */

+  /*    formats, the behaviour is up to the driver.                        */

+  /*                                                                       */

+  /*    See the note section of @FT_Size_Metrics if you wonder how size    */

+  /*    requesting relates to scaling values.                              */

+  /*                                                                       */

+  typedef enum  FT_Size_Request_Type_

+  {

+    FT_SIZE_REQUEST_TYPE_NOMINAL,

+    FT_SIZE_REQUEST_TYPE_REAL_DIM,

+    FT_SIZE_REQUEST_TYPE_BBOX,

+    FT_SIZE_REQUEST_TYPE_CELL,

+    FT_SIZE_REQUEST_TYPE_SCALES,

+

+    FT_SIZE_REQUEST_TYPE_MAX

+

+  } FT_Size_Request_Type;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_Size_RequestRec                                                 */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A structure used to model a size request.                          */

+  /*                                                                       */

+  /* <Fields>                                                              */

+  /*    type           :: See @FT_Size_Request_Type.                       */

+  /*                                                                       */

+  /*    width          :: The desired width.                               */

+  /*                                                                       */

+  /*    height         :: The desired height.                              */

+  /*                                                                       */

+  /*    horiResolution :: The horizontal resolution.  If set to zero,      */

+  /*                      `width' is treated as a 26.6 fractional pixel    */

+  /*                      value.                                           */

+  /*                                                                       */

+  /*    vertResolution :: The vertical resolution.  If set to zero,        */

+  /*                      `height' is treated as a 26.6 fractional pixel   */

+  /*                      value.                                           */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    If `width' is zero, then the horizontal scaling value is set equal */

+  /*    to the vertical scaling value, and vice versa.                     */

+  /*                                                                       */

+  typedef struct  FT_Size_RequestRec_

+  {

+    FT_Size_Request_Type  type;

+    FT_Long               width;

+    FT_Long               height;

+    FT_UInt               horiResolution;

+    FT_UInt               vertResolution;

+

+  } FT_Size_RequestRec;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Struct>                                                              */

+  /*    FT_Size_Request                                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A handle to a size request structure.                              */

+  /*                                                                       */

+  typedef struct FT_Size_RequestRec_  *FT_Size_Request;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Request_Size                                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Resize the scale of the active @FT_Size object in a face.          */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face :: A handle to a target face object.                          */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    req  :: A pointer to a @FT_Size_RequestRec.                        */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Although drivers may select the bitmap strike matching the         */

+  /*    request, you should not rely on this if you intend to select a     */

+  /*    particular bitmap strike.  Use @FT_Select_Size instead in that     */

+  /*    case.                                                              */

+  /*                                                                       */

+  /*    The relation between the requested size and the resulting glyph    */

+  /*    size is dependent entirely on how the size is defined in the       */

+  /*    source face.  The font designer chooses the final size of each     */

+  /*    glyph relative to this size.  For more information refer to        */

+  /*    `http://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'      */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Request_Size( FT_Face          face,

+                   FT_Size_Request  req );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Set_Char_Size                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This function calls @FT_Request_Size to request the nominal size   */

+  /*    (in points).                                                       */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face            :: A handle to a target face object.               */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    char_width      :: The nominal width, in 26.6 fractional points.   */

+  /*                                                                       */

+  /*    char_height     :: The nominal height, in 26.6 fractional points.  */

+  /*                                                                       */

+  /*    horz_resolution :: The horizontal resolution in dpi.               */

+  /*                                                                       */

+  /*    vert_resolution :: The vertical resolution in dpi.                 */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    If either the character width or height is zero, it is set equal   */

+  /*    to the other value.                                                */

+  /*                                                                       */

+  /*    If either the horizontal or vertical resolution is zero, it is set */

+  /*    equal to the other value.                                          */

+  /*                                                                       */

+  /*    A character width or height smaller than 1pt is set to 1pt; if     */

+  /*    both resolution values are zero, they are set to 72dpi.            */

+  /*                                                                       */

+  /*    Don't use this function if you are using the FreeType cache API.   */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Set_Char_Size( FT_Face     face,

+                    FT_F26Dot6  char_width,

+                    FT_F26Dot6  char_height,

+                    FT_UInt     horz_resolution,

+                    FT_UInt     vert_resolution );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Set_Pixel_Sizes                                                 */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This function calls @FT_Request_Size to request the nominal size   */

+  /*    (in pixels).                                                       */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face         :: A handle to the target face object.                */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    pixel_width  :: The nominal width, in pixels.                      */

+  /*                                                                       */

+  /*    pixel_height :: The nominal height, in pixels.                     */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    You should not rely on the resulting glyphs matching, or being     */

+  /*    constrained, to this pixel size.  Refer to @FT_Request_Size to     */

+  /*    understand how requested sizes relate to actual sizes.             */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Set_Pixel_Sizes( FT_Face  face,

+                      FT_UInt  pixel_width,

+                      FT_UInt  pixel_height );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Load_Glyph                                                      */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A function used to load a single glyph into the glyph slot of a    */

+  /*    face object.                                                       */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face        :: A handle to the target face object where the glyph  */

+  /*                   is loaded.                                          */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    glyph_index :: The index of the glyph in the font file.  For       */

+  /*                   CID-keyed fonts (either in PS or in CFF format)     */

+  /*                   this argument specifies the CID value.              */

+  /*                                                                       */

+  /*    load_flags  :: A flag indicating what to load for this glyph.  The */

+  /*                   @FT_LOAD_XXX constants can be used to control the   */

+  /*                   glyph loading process (e.g., whether the outline    */

+  /*                   should be scaled, whether to load bitmaps or not,   */

+  /*                   whether to hint the outline, etc).                  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The loaded glyph may be transformed.  See @FT_Set_Transform for    */

+  /*    the details.                                                       */

+  /*                                                                       */

+  /*    For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is        */

+  /*    returned for invalid CID values (this is, for CID values which     */

+  /*    don't have a corresponding glyph in the font).  See the discussion */

+  /*    of the @FT_FACE_FLAG_CID_KEYED flag for more details.              */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Load_Glyph( FT_Face   face,

+                 FT_UInt   glyph_index,

+                 FT_Int32  load_flags );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Load_Char                                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A function used to load a single glyph into the glyph slot of a    */

+  /*    face object, according to its character code.                      */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face        :: A handle to a target face object where the glyph    */

+  /*                   is loaded.                                          */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    char_code   :: The glyph's character code, according to the        */

+  /*                   current charmap used in the face.                   */

+  /*                                                                       */

+  /*    load_flags  :: A flag indicating what to load for this glyph.  The */

+  /*                   @FT_LOAD_XXX constants can be used to control the   */

+  /*                   glyph loading process (e.g., whether the outline    */

+  /*                   should be scaled, whether to load bitmaps or not,   */

+  /*                   whether to hint the outline, etc).                  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph.  */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Load_Char( FT_Face   face,

+                FT_ULong  char_code,

+                FT_Int32  load_flags );

+

+

+  /*************************************************************************

+   *

+   * @enum:

+   *   FT_LOAD_XXX

+   *

+   * @description:

+   *   A list of bit-field constants used with @FT_Load_Glyph to indicate

+   *   what kind of operations to perform during glyph loading.

+   *

+   * @values:

+   *   FT_LOAD_DEFAULT ::

+   *     Corresponding to~0, this value is used as the default glyph load

+   *     operation.  In this case, the following happens:

+   *

+   *     1. FreeType looks for a bitmap for the glyph corresponding to the

+   *        face's current size.  If one is found, the function returns.

+   *        The bitmap data can be accessed from the glyph slot (see note

+   *        below).

+   *

+   *     2. If no embedded bitmap is searched or found, FreeType looks for a

+   *        scalable outline.  If one is found, it is loaded from the font

+   *        file, scaled to device pixels, then `hinted' to the pixel grid

+   *        in order to optimize it.  The outline data can be accessed from

+   *        the glyph slot (see note below).

+   *

+   *     Note that by default, the glyph loader doesn't render outlines into

+   *     bitmaps.  The following flags are used to modify this default

+   *     behaviour to more specific and useful cases.

+   *

+   *   FT_LOAD_NO_SCALE ::

+   *     Don't scale the loaded outline glyph but keep it in font units.

+   *

+   *     This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and

+   *     unsets @FT_LOAD_RENDER.

+   *

+   *     If the font is `tricky' (see @FT_FACE_FLAG_TRICKY for more), using

+   *     FT_LOAD_NO_SCALE usually yields meaningless outlines because the

+   *     subglyphs must be scaled and positioned with hinting instructions.

+   *     This can be solved by loading the font without FT_LOAD_NO_SCALE and

+   *     setting the character size to `font->units_per_EM'.

+   *

+   *   FT_LOAD_NO_HINTING ::

+   *     Disable hinting.  This generally generates `blurrier' bitmap glyphs

+   *     when the glyph are rendered in any of the anti-aliased modes.  See

+   *     also the note below.

+   *

+   *     This flag is implied by @FT_LOAD_NO_SCALE.

+   *

+   *   FT_LOAD_RENDER ::

+   *     Call @FT_Render_Glyph after the glyph is loaded.  By default, the

+   *     glyph is rendered in @FT_RENDER_MODE_NORMAL mode.  This can be

+   *     overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME.

+   *

+   *     This flag is unset by @FT_LOAD_NO_SCALE.

+   *

+   *   FT_LOAD_NO_BITMAP ::

+   *     Ignore bitmap strikes when loading.  Bitmap-only fonts ignore this

+   *     flag.

+   *

+   *     @FT_LOAD_NO_SCALE always sets this flag.

+   *

+   *   FT_LOAD_VERTICAL_LAYOUT ::

+   *     Load the glyph for vertical text layout.  In particular, the

+   *     `advance' value in the @FT_GlyphSlotRec structure is set to the

+   *     `vertAdvance' value of the `metrics' field.

+   *

+   *     In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use

+   *     this flag currently.  Reason is that in this case vertical metrics

+   *     get synthesized, and those values are not always consistent across

+   *     various font formats.

+   *

+   *   FT_LOAD_FORCE_AUTOHINT ::

+   *     Indicates that the auto-hinter is preferred over the font's native

+   *     hinter.  See also the note below.

+   *

+   *   FT_LOAD_CROP_BITMAP ::

+   *     Indicates that the font driver should crop the loaded bitmap glyph

+   *     (i.e., remove all space around its black bits).  Not all drivers

+   *     implement this.

+   *

+   *   FT_LOAD_PEDANTIC ::

+   *     Indicates that the font driver should perform pedantic verifications

+   *     during glyph loading.  This is mostly used to detect broken glyphs

+   *     in fonts.  By default, FreeType tries to handle broken fonts also.

+   *

+   *     In particular, errors from the TrueType bytecode engine are not

+   *     passed to the application if this flag is not set; this might

+   *     result in partially hinted or distorted glyphs in case a glyph's

+   *     bytecode is buggy.

+   *

+   *   FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ::

+   *     Ignored.  Deprecated.

+   *

+   *   FT_LOAD_NO_RECURSE ::

+   *     This flag is only used internally.  It merely indicates that the

+   *     font driver should not load composite glyphs recursively.  Instead,

+   *     it should set the `num_subglyph' and `subglyphs' values of the

+   *     glyph slot accordingly, and set `glyph->format' to

+   *     @FT_GLYPH_FORMAT_COMPOSITE.

+   *

+   *     The description of sub-glyphs is not available to client

+   *     applications for now.

+   *

+   *     This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.

+   *

+   *   FT_LOAD_IGNORE_TRANSFORM ::

+   *     Indicates that the transform matrix set by @FT_Set_Transform should

+   *     be ignored.

+   *

+   *   FT_LOAD_MONOCHROME ::

+   *     This flag is used with @FT_LOAD_RENDER to indicate that you want to

+   *     render an outline glyph to a 1-bit monochrome bitmap glyph, with

+   *     8~pixels packed into each byte of the bitmap data.

+   *

+   *     Note that this has no effect on the hinting algorithm used.  You

+   *     should rather use @FT_LOAD_TARGET_MONO so that the

+   *     monochrome-optimized hinting algorithm is used.

+   *

+   *   FT_LOAD_LINEAR_DESIGN ::

+   *     Indicates that the `linearHoriAdvance' and `linearVertAdvance'

+   *     fields of @FT_GlyphSlotRec should be kept in font units.  See

+   *     @FT_GlyphSlotRec for details.

+   *

+   *   FT_LOAD_NO_AUTOHINT ::

+   *     Disable auto-hinter.  See also the note below.

+   *

+   *   FT_LOAD_COLOR ::

+   *     This flag is used to request loading of color embedded-bitmap

+   *     images.  The resulting color bitmaps, if available, will have the

+   *     @FT_PIXEL_MODE_BGRA format.  When the flag is not used and color

+   *     bitmaps are found, they will be converted to 256-level gray

+   *     bitmaps transparently.  Those bitmaps will be in the

+   *     @FT_PIXEL_MODE_GRAY format.

+   *

+   * @note:

+   *   By default, hinting is enabled and the font's native hinter (see

+   *   @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter.  You can

+   *   disable hinting by setting @FT_LOAD_NO_HINTING or change the

+   *   precedence by setting @FT_LOAD_FORCE_AUTOHINT.  You can also set

+   *   @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be

+   *   used at all.

+   *

+   *   See the description of @FT_FACE_FLAG_TRICKY for a special exception

+   *   (affecting only a handful of Asian fonts).

+   *

+   *   Besides deciding which hinter to use, you can also decide which

+   *   hinting algorithm to use.  See @FT_LOAD_TARGET_XXX for details.

+   *

+   *   Note that the auto-hinter needs a valid Unicode cmap (either a native

+   *   one or synthesized by FreeType) for producing correct results.  If a

+   *   font provides an incorrect mapping (for example, assigning the

+   *   character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a

+   *   mathematical integral sign), the auto-hinter might produce useless

+   *   results.

+   *

+   */

+#define FT_LOAD_DEFAULT                      0x0

+#define FT_LOAD_NO_SCALE                     ( 1L << 0 )

+#define FT_LOAD_NO_HINTING                   ( 1L << 1 )

+#define FT_LOAD_RENDER                       ( 1L << 2 )

+#define FT_LOAD_NO_BITMAP                    ( 1L << 3 )

+#define FT_LOAD_VERTICAL_LAYOUT              ( 1L << 4 )

+#define FT_LOAD_FORCE_AUTOHINT               ( 1L << 5 )

+#define FT_LOAD_CROP_BITMAP                  ( 1L << 6 )

+#define FT_LOAD_PEDANTIC                     ( 1L << 7 )

+#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH  ( 1L << 9 )

+#define FT_LOAD_NO_RECURSE                   ( 1L << 10 )

+#define FT_LOAD_IGNORE_TRANSFORM             ( 1L << 11 )

+#define FT_LOAD_MONOCHROME                   ( 1L << 12 )

+#define FT_LOAD_LINEAR_DESIGN                ( 1L << 13 )

+#define FT_LOAD_NO_AUTOHINT                  ( 1L << 15 )

+  /* Bits 16..19 are used by `FT_LOAD_TARGET_' */

+#define FT_LOAD_COLOR                        ( 1L << 20 )

+

+  /* */

+

+  /* used internally only by certain font drivers! */

+#define FT_LOAD_ADVANCE_ONLY                 ( 1L << 8 )

+#define FT_LOAD_SBITS_ONLY                   ( 1L << 14 )

+

+

+  /**************************************************************************

+   *

+   * @enum:

+   *   FT_LOAD_TARGET_XXX

+   *

+   * @description:

+   *   A list of values that are used to select a specific hinting algorithm

+   *   to use by the hinter.  You should OR one of these values to your

+   *   `load_flags' when calling @FT_Load_Glyph.

+   *

+   *   Note that font's native hinters may ignore the hinting algorithm you

+   *   have specified (e.g., the TrueType bytecode interpreter).  You can set

+   *   @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used.

+   *

+   *   Also note that @FT_LOAD_TARGET_LIGHT is an exception, in that it

+   *   always implies @FT_LOAD_FORCE_AUTOHINT.

+   *

+   * @values:

+   *   FT_LOAD_TARGET_NORMAL ::

+   *     This corresponds to the default hinting algorithm, optimized for

+   *     standard gray-level rendering.  For monochrome output, use

+   *     @FT_LOAD_TARGET_MONO instead.

+   *

+   *   FT_LOAD_TARGET_LIGHT ::

+   *     A lighter hinting algorithm for non-monochrome modes.  Many

+   *     generated glyphs are more fuzzy but better resemble its original

+   *     shape.  A bit like rendering on Mac OS~X.

+   *

+   *     As a special exception, this target implies @FT_LOAD_FORCE_AUTOHINT.

+   *

+   *   FT_LOAD_TARGET_MONO ::

+   *     Strong hinting algorithm that should only be used for monochrome

+   *     output.  The result is probably unpleasant if the glyph is rendered

+   *     in non-monochrome modes.

+   *

+   *   FT_LOAD_TARGET_LCD ::

+   *     A variant of @FT_LOAD_TARGET_NORMAL optimized for horizontally

+   *     decimated LCD displays.

+   *

+   *   FT_LOAD_TARGET_LCD_V ::

+   *     A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically

+   *     decimated LCD displays.

+   *

+   * @note:

+   *   You should use only _one_ of the FT_LOAD_TARGET_XXX values in your

+   *   `load_flags'.  They can't be ORed.

+   *

+   *   If @FT_LOAD_RENDER is also set, the glyph is rendered in the

+   *   corresponding mode (i.e., the mode which matches the used algorithm

+   *   best).  An exeption is FT_LOAD_TARGET_MONO since it implies

+   *   @FT_LOAD_MONOCHROME.

+   *

+   *   You can use a hinting algorithm that doesn't correspond to the same

+   *   rendering mode.  As an example, it is possible to use the `light'

+   *   hinting algorithm and have the results rendered in horizontal LCD

+   *   pixel mode, with code like

+   *

+   *     {

+   *       FT_Load_Glyph( face, glyph_index,

+   *                      load_flags | FT_LOAD_TARGET_LIGHT );

+   *

+   *       FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );

+   *     }

+   *

+   */

+#define FT_LOAD_TARGET_( x )   ( (FT_Int32)( (x) & 15 ) << 16 )

+

+#define FT_LOAD_TARGET_NORMAL  FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL )

+#define FT_LOAD_TARGET_LIGHT   FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT  )

+#define FT_LOAD_TARGET_MONO    FT_LOAD_TARGET_( FT_RENDER_MODE_MONO   )

+#define FT_LOAD_TARGET_LCD     FT_LOAD_TARGET_( FT_RENDER_MODE_LCD    )

+#define FT_LOAD_TARGET_LCD_V   FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V  )

+

+

+  /**************************************************************************

+   *

+   * @macro:

+   *   FT_LOAD_TARGET_MODE

+   *

+   * @description:

+   *   Return the @FT_Render_Mode corresponding to a given

+   *   @FT_LOAD_TARGET_XXX value.

+   *

+   */

+#define FT_LOAD_TARGET_MODE( x )  ( (FT_Render_Mode)( ( (x) >> 16 ) & 15 ) )

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Set_Transform                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A function used to set the transformation that is applied to glyph */

+  /*    images when they are loaded into a glyph slot through              */

+  /*    @FT_Load_Glyph.                                                    */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face   :: A handle to the source face object.                      */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    matrix :: A pointer to the transformation's 2x2 matrix.  Use~0 for */

+  /*              the identity matrix.                                     */

+  /*    delta  :: A pointer to the translation vector.  Use~0 for the null */

+  /*              vector.                                                  */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The transformation is only applied to scalable image formats after */

+  /*    the glyph has been loaded.  It means that hinting is unaltered by  */

+  /*    the transformation and is performed on the character size given in */

+  /*    the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes.         */

+  /*                                                                       */

+  /*    Note that this also transforms the `face.glyph.advance' field, but */

+  /*    *not* the values in `face.glyph.metrics'.                          */

+  /*                                                                       */

+  FT_EXPORT( void )

+  FT_Set_Transform( FT_Face     face,

+                    FT_Matrix*  matrix,

+                    FT_Vector*  delta );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    FT_Render_Mode                                                     */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    An enumeration type that lists the render modes supported by       */

+  /*    FreeType~2.  Each mode corresponds to a specific type of scanline  */

+  /*    conversion performed on the outline.                               */

+  /*                                                                       */

+  /*    For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode'     */

+  /*    field in the @FT_GlyphSlotRec structure gives the format of the    */

+  /*    returned bitmap.                                                   */

+  /*                                                                       */

+  /*    All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity.   */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_RENDER_MODE_NORMAL ::                                           */

+  /*      This is the default render mode; it corresponds to 8-bit         */

+  /*      anti-aliased bitmaps.                                            */

+  /*                                                                       */

+  /*    FT_RENDER_MODE_LIGHT ::                                            */

+  /*      This is equivalent to @FT_RENDER_MODE_NORMAL.  It is only        */

+  /*      defined as a separate value because render modes are also used   */

+  /*      indirectly to define hinting algorithm selectors.  See           */

+  /*      @FT_LOAD_TARGET_XXX for details.                                 */

+  /*                                                                       */

+  /*    FT_RENDER_MODE_MONO ::                                             */

+  /*      This mode corresponds to 1-bit bitmaps (with 2~levels of         */

+  /*      opacity).                                                        */

+  /*                                                                       */

+  /*    FT_RENDER_MODE_LCD ::                                              */

+  /*      This mode corresponds to horizontal RGB and BGR sub-pixel        */

+  /*      displays like LCD screens.  It produces 8-bit bitmaps that are   */

+  /*      3~times the width of the original glyph outline in pixels, and   */

+  /*      which use the @FT_PIXEL_MODE_LCD mode.                           */

+  /*                                                                       */

+  /*    FT_RENDER_MODE_LCD_V ::                                            */

+  /*      This mode corresponds to vertical RGB and BGR sub-pixel displays */

+  /*      (like PDA screens, rotated LCD displays, etc.).  It produces     */

+  /*      8-bit bitmaps that are 3~times the height of the original        */

+  /*      glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode.   */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The LCD-optimized glyph bitmaps produced by FT_Render_Glyph can be */

+  /*    filtered to reduce color-fringes by using @FT_Library_SetLcdFilter */

+  /*    (not active in the default builds).  It is up to the caller to     */

+  /*    either call @FT_Library_SetLcdFilter (if available) or do the      */

+  /*    filtering itself.                                                  */

+  /*                                                                       */

+  /*    The selected render mode only affects vector glyphs of a font.     */

+  /*    Embedded bitmaps often have a different pixel mode like            */

+  /*    @FT_PIXEL_MODE_MONO.  You can use @FT_Bitmap_Convert to transform  */

+  /*    them into 8-bit pixmaps.                                           */

+  /*                                                                       */

+  typedef enum  FT_Render_Mode_

+  {

+    FT_RENDER_MODE_NORMAL = 0,

+    FT_RENDER_MODE_LIGHT,

+    FT_RENDER_MODE_MONO,

+    FT_RENDER_MODE_LCD,

+    FT_RENDER_MODE_LCD_V,

+

+    FT_RENDER_MODE_MAX

+

+  } FT_Render_Mode;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    ft_render_mode_xxx                                                 */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    These constants are deprecated.  Use the corresponding             */

+  /*    @FT_Render_Mode values instead.                                    */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    ft_render_mode_normal :: see @FT_RENDER_MODE_NORMAL                */

+  /*    ft_render_mode_mono   :: see @FT_RENDER_MODE_MONO                  */

+  /*                                                                       */

+#define ft_render_mode_normal  FT_RENDER_MODE_NORMAL

+#define ft_render_mode_mono    FT_RENDER_MODE_MONO

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Render_Glyph                                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Convert a given glyph image to a bitmap.  It does so by inspecting */

+  /*    the glyph image format, finding the relevant renderer, and         */

+  /*    invoking it.                                                       */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    slot        :: A handle to the glyph slot containing the image to  */

+  /*                   convert.                                            */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    render_mode :: This is the render mode used to render the glyph    */

+  /*                   image into a bitmap.  See @FT_Render_Mode for a     */

+  /*                   list of possible values.                            */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Render_Glyph( FT_GlyphSlot    slot,

+                   FT_Render_Mode  render_mode );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    FT_Kerning_Mode                                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    An enumeration used to specify which kerning values to return in   */

+  /*    @FT_Get_Kerning.                                                   */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_KERNING_DEFAULT  :: Return scaled and grid-fitted kerning       */

+  /*                           distances (value is~0).                     */

+  /*                                                                       */

+  /*    FT_KERNING_UNFITTED :: Return scaled but un-grid-fitted kerning    */

+  /*                           distances.                                  */

+  /*                                                                       */

+  /*    FT_KERNING_UNSCALED :: Return the kerning vector in original font  */

+  /*                           units.                                      */

+  /*                                                                       */

+  typedef enum  FT_Kerning_Mode_

+  {

+    FT_KERNING_DEFAULT  = 0,

+    FT_KERNING_UNFITTED,

+    FT_KERNING_UNSCALED

+

+  } FT_Kerning_Mode;

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Const>                                                               */

+  /*    ft_kerning_default                                                 */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This constant is deprecated.  Please use @FT_KERNING_DEFAULT       */

+  /*    instead.                                                           */

+  /*                                                                       */

+#define ft_kerning_default   FT_KERNING_DEFAULT

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Const>                                                               */

+  /*    ft_kerning_unfitted                                                */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This constant is deprecated.  Please use @FT_KERNING_UNFITTED      */

+  /*    instead.                                                           */

+  /*                                                                       */

+#define ft_kerning_unfitted  FT_KERNING_UNFITTED

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Const>                                                               */

+  /*    ft_kerning_unscaled                                                */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This constant is deprecated.  Please use @FT_KERNING_UNSCALED      */

+  /*    instead.                                                           */

+  /*                                                                       */

+#define ft_kerning_unscaled  FT_KERNING_UNSCALED

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_Kerning                                                     */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return the kerning vector between two glyphs of a same face.       */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face        :: A handle to a source face object.                   */

+  /*                                                                       */

+  /*    left_glyph  :: The index of the left glyph in the kern pair.       */

+  /*                                                                       */

+  /*    right_glyph :: The index of the right glyph in the kern pair.      */

+  /*                                                                       */

+  /*    kern_mode   :: See @FT_Kerning_Mode for more information.          */

+  /*                   Determines the scale and dimension of the returned  */

+  /*                   kerning vector.                                     */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    akerning    :: The kerning vector.  This is either in font units   */

+  /*                   or in pixels (26.6 format) for scalable formats,    */

+  /*                   and in pixels for fixed-sizes formats.              */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Only horizontal layouts (left-to-right & right-to-left) are        */

+  /*    supported by this method.  Other layouts, or more sophisticated    */

+  /*    kernings, are out of the scope of this API function -- they can be */

+  /*    implemented through format-specific interfaces.                    */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Get_Kerning( FT_Face     face,

+                  FT_UInt     left_glyph,

+                  FT_UInt     right_glyph,

+                  FT_UInt     kern_mode,

+                  FT_Vector  *akerning );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_Track_Kerning                                               */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return the track kerning for a given face object at a given size.  */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face       :: A handle to a source face object.                    */

+  /*                                                                       */

+  /*    point_size :: The point size in 16.16 fractional points.           */

+  /*                                                                       */

+  /*    degree     :: The degree of tightness.  Increasingly negative      */

+  /*                  values represent tighter track kerning, while        */

+  /*                  increasingly positive values represent looser track  */

+  /*                  kerning.  Value zero means no track kerning.         */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    akerning   :: The kerning in 16.16 fractional points, to be        */

+  /*                  uniformly applied between all glyphs.                */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Currently, only the Type~1 font driver supports track kerning,     */

+  /*    using data from AFM files (if attached with @FT_Attach_File or     */

+  /*    @FT_Attach_Stream).                                                */

+  /*                                                                       */

+  /*    Only very few AFM files come with track kerning data; please refer */

+  /*    to the Adobe's AFM specification for more details.                 */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Get_Track_Kerning( FT_Face    face,

+                        FT_Fixed   point_size,

+                        FT_Int     degree,

+                        FT_Fixed*  akerning );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_Glyph_Name                                                  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Retrieve the ASCII name of a given glyph in a face.  This only     */

+  /*    works for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1.   */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face        :: A handle to a source face object.                   */

+  /*                                                                       */

+  /*    glyph_index :: The glyph index.                                    */

+  /*                                                                       */

+  /*    buffer_max  :: The maximum number of bytes available in the        */

+  /*                   buffer.                                             */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    buffer      :: A pointer to a target buffer where the name is      */

+  /*                   copied to.                                          */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    An error is returned if the face doesn't provide glyph names or if */

+  /*    the glyph index is invalid.  In all cases of failure, the first    */

+  /*    byte of `buffer' is set to~0 to indicate an empty name.            */

+  /*                                                                       */

+  /*    The glyph name is truncated to fit within the buffer if it is too  */

+  /*    long.  The returned string is always zero-terminated.              */

+  /*                                                                       */

+  /*    Be aware that FreeType reorders glyph indices internally so that   */

+  /*    glyph index~0 always corresponds to the `missing glyph' (called    */

+  /*    `.notdef').                                                        */

+  /*                                                                       */

+  /*    This function is not compiled within the library if the config     */

+  /*    macro `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is defined in              */

+  /*    `include/freetype/config/ftoptions.h'.                             */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Get_Glyph_Name( FT_Face     face,

+                     FT_UInt     glyph_index,

+                     FT_Pointer  buffer,

+                     FT_UInt     buffer_max );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_Postscript_Name                                             */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Retrieve the ASCII PostScript name of a given face, if available.  */

+  /*    This only works with PostScript and TrueType fonts.                */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face :: A handle to the source face object.                        */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    A pointer to the face's PostScript name.  NULL if unavailable.     */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The returned pointer is owned by the face and is destroyed with    */

+  /*    it.                                                                */

+  /*                                                                       */

+  FT_EXPORT( const char* )

+  FT_Get_Postscript_Name( FT_Face  face );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Select_Charmap                                                  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Select a given charmap by its encoding tag (as listed in           */

+  /*    `freetype.h').                                                     */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face     :: A handle to the source face object.                    */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    encoding :: A handle to the selected encoding.                     */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    This function returns an error if no charmap in the face           */

+  /*    corresponds to the encoding queried here.                          */

+  /*                                                                       */

+  /*    Because many fonts contain more than a single cmap for Unicode     */

+  /*    encoding, this function has some special code to select the one    */

+  /*    which covers Unicode best (`best' in the sense that a UCS-4 cmap   */

+  /*    is preferred to a UCS-2 cmap).  It is thus preferable to           */

+  /*    @FT_Set_Charmap in this case.                                      */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Select_Charmap( FT_Face      face,

+                     FT_Encoding  encoding );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Set_Charmap                                                     */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Select a given charmap for character code to glyph index mapping.  */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    face    :: A handle to the source face object.                     */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    charmap :: A handle to the selected charmap.                       */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    FreeType error code.  0~means success.                             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    This function returns an error if the charmap is not part of       */

+  /*    the face (i.e., if it is not listed in the `face->charmaps'        */

+  /*    table).                                                            */

+  /*                                                                       */

+  /*    It also fails if a type~14 charmap is selected.                    */

+  /*                                                                       */

+  FT_EXPORT( FT_Error )

+  FT_Set_Charmap( FT_Face     face,

+                  FT_CharMap  charmap );

+

+

+  /*************************************************************************

+   *

+   * @function:

+   *   FT_Get_Charmap_Index

+   *

+   * @description:

+   *   Retrieve index of a given charmap.

+   *

+   * @input:

+   *   charmap ::

+   *     A handle to a charmap.

+   *

+   * @return:

+   *   The index into the array of character maps within the face to which

+   *   `charmap' belongs.  If an error occurs, -1 is returned.

+   *

+   */

+  FT_EXPORT( FT_Int )

+  FT_Get_Charmap_Index( FT_CharMap  charmap );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_Char_Index                                                  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return the glyph index of a given character code.  This function   */

+  /*    uses a charmap object to do the mapping.                           */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face     :: A handle to the source face object.                    */

+  /*                                                                       */

+  /*    charcode :: The character code.                                    */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The glyph index.  0~means `undefined character code'.              */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    If you use FreeType to manipulate the contents of font files       */

+  /*    directly, be aware that the glyph index returned by this function  */

+  /*    doesn't always correspond to the internal indices used within the  */

+  /*    file.  This is done to ensure that value~0 always corresponds to   */

+  /*    the `missing glyph'.  If the first glyph is not named `.notdef',   */

+  /*    then for Type~1 and Type~42 fonts, `.notdef' will be moved into    */

+  /*    the glyph ID~0 position, and whatever was there will be moved to   */

+  /*    the position `.notdef' had.  For Type~1 fonts, if there is no      */

+  /*    `.notdef' glyph at all, then one will be created at index~0 and    */

+  /*    whatever was there will be moved to the last index -- Type~42      */

+  /*    fonts are considered invalid under this condition.                 */

+  /*                                                                       */

+  FT_EXPORT( FT_UInt )

+  FT_Get_Char_Index( FT_Face   face,

+                     FT_ULong  charcode );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_First_Char                                                  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This function is used to return the first character code in the    */

+  /*    current charmap of a given face.  It also returns the              */

+  /*    corresponding glyph index.                                         */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face    :: A handle to the source face object.                     */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    agindex :: Glyph index of first character code.  0~if charmap is   */

+  /*               empty.                                                  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The charmap's first character code.                                */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    You should use this function with @FT_Get_Next_Char to be able to  */

+  /*    parse all character codes available in a given charmap.  The code  */

+  /*    should look like this:                                             */

+  /*                                                                       */

+  /*    {                                                                  */

+  /*      FT_ULong  charcode;                                              */

+  /*      FT_UInt   gindex;                                                */

+  /*                                                                       */

+  /*                                                                       */

+  /*      charcode = FT_Get_First_Char( face, &gindex );                   */

+  /*      while ( gindex != 0 )                                            */

+  /*      {                                                                */

+  /*        ... do something with (charcode,gindex) pair ...               */

+  /*                                                                       */

+  /*        charcode = FT_Get_Next_Char( face, charcode, &gindex );        */

+  /*      }                                                                */

+  /*    }                                                                  */

+  /*                                                                       */

+  /*    Note that `*agindex' is set to~0 if the charmap is empty.  The     */

+  /*    result itself can be~0 in two cases: if the charmap is empty or    */

+  /*    if the value~0 is the first valid character code.                  */

+  /*                                                                       */

+  FT_EXPORT( FT_ULong )

+  FT_Get_First_Char( FT_Face   face,

+                     FT_UInt  *agindex );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_Next_Char                                                   */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This function is used to return the next character code in the     */

+  /*    current charmap of a given face following the value `char_code',   */

+  /*    as well as the corresponding glyph index.                          */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face      :: A handle to the source face object.                   */

+  /*    char_code :: The starting character code.                          */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    agindex   :: Glyph index of next character code.  0~if charmap     */

+  /*                 is empty.                                             */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The charmap's next character code.                                 */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    You should use this function with @FT_Get_First_Char to walk       */

+  /*    over all character codes available in a given charmap.  See the    */

+  /*    note for this function for a simple code example.                  */

+  /*                                                                       */

+  /*    Note that `*agindex' is set to~0 when there are no more codes in   */

+  /*    the charmap.                                                       */

+  /*                                                                       */

+  FT_EXPORT( FT_ULong )

+  FT_Get_Next_Char( FT_Face    face,

+                    FT_ULong   char_code,

+                    FT_UInt   *agindex );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_Name_Index                                                  */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return the glyph index of a given glyph name.  This function uses  */

+  /*    driver specific objects to do the translation.                     */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face       :: A handle to the source face object.                  */

+  /*                                                                       */

+  /*    glyph_name :: The glyph name.                                      */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The glyph index.  0~means `undefined character code'.              */

+  /*                                                                       */

+  FT_EXPORT( FT_UInt )

+  FT_Get_Name_Index( FT_Face     face,

+                     FT_String*  glyph_name );

+

+

+  /*************************************************************************

+   *

+   * @macro:

+   *   FT_SUBGLYPH_FLAG_XXX

+   *

+   * @description:

+   *   A list of constants used to describe subglyphs.  Please refer to the

+   *   TrueType specification for the meaning of the various flags.

+   *

+   * @values:

+   *   FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS ::

+   *   FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES ::

+   *   FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID ::

+   *   FT_SUBGLYPH_FLAG_SCALE ::

+   *   FT_SUBGLYPH_FLAG_XY_SCALE ::

+   *   FT_SUBGLYPH_FLAG_2X2 ::

+   *   FT_SUBGLYPH_FLAG_USE_MY_METRICS ::

+   *

+   */

+#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS          1

+#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES      2

+#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID        4

+#define FT_SUBGLYPH_FLAG_SCALE                   8

+#define FT_SUBGLYPH_FLAG_XY_SCALE             0x40

+#define FT_SUBGLYPH_FLAG_2X2                  0x80

+#define FT_SUBGLYPH_FLAG_USE_MY_METRICS      0x200

+

+

+  /*************************************************************************

+   *

+   * @func:

+   *   FT_Get_SubGlyph_Info

+   *

+   * @description:

+   *   Retrieve a description of a given subglyph.  Only use it if

+   *   `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE; an error is

+   *   returned otherwise.

+   *

+   * @input:

+   *   glyph ::

+   *     The source glyph slot.

+   *

+   *   sub_index ::

+   *     The index of the subglyph.  Must be less than

+   *     `glyph->num_subglyphs'.

+   *

+   * @output:

+   *   p_index ::

+   *     The glyph index of the subglyph.

+   *

+   *   p_flags ::

+   *     The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX.

+   *

+   *   p_arg1 ::

+   *     The subglyph's first argument (if any).

+   *

+   *   p_arg2 ::

+   *     The subglyph's second argument (if any).

+   *

+   *   p_transform ::

+   *     The subglyph transformation (if any).

+   *

+   * @return:

+   *   FreeType error code.  0~means success.

+   *

+   * @note:

+   *   The values of `*p_arg1', `*p_arg2', and `*p_transform' must be

+   *   interpreted depending on the flags returned in `*p_flags'.  See the

+   *   TrueType specification for details.

+   *

+   */

+  FT_EXPORT( FT_Error )

+  FT_Get_SubGlyph_Info( FT_GlyphSlot  glyph,

+                        FT_UInt       sub_index,

+                        FT_Int       *p_index,

+                        FT_UInt      *p_flags,

+                        FT_Int       *p_arg1,

+                        FT_Int       *p_arg2,

+                        FT_Matrix    *p_transform );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Enum>                                                                */

+  /*    FT_FSTYPE_XXX                                                      */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A list of bit flags used in the `fsType' field of the OS/2 table   */

+  /*    in a TrueType or OpenType font and the `FSType' entry in a         */

+  /*    PostScript font.  These bit flags are returned by                  */

+  /*    @FT_Get_FSType_Flags; they inform client applications of embedding */

+  /*    and subsetting restrictions associated with a font.                */

+  /*                                                                       */

+  /*    See http://www.adobe.com/devnet/acrobat/pdfs/FontPolicies.pdf for  */

+  /*    more details.                                                      */

+  /*                                                                       */

+  /* <Values>                                                              */

+  /*    FT_FSTYPE_INSTALLABLE_EMBEDDING ::                                 */

+  /*      Fonts with no fsType bit set may be embedded and permanently     */

+  /*      installed on the remote system by an application.                */

+  /*                                                                       */

+  /*    FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING ::                          */

+  /*      Fonts that have only this bit set must not be modified, embedded */

+  /*      or exchanged in any manner without first obtaining permission of */

+  /*      the font software copyright owner.                               */

+  /*                                                                       */

+  /*    FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING ::                           */

+  /*      If this bit is set, the font may be embedded and temporarily     */

+  /*      loaded on the remote system.  Documents containing Preview &     */

+  /*      Print fonts must be opened `read-only'; no edits can be applied  */

+  /*      to the document.                                                 */

+  /*                                                                       */

+  /*    FT_FSTYPE_EDITABLE_EMBEDDING ::                                    */

+  /*      If this bit is set, the font may be embedded but must only be    */

+  /*      installed temporarily on other systems.  In contrast to Preview  */

+  /*      & Print fonts, documents containing editable fonts may be opened */

+  /*      for reading, editing is permitted, and changes may be saved.     */

+  /*                                                                       */

+  /*    FT_FSTYPE_NO_SUBSETTING ::                                         */

+  /*      If this bit is set, the font may not be subsetted prior to       */

+  /*      embedding.                                                       */

+  /*                                                                       */

+  /*    FT_FSTYPE_BITMAP_EMBEDDING_ONLY ::                                 */

+  /*      If this bit is set, only bitmaps contained in the font may be    */

+  /*      embedded; no outline data may be embedded.  If there are no      */

+  /*      bitmaps available in the font, then the font is unembeddable.    */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    While the fsType flags can indicate that a font may be embedded, a */

+  /*    license with the font vendor may be separately required to use the */

+  /*    font in this way.                                                  */

+  /*                                                                       */

+#define FT_FSTYPE_INSTALLABLE_EMBEDDING         0x0000

+#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING  0x0002

+#define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING   0x0004

+#define FT_FSTYPE_EDITABLE_EMBEDDING            0x0008

+#define FT_FSTYPE_NO_SUBSETTING                 0x0100

+#define FT_FSTYPE_BITMAP_EMBEDDING_ONLY         0x0200

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Get_FSType_Flags                                                */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return the fsType flags for a font.                                */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face :: A handle to the source face object.                        */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The fsType flags, @FT_FSTYPE_XXX.                                  */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Use this function rather than directly reading the `fs_type' field */

+  /*    in the @PS_FontInfoRec structure which is only guaranteed to       */

+  /*    return the correct results for Type~1 fonts.                       */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.8                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_UShort )

+  FT_Get_FSType_Flags( FT_Face  face );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Section>                                                             */

+  /*    glyph_variants                                                     */

+  /*                                                                       */

+  /* <Title>                                                               */

+  /*    Glyph Variants                                                     */

+  /*                                                                       */

+  /* <Abstract>                                                            */

+  /*    The FreeType~2 interface to Unicode Ideographic Variation          */

+  /*    Sequences (IVS), using the SFNT cmap format~14.                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Many CJK characters have variant forms.  They are a sort of grey   */

+  /*    area somewhere between being totally irrelevant and semantically   */

+  /*    distinct; for this reason, the Unicode consortium decided to       */

+  /*    introduce Ideographic Variation Sequences (IVS), consisting of a   */

+  /*    Unicode base character and one of 240 variant selectors            */

+  /*    (U+E0100-U+E01EF), instead of further extending the already huge   */

+  /*    code range for CJK characters.                                     */

+  /*                                                                       */

+  /*    An IVS is registered and unique; for further details please refer  */

+  /*    to Unicode Technical Standard #37, the Ideographic Variation       */

+  /*    Database:                                                          */

+  /*                                                                       */

+  /*      http://www.unicode.org/reports/tr37/                             */

+  /*                                                                       */

+  /*    To date (November 2012), the character with the most variants is   */

+  /*    U+9089, having 31 such IVS.                                        */

+  /*                                                                       */

+  /*    Adobe and MS decided to support IVS with a new cmap subtable       */

+  /*    (format~14).  It is an odd subtable because it is not a mapping of */

+  /*    input code points to glyphs, but contains lists of all variants    */

+  /*    supported by the font.                                             */

+  /*                                                                       */

+  /*    A variant may be either `default' or `non-default'.  A default     */

+  /*    variant is the one you will get for that code point if you look it */

+  /*    up in the standard Unicode cmap.  A non-default variant is a       */

+  /*    different glyph.                                                   */

+  /*                                                                       */

+  /*************************************************************************/

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Face_GetCharVariantIndex                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return the glyph index of a given character code as modified by    */

+  /*    the variation selector.                                            */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face ::                                                            */

+  /*      A handle to the source face object.                              */

+  /*                                                                       */

+  /*    charcode ::                                                        */

+  /*      The character code point in Unicode.                             */

+  /*                                                                       */

+  /*    variantSelector ::                                                 */

+  /*      The Unicode code point of the variation selector.                */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The glyph index.  0~means either `undefined character code', or    */

+  /*    `undefined selector code', or `no variation selector cmap          */

+  /*    subtable', or `current CharMap is not Unicode'.                    */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    If you use FreeType to manipulate the contents of font files       */

+  /*    directly, be aware that the glyph index returned by this function  */

+  /*    doesn't always correspond to the internal indices used within      */

+  /*    the file.  This is done to ensure that value~0 always corresponds  */

+  /*    to the `missing glyph'.                                            */

+  /*                                                                       */

+  /*    This function is only meaningful if                                */

+  /*      a) the font has a variation selector cmap sub table,             */

+  /*    and                                                                */

+  /*      b) the current charmap has a Unicode encoding.                   */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.6                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_UInt )

+  FT_Face_GetCharVariantIndex( FT_Face   face,

+                               FT_ULong  charcode,

+                               FT_ULong  variantSelector );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Face_GetCharVariantIsDefault                                    */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Check whether this variant of this Unicode character is the one to */

+  /*    be found in the `cmap'.                                            */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face ::                                                            */

+  /*      A handle to the source face object.                              */

+  /*                                                                       */

+  /*    charcode ::                                                        */

+  /*      The character codepoint in Unicode.                              */

+  /*                                                                       */

+  /*    variantSelector ::                                                 */

+  /*      The Unicode codepoint of the variation selector.                 */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    1~if found in the standard (Unicode) cmap, 0~if found in the       */

+  /*    variation selector cmap, or -1 if it is not a variant.             */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    This function is only meaningful if the font has a variation       */

+  /*    selector cmap subtable.                                            */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.6                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_Int )

+  FT_Face_GetCharVariantIsDefault( FT_Face   face,

+                                   FT_ULong  charcode,

+                                   FT_ULong  variantSelector );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Face_GetVariantSelectors                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return a zero-terminated list of Unicode variant selectors found   */

+  /*    in the font.                                                       */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face ::                                                            */

+  /*      A handle to the source face object.                              */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    A pointer to an array of selector code points, or NULL if there is */

+  /*    no valid variant selector cmap subtable.                           */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The last item in the array is~0; the array is owned by the         */

+  /*    @FT_Face object but can be overwritten or released on the next     */

+  /*    call to a FreeType function.                                       */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.6                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_UInt32* )

+  FT_Face_GetVariantSelectors( FT_Face  face );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Face_GetVariantsOfChar                                          */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return a zero-terminated list of Unicode variant selectors found   */

+  /*    for the specified character code.                                  */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face ::                                                            */

+  /*      A handle to the source face object.                              */

+  /*                                                                       */

+  /*    charcode ::                                                        */

+  /*      The character codepoint in Unicode.                              */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    A pointer to an array of variant selector code points which are    */

+  /*    active for the given character, or NULL if the corresponding list  */

+  /*    is empty.                                                          */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The last item in the array is~0; the array is owned by the         */

+  /*    @FT_Face object but can be overwritten or released on the next     */

+  /*    call to a FreeType function.                                       */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.6                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_UInt32* )

+  FT_Face_GetVariantsOfChar( FT_Face   face,

+                             FT_ULong  charcode );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Face_GetCharsOfVariant                                          */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return a zero-terminated list of Unicode character codes found for */

+  /*    the specified variant selector.                                    */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face ::                                                            */

+  /*      A handle to the source face object.                              */

+  /*                                                                       */

+  /*    variantSelector ::                                                 */

+  /*      The variant selector code point in Unicode.                      */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    A list of all the code points which are specified by this selector */

+  /*    (both default and non-default codes are returned) or NULL if there */

+  /*    is no valid cmap or the variant selector is invalid.               */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The last item in the array is~0; the array is owned by the         */

+  /*    @FT_Face object but can be overwritten or released on the next     */

+  /*    call to a FreeType function.                                       */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.6                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_UInt32* )

+  FT_Face_GetCharsOfVariant( FT_Face   face,

+                             FT_ULong  variantSelector );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Section>                                                             */

+  /*    computations                                                       */

+  /*                                                                       */

+  /* <Title>                                                               */

+  /*    Computations                                                       */

+  /*                                                                       */

+  /* <Abstract>                                                            */

+  /*    Crunching fixed numbers and vectors.                               */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    This section contains various functions used to perform            */

+  /*    computations on 16.16 fixed-float numbers or 2d vectors.           */

+  /*                                                                       */

+  /* <Order>                                                               */

+  /*    FT_MulDiv                                                          */

+  /*    FT_MulFix                                                          */

+  /*    FT_DivFix                                                          */

+  /*    FT_RoundFix                                                        */

+  /*    FT_CeilFix                                                         */

+  /*    FT_FloorFix                                                        */

+  /*    FT_Vector_Transform                                                */

+  /*    FT_Matrix_Multiply                                                 */

+  /*    FT_Matrix_Invert                                                   */

+  /*                                                                       */

+  /*************************************************************************/

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_MulDiv                                                          */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A very simple function used to perform the computation `(a*b)/c'   */

+  /*    with maximum accuracy (it uses a 64-bit intermediate integer       */

+  /*    whenever necessary).                                               */

+  /*                                                                       */

+  /*    This function isn't necessarily as fast as some processor specific */

+  /*    operations, but is at least completely portable.                   */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    a :: The first multiplier.                                         */

+  /*    b :: The second multiplier.                                        */

+  /*    c :: The divisor.                                                  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The result of `(a*b)/c'.  This function never traps when trying to */

+  /*    divide by zero; it simply returns `MaxInt' or `MinInt' depending   */

+  /*    on the signs of `a' and `b'.                                       */

+  /*                                                                       */

+  FT_EXPORT( FT_Long )

+  FT_MulDiv( FT_Long  a,

+             FT_Long  b,

+             FT_Long  c );

+

+

+  /* */

+

+  /* The following #if 0 ... #endif is for the documentation formatter, */

+  /* hiding the internal `FT_MULFIX_INLINED' macro.                     */

+

+#if 0

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_MulFix                                                          */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A very simple function used to perform the computation             */

+  /*    `(a*b)/0x10000' with maximum accuracy.  Most of the time this is   */

+  /*    used to multiply a given value by a 16.16 fixed-point factor.      */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    a :: The first multiplier.                                         */

+  /*    b :: The second multiplier.  Use a 16.16 factor here whenever      */

+  /*         possible (see note below).                                    */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The result of `(a*b)/0x10000'.                                     */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    This function has been optimized for the case where the absolute   */

+  /*    value of `a' is less than 2048, and `b' is a 16.16 scaling factor. */

+  /*    As this happens mainly when scaling from notional units to         */

+  /*    fractional pixels in FreeType, it resulted in noticeable speed     */

+  /*    improvements between versions 2.x and 1.x.                         */

+  /*                                                                       */

+  /*    As a conclusion, always try to place a 16.16 factor as the         */

+  /*    _second_ argument of this function; this can make a great          */

+  /*    difference.                                                        */

+  /*                                                                       */

+  FT_EXPORT( FT_Long )

+  FT_MulFix( FT_Long  a,

+             FT_Long  b );

+

+  /* */

+#endif

+

+#ifdef FT_MULFIX_INLINED

+#define FPDFAPI_FT_MulFix( a, b )  FT_MULFIX_INLINED( a, b )

+#else

+  FT_EXPORT( FT_Long )

+  FT_MulFix( FT_Long  a,

+             FT_Long  b );

+#endif

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_DivFix                                                          */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A very simple function used to perform the computation             */

+  /*    `(a*0x10000)/b' with maximum accuracy.  Most of the time, this is  */

+  /*    used to divide a given value by a 16.16 fixed-point factor.        */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    a :: The first multiplier.                                         */

+  /*    b :: The second multiplier.  Use a 16.16 factor here whenever      */

+  /*         possible (see note below).                                    */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The result of `(a*0x10000)/b'.                                     */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The optimization for FT_DivFix() is simple: If (a~<<~16) fits in   */

+  /*    32~bits, then the division is computed directly.  Otherwise, we    */

+  /*    use a specialized version of @FT_MulDiv.                           */

+  /*                                                                       */

+  FT_EXPORT( FT_Long )

+  FT_DivFix( FT_Long  a,

+             FT_Long  b );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_RoundFix                                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A very simple function used to round a 16.16 fixed number.         */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    a :: The number to be rounded.                                     */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The result of `(a + 0x8000) & -0x10000'.                           */

+  /*                                                                       */

+  FT_EXPORT( FT_Fixed )

+  FT_RoundFix( FT_Fixed  a );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_CeilFix                                                         */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A very simple function used to compute the ceiling function of a   */

+  /*    16.16 fixed number.                                                */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    a :: The number for which the ceiling function is to be computed.  */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The result of `(a + 0x10000 - 1) & -0x10000'.                      */

+  /*                                                                       */

+  FT_EXPORT( FT_Fixed )

+  FT_CeilFix( FT_Fixed  a );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_FloorFix                                                        */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    A very simple function used to compute the floor function of a     */

+  /*    16.16 fixed number.                                                */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    a :: The number for which the floor function is to be computed.    */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The result of `a & -0x10000'.                                      */

+  /*                                                                       */

+  FT_EXPORT( FT_Fixed )

+  FT_FloorFix( FT_Fixed  a );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Vector_Transform                                                */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Transform a single vector through a 2x2 matrix.                    */

+  /*                                                                       */

+  /* <InOut>                                                               */

+  /*    vector :: The target vector to transform.                          */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    matrix :: A pointer to the source 2x2 matrix.                      */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The result is undefined if either `vector' or `matrix' is invalid. */

+  /*                                                                       */

+  FT_EXPORT( void )

+  FT_Vector_Transform( FT_Vector*        vec,

+                       const FT_Matrix*  matrix );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Section>                                                             */

+  /*    version                                                            */

+  /*                                                                       */

+  /* <Title>                                                               */

+  /*    FreeType Version                                                   */

+  /*                                                                       */

+  /* <Abstract>                                                            */

+  /*    Functions and macros related to FreeType versions.                 */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Note that those functions and macros are of limited use because    */

+  /*    even a new release of FreeType with only documentation changes     */

+  /*    increases the version number.                                      */

+  /*                                                                       */

+  /*************************************************************************/

+

+

+  /*************************************************************************

+   *

+   * @enum:

+   *   FREETYPE_XXX

+   *

+   * @description:

+   *   These three macros identify the FreeType source code version.

+   *   Use @FT_Library_Version to access them at runtime.

+   *

+   * @values:

+   *   FREETYPE_MAJOR :: The major version number.

+   *   FREETYPE_MINOR :: The minor version number.

+   *   FREETYPE_PATCH :: The patch level.

+   *

+   * @note:

+   *   The version number of FreeType if built as a dynamic link library

+   *   with the `libtool' package is _not_ controlled by these three

+   *   macros.

+   *

+   */

+#define FREETYPE_MAJOR  2

+#define FREETYPE_MINOR  5

+#define FREETYPE_PATCH  0

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Library_Version                                                 */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Return the version of the FreeType library being used.  This is    */

+  /*    useful when dynamically linking to the library, since one cannot   */

+  /*    use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and               */

+  /*    @FREETYPE_PATCH.                                                   */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    library :: A source library handle.                                */

+  /*                                                                       */

+  /* <Output>                                                              */

+  /*    amajor  :: The major version number.                               */

+  /*                                                                       */

+  /*    aminor  :: The minor version number.                               */

+  /*                                                                       */

+  /*    apatch  :: The patch version number.                               */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    The reason why this function takes a `library' argument is because */

+  /*    certain programs implement library initialization in a custom way  */

+  /*    that doesn't use @FT_Init_FreeType.                                */

+  /*                                                                       */

+  /*    In such cases, the library version might not be available before   */

+  /*    the library object has been created.                               */

+  /*                                                                       */

+  FT_EXPORT( void )

+  FT_Library_Version( FT_Library   library,

+                      FT_Int      *amajor,

+                      FT_Int      *aminor,

+                      FT_Int      *apatch );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Face_CheckTrueTypePatents                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Parse all bytecode instructions of a TrueType font file to check   */

+  /*    whether any of the patented opcodes are used.  This is only useful */

+  /*    if you want to be able to use the unpatented hinter with           */

+  /*    fonts that do *not* use these opcodes.                             */

+  /*                                                                       */

+  /*    Note that this function parses *all* glyph instructions in the     */

+  /*    font file, which may be slow.                                      */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face :: A face handle.                                             */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    1~if this is a TrueType font that uses one of the patented         */

+  /*    opcodes, 0~otherwise.                                              */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Since May 2010, TrueType hinting is no longer patented.            */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.5                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_Bool )

+  FT_Face_CheckTrueTypePatents( FT_Face  face );

+

+

+  /*************************************************************************/

+  /*                                                                       */

+  /* <Function>                                                            */

+  /*    FT_Face_SetUnpatentedHinting                                       */

+  /*                                                                       */

+  /* <Description>                                                         */

+  /*    Enable or disable the unpatented hinter for a given face.          */

+  /*    Only enable it if you have determined that the face doesn't        */

+  /*    use any patented opcodes (see @FT_Face_CheckTrueTypePatents).      */

+  /*                                                                       */

+  /* <Input>                                                               */

+  /*    face  :: A face handle.                                            */

+  /*                                                                       */

+  /*    value :: New boolean setting.                                      */

+  /*                                                                       */

+  /* <Return>                                                              */

+  /*    The old setting value.  This will always be false if this is not   */

+  /*    an SFNT font, or if the unpatented hinter is not compiled in this  */

+  /*    instance of the library.                                           */

+  /*                                                                       */

+  /* <Note>                                                                */

+  /*    Since May 2010, TrueType hinting is no longer patented.            */

+  /*                                                                       */

+  /* <Since>                                                               */

+  /*    2.3.5                                                              */

+  /*                                                                       */

+  FT_EXPORT( FT_Bool )

+  FT_Face_SetUnpatentedHinting( FT_Face  face,

+                                FT_Bool  value );

+

+  /* */

+

+

+FT_END_HEADER

+

+#endif /* __FREETYPE_H__ */

+

+

+/* END */

diff --git a/core/include/thirdparties/freetype/freetype/ftadvanc.h b/core/include/thirdparties/freetype/freetype/ftadvanc.h
new file mode 100644
index 0000000..0163ba1
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftadvanc.h
@@ -0,0 +1,182 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftadvanc.h                                                             */
+/*                                                                         */
+/*    Quick computation of advance widths (specification only).            */
+/*                                                                         */
+/*  Copyright 2008, 2013 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTADVANC_H__
+#define __FTADVANC_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @section:
+   *   quick_advance
+   *
+   * @title:
+   *   Quick retrieval of advance values
+   *
+   * @abstract:
+   *   Retrieve horizontal and vertical advance values without processing
+   *   glyph outlines, if possible.
+   *
+   * @description:
+   *   This section contains functions to quickly extract advance values
+   *   without handling glyph outlines, if possible.
+   */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Const>                                                               */
+  /*    FT_ADVANCE_FLAG_FAST_ONLY                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A bit-flag to be OR-ed with the `flags' parameter of the           */
+  /*    @FT_Get_Advance and @FT_Get_Advances functions.                    */
+  /*                                                                       */
+  /*    If set, it indicates that you want these functions to fail if the  */
+  /*    corresponding hinting mode or font driver doesn't allow for very   */
+  /*    quick advance computation.                                         */
+  /*                                                                       */
+  /*    Typically, glyphs which are either unscaled, unhinted, bitmapped,  */
+  /*    or light-hinted can have their advance width computed very         */
+  /*    quickly.                                                           */
+  /*                                                                       */
+  /*    Normal and bytecode hinted modes, which require loading, scaling,  */
+  /*    and hinting of the glyph outline, are extremely slow by            */
+  /*    comparison.                                                        */
+  /*                                                                       */
+#define FT_ADVANCE_FLAG_FAST_ONLY  0x20000000UL
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Advance                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the advance value of a given glyph outline in an          */
+  /*    @FT_Face.                                                          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face       :: The source @FT_Face handle.                          */
+  /*                                                                       */
+  /*    gindex     :: The glyph index.                                     */
+  /*                                                                       */
+  /*    load_flags :: A set of bit flags similar to those used when        */
+  /*                  calling @FT_Load_Glyph, used to determine what kind  */
+  /*                  of advances you need.                                */
+  /* <Output>                                                              */
+  /*    padvance :: The advance value.  If scaling is performed (based on  */
+  /*                the value of `load_flags'), the advance value is in    */
+  /*                16.16 format.  Otherwise, it is in font units.         */
+  /*                                                                       */
+  /*                If @FT_LOAD_VERTICAL_LAYOUT is set, this is the        */
+  /*                vertical advance corresponding to a vertical layout.   */
+  /*                Otherwise, it is the horizontal advance in a           */
+  /*                horizontal layout.                                     */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and   */
+  /*    if the corresponding font backend doesn't have a quick way to      */
+  /*    retrieve the advances.                                             */
+  /*                                                                       */
+  /*    A scaled advance is returned in 16.16 format but isn't transformed */
+  /*    by the affine transformation specified by @FT_Set_Transform.       */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Get_Advance( FT_Face    face,
+                  FT_UInt    gindex,
+                  FT_Int32   load_flags,
+                  FT_Fixed  *padvance );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Advances                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the advance values of several glyph outlines in an        */
+  /*    @FT_Face.                                                          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face        :: The source @FT_Face handle.                         */
+  /*                                                                       */
+  /*    start       :: The first glyph index.                              */
+  /*                                                                       */
+  /*    count       :: The number of advance values you want to retrieve.  */
+  /*                                                                       */
+  /*    load_flags  :: A set of bit flags similar to those used when       */
+  /*                   calling @FT_Load_Glyph.                             */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    padvance :: The advance values.  This array, to be provided by the */
+  /*                caller, must contain at least `count' elements.        */
+  /*                                                                       */
+  /*                If scaling is performed (based on the value of         */
+  /*                `load_flags'), the advance values are in 16.16 format. */
+  /*                Otherwise, they are in font units.                     */
+  /*                                                                       */
+  /*                If @FT_LOAD_VERTICAL_LAYOUT is set, these are the      */
+  /*                vertical advances corresponding to a vertical layout.  */
+  /*                Otherwise, they are the horizontal advances in a       */
+  /*                horizontal layout.                                     */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and   */
+  /*    if the corresponding font backend doesn't have a quick way to      */
+  /*    retrieve the advances.                                             */
+  /*                                                                       */
+  /*    Scaled advances are returned in 16.16 format but aren't            */
+  /*    transformed by the affine transformation specified by              */
+  /*    @FT_Set_Transform.                                                 */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Get_Advances( FT_Face    face,
+                   FT_UInt    start,
+                   FT_UInt    count,
+                   FT_Int32   load_flags,
+                   FT_Fixed  *padvances );
+
+/* */
+
+
+FT_END_HEADER
+
+#endif /* __FTADVANC_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftautoh.h b/core/include/thirdparties/freetype/freetype/ftautoh.h
new file mode 100644
index 0000000..6edd9f4
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftautoh.h
@@ -0,0 +1,357 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftautoh.h                                                              */
+/*                                                                         */
+/*    FreeType API for controlling the auto-hinter (specification only).   */
+/*                                                                         */
+/*  Copyright 2012, 2013 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTAUTOH_H__
+#define __FTAUTOH_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @section:
+   *   auto_hinter
+   *
+   * @title:
+   *   The auto-hinter
+   *
+   * @abstract:
+   *   Controlling the auto-hinting module.
+   *
+   * @description:
+   *   While FreeType's auto-hinter doesn't expose API functions by itself,
+   *   it is possible to control its behaviour with @FT_Property_Set and
+   *   @FT_Property_Get.  The following lists the available properties
+   *   together with the necessary macros and structures.
+   *
+   *   Note that the auto-hinter's module name is `autofitter' for
+   *   historical reasons.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @property:
+   *   glyph-to-script-map
+   *
+   * @description:
+   *   *Experimental* *only*
+   *
+   *   The auto-hinter provides various script modules to hint glyphs.
+   *   Examples of supported scripts are Latin or CJK.  Before a glyph is
+   *   auto-hinted, the Unicode character map of the font gets examined, and
+   *   the script is then determined based on Unicode character ranges, see
+   *   below.
+   *
+   *   OpenType fonts, however, often provide much more glyphs than
+   *   character codes (small caps, superscripts, ligatures, swashes, etc.),
+   *   to be controlled by so-called `features'.  Handling OpenType features
+   *   can be quite complicated and thus needs a separate library on top of
+   *   FreeType.
+   *
+   *   The mapping between glyph indices and scripts (in the auto-hinter
+   *   sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
+   *   array with `num_glyphs' elements, as found in the font's @FT_Face
+   *   structure.  The `glyph-to-script-map' property returns a pointer to
+   *   this array which can be modified as needed.  Note that the
+   *   modification should happen before the first glyph gets processed by
+   *   the auto-hinter so that the global analysis of the font shapes
+   *   actually uses the modified mapping.
+   *
+   *   The following example code demonstrates how to access it (omitting
+   *   the error handling).
+   *
+   *   {
+   *     FT_Library                library;
+   *     FT_Face                   face;
+   *     FT_Prop_GlyphToScriptMap  prop;
+   *
+   *
+   *     FT_Init_FreeType( &library );
+   *     FT_New_Face( library, "foo.ttf", 0, &face );
+   *
+   *     prop.face = face;
+   *
+   *     FT_Property_Get( library, "autofitter",
+   *                               "glyph-to-script-map", &prop );
+   *
+   *     // adjust `prop.map' as needed right here
+   *
+   *     FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
+   *   }
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @enum:
+   *   FT_AUTOHINTER_SCRIPT_XXX
+   *
+   * @description:
+   *   *Experimental* *only*
+   *
+   *   A list of constants used for the @glyph-to-script-map property to
+   *   specify the script submodule the auto-hinter should use for hinting a
+   *   particular glyph.
+   *
+   * @values:
+   *   FT_AUTOHINTER_SCRIPT_NONE ::
+   *     Don't auto-hint this glyph.
+   *
+   *   FT_AUTOHINTER_SCRIPT_LATIN ::
+   *     Apply the latin auto-hinter.  For the auto-hinter, `latin' is a
+   *     very broad term, including Cyrillic and Greek also since characters
+   *     from those scripts share the same design constraints.
+   *
+   *     By default, characters from the following Unicode ranges are
+   *     assigned to this submodule.
+   *
+   *     {
+   *       U+0020 - U+007F  // Basic Latin (no control characters)
+   *       U+00A0 - U+00FF  // Latin-1 Supplement (no control characters)
+   *       U+0100 - U+017F  // Latin Extended-A
+   *       U+0180 - U+024F  // Latin Extended-B
+   *       U+0250 - U+02AF  // IPA Extensions
+   *       U+02B0 - U+02FF  // Spacing Modifier Letters
+   *       U+0300 - U+036F  // Combining Diacritical Marks
+   *       U+0370 - U+03FF  // Greek and Coptic
+   *       U+0400 - U+04FF  // Cyrillic
+   *       U+0500 - U+052F  // Cyrillic Supplement
+   *       U+1D00 - U+1D7F  // Phonetic Extensions
+   *       U+1D80 - U+1DBF  // Phonetic Extensions Supplement
+   *       U+1DC0 - U+1DFF  // Combining Diacritical Marks Supplement
+   *       U+1E00 - U+1EFF  // Latin Extended Additional
+   *       U+1F00 - U+1FFF  // Greek Extended
+   *       U+2000 - U+206F  // General Punctuation
+   *       U+2070 - U+209F  // Superscripts and Subscripts
+   *       U+20A0 - U+20CF  // Currency Symbols
+   *       U+2150 - U+218F  // Number Forms
+   *       U+2460 - U+24FF  // Enclosed Alphanumerics
+   *       U+2C60 - U+2C7F  // Latin Extended-C
+   *       U+2DE0 - U+2DFF  // Cyrillic Extended-A
+   *       U+2E00 - U+2E7F  // Supplemental Punctuation
+   *       U+A640 - U+A69F  // Cyrillic Extended-B
+   *       U+A720 - U+A7FF  // Latin Extended-D
+   *       U+FB00 - U+FB06  // Alphab. Present. Forms (Latin Ligatures)
+   *      U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
+   *      U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
+   *     }
+   *
+   *   FT_AUTOHINTER_SCRIPT_CJK ::
+   *     Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
+   *     Vietnamese, and some other scripts.
+   *
+   *     By default, characters from the following Unicode ranges are
+   *     assigned to this submodule.
+   *
+   *     {
+   *       U+1100 - U+11FF  // Hangul Jamo
+   *       U+2E80 - U+2EFF  // CJK Radicals Supplement
+   *       U+2F00 - U+2FDF  // Kangxi Radicals
+   *       U+2FF0 - U+2FFF  // Ideographic Description Characters
+   *       U+3000 - U+303F  // CJK Symbols and Punctuation
+   *       U+3040 - U+309F  // Hiragana
+   *       U+30A0 - U+30FF  // Katakana
+   *       U+3100 - U+312F  // Bopomofo
+   *       U+3130 - U+318F  // Hangul Compatibility Jamo
+   *       U+3190 - U+319F  // Kanbun
+   *       U+31A0 - U+31BF  // Bopomofo Extended
+   *       U+31C0 - U+31EF  // CJK Strokes
+   *       U+31F0 - U+31FF  // Katakana Phonetic Extensions
+   *       U+3200 - U+32FF  // Enclosed CJK Letters and Months
+   *       U+3300 - U+33FF  // CJK Compatibility
+   *       U+3400 - U+4DBF  // CJK Unified Ideographs Extension A
+   *       U+4DC0 - U+4DFF  // Yijing Hexagram Symbols
+   *       U+4E00 - U+9FFF  // CJK Unified Ideographs
+   *       U+A960 - U+A97F  // Hangul Jamo Extended-A
+   *       U+AC00 - U+D7AF  // Hangul Syllables
+   *       U+D7B0 - U+D7FF  // Hangul Jamo Extended-B
+   *       U+F900 - U+FAFF  // CJK Compatibility Ideographs
+   *       U+FE10 - U+FE1F  // Vertical forms
+   *       U+FE30 - U+FE4F  // CJK Compatibility Forms
+   *       U+FF00 - U+FFEF  // Halfwidth and Fullwidth Forms
+   *      U+1B000 - U+1B0FF // Kana Supplement
+   *      U+1D300 - U+1D35F // Tai Xuan Hing Symbols
+   *      U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
+   *      U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
+   *      U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
+   *      U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
+   *      U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
+   *     }
+   *
+   *   FT_AUTOHINTER_SCRIPT_INDIC ::
+   *     Apply the indic auto-hinter, covering all major scripts from the
+   *     Indian sub-continent and some other related scripts like Thai, Lao,
+   *     or Tibetan.
+   *
+   *     By default, characters from the following Unicode ranges are
+   *     assigned to this submodule.
+   *
+   *     {
+   *       U+0900 - U+0DFF  // Indic Range
+   *       U+0F00 - U+0FFF  // Tibetan
+   *       U+1900 - U+194F  // Limbu
+   *       U+1B80 - U+1BBF  // Sundanese
+   *       U+1C80 - U+1CDF  // Meetei Mayak
+   *       U+A800 - U+A82F  // Syloti Nagri
+   *      U+11800 - U+118DF // Sharada
+   *     }
+   *
+   *     Note that currently Indic support is rudimentary only, missing blue
+   *     zone support.
+   *
+   */
+#define FT_AUTOHINTER_SCRIPT_NONE   0
+#define FT_AUTOHINTER_SCRIPT_LATIN  1
+#define FT_AUTOHINTER_SCRIPT_CJK    2
+#define FT_AUTOHINTER_SCRIPT_INDIC  3
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_Prop_GlyphToScriptMap
+   *
+   * @description:
+   *   *Experimental* *only*
+   *
+   *   The data exchange structure for the @glyph-to-script-map property.
+   *
+   */
+   typedef struct  FT_Prop_GlyphToScriptMap_
+   {
+     FT_Face   face;
+     FT_Byte*  map;
+
+   } FT_Prop_GlyphToScriptMap;
+
+
+  /**************************************************************************
+   *
+   * @property:
+   *   fallback-script
+   *
+   * @description:
+   *   *Experimental* *only*
+   *
+   *   If no auto-hinter script module can be assigned to a glyph, a
+   *   fallback script gets assigned to it (see also the
+   *   @glyph-to-script-map property).  By default, this is
+   *   @FT_AUTOHINTER_SCRIPT_CJK.  Using the `fallback-script' property,
+   *   this fallback value can be changed.
+   *
+   *   {
+   *     FT_Library  library;
+   *     FT_UInt     fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
+   *
+   *
+   *     FT_Init_FreeType( &library );
+   *
+   *     FT_Property_Set( library, "autofitter",
+   *                               "fallback-script", &fallback_script );
+   *   }
+   *
+   * @note:
+   *   This property can be used with @FT_Property_Get also.
+   *
+   *   It's important to use the right timing for changing this value: The
+   *   creation of the glyph-to-script map which eventually uses the
+   *   fallback script value gets triggered either by setting or reading a
+   *   face-specific property like @glyph-to-script-map, or by auto-hinting
+   *   any glyph from that face.  In particular, if you have already created
+   *   an @FT_Face structure but not loaded any glyph (using the
+   *   auto-hinter), a change of the fallback glyph will affect this face.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @property:
+   *   increase-x-height
+   *
+   * @description:
+   *   For ppem values in the range 6~<= ppem <= `increase-x-height', round
+   *   up the font's x~height much more often than normally.  If the value
+   *   is set to~0, which is the default, this feature is switched off.  Use
+   *   this property to improve the legibility of small font sizes if
+   *   necessary.
+   *
+   *   {
+   *     FT_Library               library;
+   *     FT_Face                  face;
+   *     FT_Prop_IncreaseXHeight  prop;
+   *
+   *
+   *     FT_Init_FreeType( &library );
+   *     FT_New_Face( library, "foo.ttf", 0, &face );
+   *     FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
+   *
+   *     prop.face  = face;
+   *     prop.limit = 14;
+   *
+   *     FT_Property_Set( library, "autofitter",
+   *                               "increase-x-height", &prop );
+   *   }
+   *
+   * @note:
+   *   This property can be used with @FT_Property_Get also.
+   *
+   *   Set this value right after calling @FT_Set_Char_Size, but before
+   *   loading any glyph (using the auto-hinter).
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_Prop_IncreaseXHeight
+   *
+   * @description:
+   *   The data exchange structure for the @increase-x-height property.
+   *
+   */
+   typedef struct  FT_Prop_IncreaseXHeight_
+   {
+     FT_Face  face;
+     FT_UInt  limit;
+
+   } FT_Prop_IncreaseXHeight;
+
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTAUTOH_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftbbox.h b/core/include/thirdparties/freetype/freetype/ftbbox.h
new file mode 100644
index 0000000..5f54246
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftbbox.h
@@ -0,0 +1,102 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftbbox.h                                                               */
+/*                                                                         */
+/*    FreeType exact bbox computation (specification).                     */
+/*                                                                         */
+/*  Copyright 1996-2001, 2003, 2007, 2011 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This component has a _single_ role: to compute exact outline bounding */
+  /* boxes.                                                                */
+  /*                                                                       */
+  /* It is separated from the rest of the engine for various technical     */
+  /* reasons.  It may well be integrated in `ftoutln' later.               */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTBBOX_H__
+#define __FTBBOX_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    outline_processing                                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Get_BBox                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Compute the exact bounding box of an outline.  This is slower      */
+  /*    than computing the control box.  However, it uses an advanced      */
+  /*    algorithm which returns _very_ quickly when the two boxes          */
+  /*    coincide.  Otherwise, the outline Bézier arcs are traversed to     */
+  /*    extract their extrema.                                             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    outline :: A pointer to the source outline.                        */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    abbox   :: The outline's exact bounding box.                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    If the font is tricky and the glyph has been loaded with           */
+  /*    @FT_LOAD_NO_SCALE, the resulting BBox is meaningless.  To get      */
+  /*    reasonable values for the BBox it is necessary to load the glyph   */
+  /*    at a large ppem value (so that the hinting instructions can        */
+  /*    properly shift and scale the subglyphs), then extracting the BBox  */
+  /*    which can be eventually converted back to font units.              */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Get_BBox( FT_Outline*  outline,
+                       FT_BBox     *abbox );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTBBOX_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8    */
+/* End:             */
diff --git a/core/include/thirdparties/freetype/freetype/ftbdf.h b/core/include/thirdparties/freetype/freetype/ftbdf.h
new file mode 100644
index 0000000..c4721bc
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftbdf.h
@@ -0,0 +1,209 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftbdf.h                                                                */
+/*                                                                         */
+/*    FreeType API for accessing BDF-specific strings (specification).     */
+/*                                                                         */
+/*  Copyright 2002, 2003, 2004, 2006, 2009 by                              */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTBDF_H__
+#define __FTBDF_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    bdf_fonts                                                          */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    BDF and PCF Files                                                  */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    BDF and PCF specific API.                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of functions specific to BDF */
+  /*    and PCF fonts.                                                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /**********************************************************************
+   *
+   * @enum:
+   *    FT_PropertyType
+   *
+   * @description:
+   *    A list of BDF property types.
+   *
+   * @values:
+   *    BDF_PROPERTY_TYPE_NONE ::
+   *      Value~0 is used to indicate a missing property.
+   *
+   *    BDF_PROPERTY_TYPE_ATOM ::
+   *      Property is a string atom.
+   *
+   *    BDF_PROPERTY_TYPE_INTEGER ::
+   *      Property is a 32-bit signed integer.
+   *
+   *    BDF_PROPERTY_TYPE_CARDINAL ::
+   *      Property is a 32-bit unsigned integer.
+   */
+  typedef enum  BDF_PropertyType_
+  {
+    BDF_PROPERTY_TYPE_NONE     = 0,
+    BDF_PROPERTY_TYPE_ATOM     = 1,
+    BDF_PROPERTY_TYPE_INTEGER  = 2,
+    BDF_PROPERTY_TYPE_CARDINAL = 3
+
+  } BDF_PropertyType;
+
+
+  /**********************************************************************
+   *
+   * @type:
+   *    BDF_Property
+   *
+   * @description:
+   *    A handle to a @BDF_PropertyRec structure to model a given
+   *    BDF/PCF property.
+   */
+  typedef struct BDF_PropertyRec_*  BDF_Property;
+
+
+ /**********************************************************************
+  *
+  * @struct:
+  *    BDF_PropertyRec
+  *
+  * @description:
+  *    This structure models a given BDF/PCF property.
+  *
+  * @fields:
+  *    type ::
+  *      The property type.
+  *
+  *    u.atom ::
+  *      The atom string, if type is @BDF_PROPERTY_TYPE_ATOM.
+  *
+  *    u.integer ::
+  *      A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
+  *
+  *    u.cardinal ::
+  *      An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL.
+  */
+  typedef struct  BDF_PropertyRec_
+  {
+    BDF_PropertyType  type;
+    union {
+      const char*     atom;
+      FT_Int32        integer;
+      FT_UInt32       cardinal;
+
+    } u;
+
+  } BDF_PropertyRec;
+
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_Get_BDF_Charset_ID
+  *
+  * @description:
+  *    Retrieve a BDF font character set identity, according to
+  *    the BDF specification.
+  *
+  * @input:
+  *    face ::
+  *       A handle to the input face.
+  *
+  * @output:
+  *    acharset_encoding ::
+  *       Charset encoding, as a C~string, owned by the face.
+  *
+  *    acharset_registry ::
+  *       Charset registry, as a C~string, owned by the face.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   This function only works with BDF faces, returning an error otherwise.
+  */
+  FT_EXPORT( FT_Error )
+  FT_Get_BDF_Charset_ID( FT_Face       face,
+                         const char*  *acharset_encoding,
+                         const char*  *acharset_registry );
+
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_Get_BDF_Property
+  *
+  * @description:
+  *    Retrieve a BDF property from a BDF or PCF font file.
+  *
+  * @input:
+  *    face :: A handle to the input face.
+  *
+  *    name :: The property name.
+  *
+  * @output:
+  *    aproperty :: The property.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   This function works with BDF _and_ PCF fonts.  It returns an error
+  *   otherwise.  It also returns an error if the property is not in the
+  *   font.
+  *
+  *   A `property' is a either key-value pair within the STARTPROPERTIES
+  *   ... ENDPROPERTIES block of a BDF font or a key-value pair from the
+  *   `info->props' array within a `FontRec' structure of a PCF font.
+  *
+  *   Integer properties are always stored as `signed' within PCF fonts;
+  *   consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
+  *   for BDF fonts only.
+  *
+  *   In case of error, `aproperty->type' is always set to
+  *   @BDF_PROPERTY_TYPE_NONE.
+  */
+  FT_EXPORT( FT_Error )
+  FT_Get_BDF_Property( FT_Face           face,
+                       const char*       prop_name,
+                       BDF_PropertyRec  *aproperty );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTBDF_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftbitmap.h b/core/include/thirdparties/freetype/freetype/ftbitmap.h
new file mode 100644
index 0000000..9640790
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftbitmap.h
@@ -0,0 +1,227 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftbitmap.h                                                             */
+/*                                                                         */
+/*    FreeType utility functions for bitmaps (specification).              */
+/*                                                                         */
+/*  Copyright 2004-2006, 2008, 2013 by                                     */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTBITMAP_H__
+#define __FTBITMAP_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    bitmap_handling                                                    */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Bitmap Handling                                                    */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Handling FT_Bitmap objects.                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains functions for converting FT_Bitmap objects.  */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Bitmap_New                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Initialize a pointer to an @FT_Bitmap structure.                   */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    abitmap :: A pointer to the bitmap structure.                      */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Bitmap_New( FT_Bitmap  *abitmap );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Bitmap_Copy                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Copy a bitmap into another one.                                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle to a library object.                           */
+  /*                                                                       */
+  /*    source  :: A handle to the source bitmap.                          */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    target  :: A handle to the target bitmap.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Copy( FT_Library        library,
+                  const FT_Bitmap  *source,
+                  FT_Bitmap        *target);
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Bitmap_Embolden                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Embolden a bitmap.  The new bitmap will be about `xStrength'       */
+  /*    pixels wider and `yStrength' pixels higher.  The left and bottom   */
+  /*    borders are kept unchanged.                                        */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library   :: A handle to a library object.                         */
+  /*                                                                       */
+  /*    xStrength :: How strong the glyph is emboldened horizontally.      */
+  /*                 Expressed in 26.6 pixel format.                       */
+  /*                                                                       */
+  /*    yStrength :: How strong the glyph is emboldened vertically.        */
+  /*                 Expressed in 26.6 pixel format.                       */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    bitmap    :: A handle to the target bitmap.                        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The current implementation restricts `xStrength' to be less than   */
+  /*    or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.      */
+  /*                                                                       */
+  /*    If you want to embolden the bitmap owned by a @FT_GlyphSlotRec,    */
+  /*    you should call @FT_GlyphSlot_Own_Bitmap on the slot first.        */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Embolden( FT_Library  library,
+                      FT_Bitmap*  bitmap,
+                      FT_Pos      xStrength,
+                      FT_Pos      yStrength );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Bitmap_Convert                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp */
+  /*    to a bitmap object with depth 8bpp, making the number of used      */
+  /*    bytes line (a.k.a. the `pitch') a multiple of `alignment'.         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library   :: A handle to a library object.                         */
+  /*                                                                       */
+  /*    source    :: The source bitmap.                                    */
+  /*                                                                       */
+  /*    alignment :: The pitch of the bitmap is a multiple of this         */
+  /*                 parameter.  Common values are 1, 2, or 4.             */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    target    :: The target bitmap.                                    */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    It is possible to call @FT_Bitmap_Convert multiple times without   */
+  /*    calling @FT_Bitmap_Done (the memory is simply reallocated).        */
+  /*                                                                       */
+  /*    Use @FT_Bitmap_Done to finally remove the bitmap object.           */
+  /*                                                                       */
+  /*    The `library' argument is taken to have access to FreeType's       */
+  /*    memory handling functions.                                         */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Convert( FT_Library        library,
+                     const FT_Bitmap  *source,
+                     FT_Bitmap        *target,
+                     FT_Int            alignment );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_GlyphSlot_Own_Bitmap                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Make sure that a glyph slot owns `slot->bitmap'.                   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    slot :: The glyph slot.                                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function is to be used in combination with                    */
+  /*    @FT_Bitmap_Embolden.                                               */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot  slot );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Bitmap_Done                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Destroy a bitmap object created with @FT_Bitmap_New.               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle to a library object.                           */
+  /*                                                                       */
+  /*    bitmap  :: The bitmap object to be freed.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The `library' argument is taken to have access to FreeType's       */
+  /*    memory handling functions.                                         */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Bitmap_Done( FT_Library  library,
+                  FT_Bitmap  *bitmap );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTBITMAP_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftbzip2.h b/core/include/thirdparties/freetype/freetype/ftbzip2.h
new file mode 100644
index 0000000..654b222
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftbzip2.h
@@ -0,0 +1,102 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftbzip2.h                                                              */
+/*                                                                         */
+/*    Bzip2-compressed stream support.                                     */
+/*                                                                         */
+/*  Copyright 2010 by                                                      */
+/*  Joel Klinghed.                                                         */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTBZIP2_H__
+#define __FTBZIP2_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    bzip2                                                              */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    BZIP2 Streams                                                      */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Using bzip2-compressed font files.                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of Bzip2-specific functions. */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+ /************************************************************************
+  *
+  * @function:
+  *   FT_Stream_OpenBzip2
+  *
+  * @description:
+  *   Open a new stream to parse bzip2-compressed font files.  This is
+  *   mainly used to support the compressed `*.pcf.bz2' fonts that come
+  *   with XFree86.
+  *
+  * @input:
+  *   stream ::
+  *     The target embedding stream.
+  *
+  *   source ::
+  *     The source stream.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   The source stream must be opened _before_ calling this function.
+  *
+  *   Calling the internal function `FT_Stream_Close' on the new stream will
+  *   *not* call `FT_Stream_Close' on the source stream.  None of the stream
+  *   objects will be released to the heap.
+  *
+  *   The stream implementation is very basic and resets the decompression
+  *   process each time seeking backwards is needed within the stream.
+  *
+  *   In certain builds of the library, bzip2 compression recognition is
+  *   automatically handled when calling @FT_New_Face or @FT_Open_Face.
+  *   This means that if no font driver is capable of handling the raw
+  *   compressed file, the library will try to open a bzip2 compressed stream
+  *   from it and re-open the face with it.
+  *
+  *   This function may return `FT_Err_Unimplemented_Feature' if your build
+  *   of FreeType was not compiled with bzip2 support.
+  */
+  FT_EXPORT( FT_Error )
+  FT_Stream_OpenBzip2( FT_Stream  stream,
+                       FT_Stream  source );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTBZIP2_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftcache.h b/core/include/thirdparties/freetype/freetype/ftcache.h
new file mode 100644
index 0000000..404b0fa
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftcache.h
@@ -0,0 +1,1057 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcache.h                                                              */
+/*                                                                         */
+/*    FreeType Cache subsystem (specification).                            */
+/*                                                                         */
+/*  Copyright 1996-2008, 2010, 2013 by                                     */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTCACHE_H__
+#define __FTCACHE_H__
+
+
+#include "../ft2build.h"
+#include "ftglyph.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************
+   *
+   * <Section>
+   *    cache_subsystem
+   *
+   * <Title>
+   *    Cache Sub-System
+   *
+   * <Abstract>
+   *    How to cache face, size, and glyph data with FreeType~2.
+   *
+   * <Description>
+   *   This section describes the FreeType~2 cache sub-system, which is used
+   *   to limit the number of concurrently opened @FT_Face and @FT_Size
+   *   objects, as well as caching information like character maps and glyph
+   *   images while limiting their maximum memory usage.
+   *
+   *   Note that all types and functions begin with the `FTC_' prefix.
+   *
+   *   The cache is highly portable and thus doesn't know anything about the
+   *   fonts installed on your system, or how to access them.  This implies
+   *   the following scheme:
+   *
+   *   First, available or installed font faces are uniquely identified by
+   *   @FTC_FaceID values, provided to the cache by the client.  Note that
+   *   the cache only stores and compares these values, and doesn't try to
+   *   interpret them in any way.
+   *
+   *   Second, the cache calls, only when needed, a client-provided function
+   *   to convert an @FTC_FaceID into a new @FT_Face object.  The latter is
+   *   then completely managed by the cache, including its termination
+   *   through @FT_Done_Face.  To monitor termination of face objects, the
+   *   finalizer callback in the `generic' field of the @FT_Face object can
+   *   be used, which might also be used to store the @FTC_FaceID of the
+   *   face.
+   *
+   *   Clients are free to map face IDs to anything else.  The most simple
+   *   usage is to associate them to a (pathname,face_index) pair that is
+   *   used to call @FT_New_Face.  However, more complex schemes are also
+   *   possible.
+   *
+   *   Note that for the cache to work correctly, the face ID values must be
+   *   *persistent*, which means that the contents they point to should not
+   *   change at runtime, or that their value should not become invalid.
+   *
+   *   If this is unavoidable (e.g., when a font is uninstalled at runtime),
+   *   you should call @FTC_Manager_RemoveFaceID as soon as possible, to let
+   *   the cache get rid of any references to the old @FTC_FaceID it may
+   *   keep internally.  Failure to do so will lead to incorrect behaviour
+   *   or even crashes.
+   *
+   *   To use the cache, start with calling @FTC_Manager_New to create a new
+   *   @FTC_Manager object, which models a single cache instance.  You can
+   *   then look up @FT_Face and @FT_Size objects with
+   *   @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively.
+   *
+   *   If you want to use the charmap caching, call @FTC_CMapCache_New, then
+   *   later use @FTC_CMapCache_Lookup to perform the equivalent of
+   *   @FT_Get_Char_Index, only much faster.
+   *
+   *   If you want to use the @FT_Glyph caching, call @FTC_ImageCache, then
+   *   later use @FTC_ImageCache_Lookup to retrieve the corresponding
+   *   @FT_Glyph objects from the cache.
+   *
+   *   If you need lots of small bitmaps, it is much more memory efficient
+   *   to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup.  This
+   *   returns @FTC_SBitRec structures, which are used to store small
+   *   bitmaps directly.  (A small bitmap is one whose metrics and
+   *   dimensions all fit into 8-bit integers).
+   *
+   *   We hope to also provide a kerning cache in the near future.
+   *
+   *
+   * <Order>
+   *   FTC_Manager
+   *   FTC_FaceID
+   *   FTC_Face_Requester
+   *
+   *   FTC_Manager_New
+   *   FTC_Manager_Reset
+   *   FTC_Manager_Done
+   *   FTC_Manager_LookupFace
+   *   FTC_Manager_LookupSize
+   *   FTC_Manager_RemoveFaceID
+   *
+   *   FTC_Node
+   *   FTC_Node_Unref
+   *
+   *   FTC_ImageCache
+   *   FTC_ImageCache_New
+   *   FTC_ImageCache_Lookup
+   *
+   *   FTC_SBit
+   *   FTC_SBitCache
+   *   FTC_SBitCache_New
+   *   FTC_SBitCache_Lookup
+   *
+   *   FTC_CMapCache
+   *   FTC_CMapCache_New
+   *   FTC_CMapCache_Lookup
+   *
+   *************************************************************************/
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                    BASIC TYPE DEFINITIONS                     *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************
+   *
+   * @type: FTC_FaceID
+   *
+   * @description:
+   *   An opaque pointer type that is used to identity face objects.  The
+   *   contents of such objects is application-dependent.
+   *
+   *   These pointers are typically used to point to a user-defined
+   *   structure containing a font file path, and face index.
+   *
+   * @note:
+   *   Never use NULL as a valid @FTC_FaceID.
+   *
+   *   Face IDs are passed by the client to the cache manager, which calls,
+   *   when needed, the @FTC_Face_Requester to translate them into new
+   *   @FT_Face objects.
+   *
+   *   If the content of a given face ID changes at runtime, or if the value
+   *   becomes invalid (e.g., when uninstalling a font), you should
+   *   immediately call @FTC_Manager_RemoveFaceID before any other cache
+   *   function.
+   *
+   *   Failure to do so will result in incorrect behaviour or even
+   *   memory leaks and crashes.
+   */
+  typedef FT_Pointer  FTC_FaceID;
+
+
+  /************************************************************************
+   *
+   * @functype:
+   *   FTC_Face_Requester
+   *
+   * @description:
+   *   A callback function provided by client applications.  It is used by
+   *   the cache manager to translate a given @FTC_FaceID into a new valid
+   *   @FT_Face object, on demand.
+   *
+   * <Input>
+   *   face_id ::
+   *     The face ID to resolve.
+   *
+   *   library ::
+   *     A handle to a FreeType library object.
+   *
+   *   req_data ::
+   *     Application-provided request data (see note below).
+   *
+   * <Output>
+   *   aface ::
+   *     A new @FT_Face handle.
+   *
+   * <Return>
+   *   FreeType error code.  0~means success.
+   *
+   * <Note>
+   *   The third parameter `req_data' is the same as the one passed by the
+   *   client when @FTC_Manager_New is called.
+   *
+   *   The face requester should not perform funny things on the returned
+   *   face object, like creating a new @FT_Size for it, or setting a
+   *   transformation through @FT_Set_Transform!
+   */
+  typedef FT_Error
+  (*FTC_Face_Requester)( FTC_FaceID  face_id,
+                         FT_Library  library,
+                         FT_Pointer  request_data,
+                         FT_Face*    aface );
+
+ /* */
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                      CACHE MANAGER OBJECT                     *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FTC_Manager                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This object corresponds to one instance of the cache-subsystem.    */
+  /*    It is used to cache one or more @FT_Face objects, along with       */
+  /*    corresponding @FT_Size objects.                                    */
+  /*                                                                       */
+  /*    The manager intentionally limits the total number of opened        */
+  /*    @FT_Face and @FT_Size objects to control memory usage.  See the    */
+  /*    `max_faces' and `max_sizes' parameters of @FTC_Manager_New.        */
+  /*                                                                       */
+  /*    The manager is also used to cache `nodes' of various types while   */
+  /*    limiting their total memory usage.                                 */
+  /*                                                                       */
+  /*    All limitations are enforced by keeping lists of managed objects   */
+  /*    in most-recently-used order, and flushing old nodes to make room   */
+  /*    for new ones.                                                      */
+  /*                                                                       */
+  typedef struct FTC_ManagerRec_*  FTC_Manager;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FTC_Node                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An opaque handle to a cache node object.  Each cache node is       */
+  /*    reference-counted.  A node with a count of~0 might be flushed      */
+  /*    out of a full cache whenever a lookup request is performed.        */
+  /*                                                                       */
+  /*    If you look up nodes, you have the ability to `acquire' them,      */
+  /*    i.e., to increment their reference count.  This will prevent the   */
+  /*    node from being flushed out of the cache until you explicitly      */
+  /*    `release' it (see @FTC_Node_Unref).                                */
+  /*                                                                       */
+  /*    See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup.         */
+  /*                                                                       */
+  typedef struct FTC_NodeRec_*  FTC_Node;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_Manager_New                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new cache manager.                                        */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library   :: The parent FreeType library handle to use.            */
+  /*                                                                       */
+  /*    max_faces :: Maximum number of opened @FT_Face objects managed by  */
+  /*                 this cache instance.  Use~0 for defaults.             */
+  /*                                                                       */
+  /*    max_sizes :: Maximum number of opened @FT_Size objects managed by  */
+  /*                 this cache instance.  Use~0 for defaults.             */
+  /*                                                                       */
+  /*    max_bytes :: Maximum number of bytes to use for cached data nodes. */
+  /*                 Use~0 for defaults.  Note that this value does not    */
+  /*                 account for managed @FT_Face and @FT_Size objects.    */
+  /*                                                                       */
+  /*    requester :: An application-provided callback used to translate    */
+  /*                 face IDs into real @FT_Face objects.                  */
+  /*                                                                       */
+  /*    req_data  :: A generic pointer that is passed to the requester     */
+  /*                 each time it is called (see @FTC_Face_Requester).     */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    amanager  :: A handle to a new manager object.  0~in case of       */
+  /*                 failure.                                              */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_Manager_New( FT_Library          library,
+                   FT_UInt             max_faces,
+                   FT_UInt             max_sizes,
+                   FT_ULong            max_bytes,
+                   FTC_Face_Requester  requester,
+                   FT_Pointer          req_data,
+                   FTC_Manager        *amanager );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_Manager_Reset                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Empty a given cache manager.  This simply gets rid of all the      */
+  /*    currently cached @FT_Face and @FT_Size objects within the manager. */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    manager :: A handle to the manager.                                */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FTC_Manager_Reset( FTC_Manager  manager );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_Manager_Done                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Destroy a given manager after emptying it.                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    manager :: A handle to the target cache manager object.            */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FTC_Manager_Done( FTC_Manager  manager );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_Manager_LookupFace                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the @FT_Face object that corresponds to a given face ID   */
+  /*    through a cache manager.                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    manager :: A handle to the cache manager.                          */
+  /*                                                                       */
+  /*    face_id :: The ID of the face object.                              */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    aface   :: A handle to the face object.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The returned @FT_Face object is always owned by the manager.  You  */
+  /*    should never try to discard it yourself.                           */
+  /*                                                                       */
+  /*    The @FT_Face object doesn't necessarily have a current size object */
+  /*    (i.e., face->size can be~0).  If you need a specific `font size',  */
+  /*    use @FTC_Manager_LookupSize instead.                               */
+  /*                                                                       */
+  /*    Never change the face's transformation matrix (i.e., never call    */
+  /*    the @FT_Set_Transform function) on a returned face!  If you need   */
+  /*    to transform glyphs, do it yourself after glyph loading.           */
+  /*                                                                       */
+  /*    When you perform a lookup, out-of-memory errors are detected       */
+  /*    _within_ the lookup and force incremental flushes of the cache     */
+  /*    until enough memory is released for the lookup to succeed.         */
+  /*                                                                       */
+  /*    If a lookup fails with `FT_Err_Out_Of_Memory' the cache has        */
+  /*    already been completely flushed, and still no memory was available */
+  /*    for the operation.                                                 */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_Manager_LookupFace( FTC_Manager  manager,
+                          FTC_FaceID   face_id,
+                          FT_Face     *aface );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FTC_ScalerRec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to describe a given character size in either      */
+  /*    pixels or points to the cache manager.  See                        */
+  /*    @FTC_Manager_LookupSize.                                           */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    face_id :: The source face ID.                                     */
+  /*                                                                       */
+  /*    width   :: The character width.                                    */
+  /*                                                                       */
+  /*    height  :: The character height.                                   */
+  /*                                                                       */
+  /*    pixel   :: A Boolean.  If 1, the `width' and `height' fields are   */
+  /*               interpreted as integer pixel character sizes.           */
+  /*               Otherwise, they are expressed as 1/64th of points.      */
+  /*                                                                       */
+  /*    x_res   :: Only used when `pixel' is value~0 to indicate the       */
+  /*               horizontal resolution in dpi.                           */
+  /*                                                                       */
+  /*    y_res   :: Only used when `pixel' is value~0 to indicate the       */
+  /*               vertical resolution in dpi.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This type is mainly used to retrieve @FT_Size objects through the  */
+  /*    cache manager.                                                     */
+  /*                                                                       */
+  typedef struct  FTC_ScalerRec_
+  {
+    FTC_FaceID  face_id;
+    FT_UInt     width;
+    FT_UInt     height;
+    FT_Int      pixel;
+    FT_UInt     x_res;
+    FT_UInt     y_res;
+
+  } FTC_ScalerRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FTC_Scaler                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to an @FTC_ScalerRec structure.                           */
+  /*                                                                       */
+  typedef struct FTC_ScalerRec_*  FTC_Scaler;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_Manager_LookupSize                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the @FT_Size object that corresponds to a given           */
+  /*    @FTC_ScalerRec pointer through a cache manager.                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    manager :: A handle to the cache manager.                          */
+  /*                                                                       */
+  /*    scaler  :: A scaler handle.                                        */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    asize   :: A handle to the size object.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The returned @FT_Size object is always owned by the manager.  You  */
+  /*    should never try to discard it by yourself.                        */
+  /*                                                                       */
+  /*    You can access the parent @FT_Face object simply as `size->face'   */
+  /*    if you need it.  Note that this object is also owned by the        */
+  /*    manager.                                                           */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    When you perform a lookup, out-of-memory errors are detected       */
+  /*    _within_ the lookup and force incremental flushes of the cache     */
+  /*    until enough memory is released for the lookup to succeed.         */
+  /*                                                                       */
+  /*    If a lookup fails with `FT_Err_Out_Of_Memory' the cache has        */
+  /*    already been completely flushed, and still no memory is available  */
+  /*    for the operation.                                                 */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_Manager_LookupSize( FTC_Manager  manager,
+                          FTC_Scaler   scaler,
+                          FT_Size     *asize );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_Node_Unref                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Decrement a cache node's internal reference count.  When the count */
+  /*    reaches 0, it is not destroyed but becomes eligible for subsequent */
+  /*    cache flushes.                                                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    node    :: The cache node handle.                                  */
+  /*                                                                       */
+  /*    manager :: The cache manager handle.                               */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FTC_Node_Unref( FTC_Node     node,
+                  FTC_Manager  manager );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FTC_Manager_RemoveFaceID
+   *
+   * @description:
+   *   A special function used to indicate to the cache manager that
+   *   a given @FTC_FaceID is no longer valid, either because its
+   *   content changed, or because it was deallocated or uninstalled.
+   *
+   * @input:
+   *   manager ::
+   *     The cache manager handle.
+   *
+   *   face_id ::
+   *     The @FTC_FaceID to be removed.
+   *
+   * @note:
+   *   This function flushes all nodes from the cache corresponding to this
+   *   `face_id', with the exception of nodes with a non-null reference
+   *   count.
+   *
+   *   Such nodes are however modified internally so as to never appear
+   *   in later lookups with the same `face_id' value, and to be immediately
+   *   destroyed when released by all their users.
+   *
+   */
+  FT_EXPORT( void )
+  FTC_Manager_RemoveFaceID( FTC_Manager  manager,
+                            FTC_FaceID   face_id );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    cache_subsystem                                                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+  /*************************************************************************
+   *
+   * @type:
+   *   FTC_CMapCache
+   *
+   * @description:
+   *   An opaque handle used to model a charmap cache.  This cache is to
+   *   hold character codes -> glyph indices mappings.
+   *
+   */
+  typedef struct FTC_CMapCacheRec_*  FTC_CMapCache;
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FTC_CMapCache_New
+   *
+   * @description:
+   *   Create a new charmap cache.
+   *
+   * @input:
+   *   manager ::
+   *     A handle to the cache manager.
+   *
+   * @output:
+   *   acache ::
+   *     A new cache handle.  NULL in case of error.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   Like all other caches, this one will be destroyed with the cache
+   *   manager.
+   *
+   */
+  FT_EXPORT( FT_Error )
+  FTC_CMapCache_New( FTC_Manager     manager,
+                     FTC_CMapCache  *acache );
+
+
+  /************************************************************************
+   *
+   * @function:
+   *   FTC_CMapCache_Lookup
+   *
+   * @description:
+   *   Translate a character code into a glyph index, using the charmap
+   *   cache.
+   *
+   * @input:
+   *   cache ::
+   *     A charmap cache handle.
+   *
+   *   face_id ::
+   *     The source face ID.
+   *
+   *   cmap_index ::
+   *     The index of the charmap in the source face.  Any negative value
+   *     means to use the cache @FT_Face's default charmap.
+   *
+   *   char_code ::
+   *     The character code (in the corresponding charmap).
+   *
+   * @return:
+   *    Glyph index.  0~means `no glyph'.
+   *
+   */
+  FT_EXPORT( FT_UInt )
+  FTC_CMapCache_Lookup( FTC_CMapCache  cache,
+                        FTC_FaceID     face_id,
+                        FT_Int         cmap_index,
+                        FT_UInt32      char_code );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    cache_subsystem                                                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                       IMAGE CACHE OBJECT                      *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************
+   *
+   * @struct:
+   *   FTC_ImageTypeRec
+   *
+   * @description:
+   *   A structure used to model the type of images in a glyph cache.
+   *
+   * @fields:
+   *   face_id ::
+   *     The face ID.
+   *
+   *   width ::
+   *     The width in pixels.
+   *
+   *   height ::
+   *     The height in pixels.
+   *
+   *   flags ::
+   *     The load flags, as in @FT_Load_Glyph.
+   *
+   */
+  typedef struct  FTC_ImageTypeRec_
+  {
+    FTC_FaceID  face_id;
+    FT_Int      width;
+    FT_Int      height;
+    FT_Int32    flags;
+
+  } FTC_ImageTypeRec;
+
+
+  /*************************************************************************
+   *
+   * @type:
+   *   FTC_ImageType
+   *
+   * @description:
+   *   A handle to an @FTC_ImageTypeRec structure.
+   *
+   */
+  typedef struct FTC_ImageTypeRec_*  FTC_ImageType;
+
+
+  /* */
+
+
+#define FTC_IMAGE_TYPE_COMPARE( d1, d2 )      \
+          ( (d1)->face_id == (d2)->face_id && \
+            (d1)->width   == (d2)->width   && \
+            (d1)->flags   == (d2)->flags   )
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FTC_ImageCache                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a glyph image cache object.  They are designed to      */
+  /*    hold many distinct glyph images while not exceeding a certain      */
+  /*    memory threshold.                                                  */
+  /*                                                                       */
+  typedef struct FTC_ImageCacheRec_*  FTC_ImageCache;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_ImageCache_New                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new glyph image cache.                                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    manager :: The parent manager for the image cache.                 */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    acache  :: A handle to the new glyph image cache object.           */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_ImageCache_New( FTC_Manager      manager,
+                      FTC_ImageCache  *acache );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_ImageCache_Lookup                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve a given glyph image from a glyph image cache.             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    cache  :: A handle to the source glyph image cache.                */
+  /*                                                                       */
+  /*    type   :: A pointer to a glyph image type descriptor.              */
+  /*                                                                       */
+  /*    gindex :: The glyph index to retrieve.                             */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    aglyph :: The corresponding @FT_Glyph object.  0~in case of        */
+  /*              failure.                                                 */
+  /*                                                                       */
+  /*    anode  :: Used to return the address of of the corresponding cache */
+  /*              node after incrementing its reference count (see note    */
+  /*              below).                                                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The returned glyph is owned and managed by the glyph image cache.  */
+  /*    Never try to transform or discard it manually!  You can however    */
+  /*    create a copy with @FT_Glyph_Copy and modify the new one.          */
+  /*                                                                       */
+  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
+  /*    node containing the glyph image, after increasing its reference    */
+  /*    count.  This ensures that the node (as well as the @FT_Glyph) will */
+  /*    always be kept in the cache until you call @FTC_Node_Unref to      */
+  /*    `release' it.                                                      */
+  /*                                                                       */
+  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
+  /*    that the @FT_Glyph could be flushed out of the cache on the next   */
+  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
+  /*    is persistent!                                                     */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_ImageCache_Lookup( FTC_ImageCache  cache,
+                         FTC_ImageType   type,
+                         FT_UInt         gindex,
+                         FT_Glyph       *aglyph,
+                         FTC_Node       *anode );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_ImageCache_LookupScaler                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec    */
+  /*    to specify the face ID and its size.                               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    cache      :: A handle to the source glyph image cache.            */
+  /*                                                                       */
+  /*    scaler     :: A pointer to a scaler descriptor.                    */
+  /*                                                                       */
+  /*    load_flags :: The corresponding load flags.                        */
+  /*                                                                       */
+  /*    gindex     :: The glyph index to retrieve.                         */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    aglyph     :: The corresponding @FT_Glyph object.  0~in case of    */
+  /*                  failure.                                             */
+  /*                                                                       */
+  /*    anode      :: Used to return the address of of the corresponding   */
+  /*                  cache node after incrementing its reference count    */
+  /*                  (see note below).                                    */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The returned glyph is owned and managed by the glyph image cache.  */
+  /*    Never try to transform or discard it manually!  You can however    */
+  /*    create a copy with @FT_Glyph_Copy and modify the new one.          */
+  /*                                                                       */
+  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
+  /*    node containing the glyph image, after increasing its reference    */
+  /*    count.  This ensures that the node (as well as the @FT_Glyph) will */
+  /*    always be kept in the cache until you call @FTC_Node_Unref to      */
+  /*    `release' it.                                                      */
+  /*                                                                       */
+  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
+  /*    that the @FT_Glyph could be flushed out of the cache on the next   */
+  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
+  /*    is persistent!                                                     */
+  /*                                                                       */
+  /*    Calls to @FT_Set_Char_Size and friends have no effect on cached    */
+  /*    glyphs; you should always use the FreeType cache API instead.      */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_ImageCache_LookupScaler( FTC_ImageCache  cache,
+                               FTC_Scaler      scaler,
+                               FT_ULong        load_flags,
+                               FT_UInt         gindex,
+                               FT_Glyph       *aglyph,
+                               FTC_Node       *anode );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FTC_SBit                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a small bitmap descriptor.  See the @FTC_SBitRec       */
+  /*    structure for details.                                             */
+  /*                                                                       */
+  typedef struct FTC_SBitRec_*  FTC_SBit;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FTC_SBitRec                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A very compact structure used to describe a small glyph bitmap.    */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    width     :: The bitmap width in pixels.                           */
+  /*                                                                       */
+  /*    height    :: The bitmap height in pixels.                          */
+  /*                                                                       */
+  /*    left      :: The horizontal distance from the pen position to the  */
+  /*                 left bitmap border (a.k.a. `left side bearing', or    */
+  /*                 `lsb').                                               */
+  /*                                                                       */
+  /*    top       :: The vertical distance from the pen position (on the   */
+  /*                 baseline) to the upper bitmap border (a.k.a. `top     */
+  /*                 side bearing').  The distance is positive for upwards */
+  /*                 y~coordinates.                                        */
+  /*                                                                       */
+  /*    format    :: The format of the glyph bitmap (monochrome or gray).  */
+  /*                                                                       */
+  /*    max_grays :: Maximum gray level value (in the range 1 to~255).     */
+  /*                                                                       */
+  /*    pitch     :: The number of bytes per bitmap line.  May be positive */
+  /*                 or negative.                                          */
+  /*                                                                       */
+  /*    xadvance  :: The horizontal advance width in pixels.               */
+  /*                                                                       */
+  /*    yadvance  :: The vertical advance height in pixels.                */
+  /*                                                                       */
+  /*    buffer    :: A pointer to the bitmap pixels.                       */
+  /*                                                                       */
+  typedef struct  FTC_SBitRec_
+  {
+    FT_Byte   width;
+    FT_Byte   height;
+    FT_Char   left;
+    FT_Char   top;
+
+    FT_Byte   format;
+    FT_Byte   max_grays;
+    FT_Short  pitch;
+    FT_Char   xadvance;
+    FT_Char   yadvance;
+
+    FT_Byte*  buffer;
+
+  } FTC_SBitRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FTC_SBitCache                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a small bitmap cache.  These are special cache objects */
+  /*    used to store small glyph bitmaps (and anti-aliased pixmaps) in a  */
+  /*    much more efficient way than the traditional glyph image cache     */
+  /*    implemented by @FTC_ImageCache.                                    */
+  /*                                                                       */
+  typedef struct FTC_SBitCacheRec_*  FTC_SBitCache;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_SBitCache_New                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new cache to store small glyph bitmaps.                   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    manager :: A handle to the source cache manager.                   */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    acache  :: A handle to the new sbit cache.  NULL in case of error. */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_SBitCache_New( FTC_Manager     manager,
+                     FTC_SBitCache  *acache );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_SBitCache_Lookup                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Look up a given small glyph bitmap in a given sbit cache and       */
+  /*    `lock' it to prevent its flushing from the cache until needed.     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    cache  :: A handle to the source sbit cache.                       */
+  /*                                                                       */
+  /*    type   :: A pointer to the glyph image type descriptor.            */
+  /*                                                                       */
+  /*    gindex :: The glyph index.                                         */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    sbit   :: A handle to a small bitmap descriptor.                   */
+  /*                                                                       */
+  /*    anode  :: Used to return the address of of the corresponding cache */
+  /*              node after incrementing its reference count (see note    */
+  /*              below).                                                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The small bitmap descriptor and its bit buffer are owned by the    */
+  /*    cache and should never be freed by the application.  They might    */
+  /*    as well disappear from memory on the next cache lookup, so don't   */
+  /*    treat them as persistent data.                                     */
+  /*                                                                       */
+  /*    The descriptor's `buffer' field is set to~0 to indicate a missing  */
+  /*    glyph bitmap.                                                      */
+  /*                                                                       */
+  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
+  /*    node containing the bitmap, after increasing its reference count.  */
+  /*    This ensures that the node (as well as the image) will always be   */
+  /*    kept in the cache until you call @FTC_Node_Unref to `release' it.  */
+  /*                                                                       */
+  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
+  /*    that the bitmap could be flushed out of the cache on the next      */
+  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
+  /*    is persistent!                                                     */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_SBitCache_Lookup( FTC_SBitCache    cache,
+                        FTC_ImageType    type,
+                        FT_UInt          gindex,
+                        FTC_SBit        *sbit,
+                        FTC_Node        *anode );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FTC_SBitCache_LookupScaler                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec     */
+  /*    to specify the face ID and its size.                               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    cache      :: A handle to the source sbit cache.                   */
+  /*                                                                       */
+  /*    scaler     :: A pointer to the scaler descriptor.                  */
+  /*                                                                       */
+  /*    load_flags :: The corresponding load flags.                        */
+  /*                                                                       */
+  /*    gindex     :: The glyph index.                                     */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    sbit       :: A handle to a small bitmap descriptor.               */
+  /*                                                                       */
+  /*    anode      :: Used to return the address of of the corresponding   */
+  /*                  cache node after incrementing its reference count    */
+  /*                  (see note below).                                    */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The small bitmap descriptor and its bit buffer are owned by the    */
+  /*    cache and should never be freed by the application.  They might    */
+  /*    as well disappear from memory on the next cache lookup, so don't   */
+  /*    treat them as persistent data.                                     */
+  /*                                                                       */
+  /*    The descriptor's `buffer' field is set to~0 to indicate a missing  */
+  /*    glyph bitmap.                                                      */
+  /*                                                                       */
+  /*    If `anode' is _not_ NULL, it receives the address of the cache     */
+  /*    node containing the bitmap, after increasing its reference count.  */
+  /*    This ensures that the node (as well as the image) will always be   */
+  /*    kept in the cache until you call @FTC_Node_Unref to `release' it.  */
+  /*                                                                       */
+  /*    If `anode' is NULL, the cache node is left unchanged, which means  */
+  /*    that the bitmap could be flushed out of the cache on the next      */
+  /*    call to one of the caching sub-system APIs.  Don't assume that it  */
+  /*    is persistent!                                                     */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FTC_SBitCache_LookupScaler( FTC_SBitCache  cache,
+                              FTC_Scaler     scaler,
+                              FT_ULong       load_flags,
+                              FT_UInt        gindex,
+                              FTC_SBit      *sbit,
+                              FTC_Node      *anode );
+
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTCACHE_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftcffdrv.h b/core/include/thirdparties/freetype/freetype/ftcffdrv.h
new file mode 100644
index 0000000..3a37795
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftcffdrv.h
@@ -0,0 +1,151 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcffdrv.h                                                             */
+/*                                                                         */
+/*    FreeType API for controlling the CFF driver (specification only).    */
+/*                                                                         */
+/*  Copyright 2013 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTCFFDRV_H__
+#define __FTCFFDRV_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @section:
+   *   cff_driver
+   *
+   * @title:
+   *   The CFF driver
+   *
+   * @abstract:
+   *   Controlling the CFF driver module.
+   *
+   * @description:
+   *   While FreeType's CFF driver doesn't expose API functions by itself,
+   *   it is possible to control its behaviour with @FT_Property_Set and
+   *   @FT_Property_Get.  The following lists the available properties
+   *   together with the necessary macros and structures.
+   *
+   *   The CFF driver's module name is `cff'.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @property:
+   *   hinting-engine
+   *
+   * @description:
+   *   Thanks to Adobe, which contributed a new hinting (and parsing)
+   *   engine, an application can select between `freetype' and `adobe' if
+   *   compiled with CFF_CONFIG_OPTION_OLD_ENGINE.  If this configuration
+   *   macro isn't defined, `hinting-engine' does nothing.
+   *
+   *   The default engine is `freetype' if CFF_CONFIG_OPTION_OLD_ENGINE is
+   *   defined, and `adobe' otherwise.
+   *
+   *   The following example code demonstrates how to select Adobe's hinting
+   *   engine (omitting the error handling).
+   *
+   *   {
+   *     FT_Library  library;
+   *     FT_Face     face;
+   *     FT_UInt     hinting_engine = FT_CFF_HINTING_ADOBE;
+   *
+   *
+   *     FT_Init_FreeType( &library );
+   *
+   *     FT_Property_Set( library, "cff",
+   *                               "hinting-engine", &hinting_engine );
+   *   }
+   *
+   * @note:
+   *   This property can be used with @FT_Property_Get also.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @enum:
+   *   FT_CFF_HINTING_XXX
+   *
+   * @description:
+   *   A list of constants used for the @hinting-engine property to select
+   *   the hinting engine for CFF fonts.
+   *
+   * @values:
+   *   FT_CFF_HINTING_FREETYPE ::
+   *     Use the old FreeType hinting engine.
+   *
+   *   FT_CFF_HINTING_ADOBE ::
+   *     Use the hinting engine contributed by Adobe.
+   *
+   */
+#define FT_CFF_HINTING_FREETYPE  0
+#define FT_CFF_HINTING_ADOBE     1
+
+
+  /**************************************************************************
+   *
+   * @property:
+   *   no-stem-darkening
+   *
+   * @description:
+   *   By default, the Adobe CFF engine darkens stems at smaller sizes,
+   *   regardless of hinting, to enhance contrast.  Setting this property,
+   *   stem darkening gets switched off.
+   *
+   *   Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
+   *
+   *   {
+   *     FT_Library  library;
+   *     FT_Face     face;
+   *     FT_Bool     no_stem_darkening = TRUE;
+   *
+   *
+   *     FT_Init_FreeType( &library );
+   *
+   *     FT_Property_Set( library, "cff",
+   *                               "no-stem-darkening", &no_stem_darkening );
+   *   }
+   *
+   * @note:
+   *   This property can be used with @FT_Property_Get also.
+   *
+   */
+
+
+ /* */
+
+FT_END_HEADER
+
+
+#endif /* __FTCFFDRV_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftchapters.h b/core/include/thirdparties/freetype/freetype/ftchapters.h
new file mode 100644
index 0000000..c55670d
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftchapters.h
@@ -0,0 +1,120 @@
+/***************************************************************************/
+/*                                                                         */
+/* This file defines the structure of the FreeType reference.              */
+/* It is used by the python script which generates the HTML files.         */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/* <Chapter>                                                               */
+/*    general_remarks                                                      */
+/*                                                                         */
+/* <Title>                                                                 */
+/*    General Remarks                                                      */
+/*                                                                         */
+/* <Sections>                                                              */
+/*    user_allocation                                                      */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/* <Chapter>                                                               */
+/*    core_api                                                             */
+/*                                                                         */
+/* <Title>                                                                 */
+/*    Core API                                                             */
+/*                                                                         */
+/* <Sections>                                                              */
+/*    version                                                              */
+/*    basic_types                                                          */
+/*    base_interface                                                       */
+/*    glyph_variants                                                       */
+/*    glyph_management                                                     */
+/*    mac_specific                                                         */
+/*    sizes_management                                                     */
+/*    header_file_macros                                                   */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/* <Chapter>                                                               */
+/*    format_specific                                                      */
+/*                                                                         */
+/* <Title>                                                                 */
+/*    Format-Specific API                                                  */
+/*                                                                         */
+/* <Sections>                                                              */
+/*    multiple_masters                                                     */
+/*    truetype_tables                                                      */
+/*    type1_tables                                                         */
+/*    sfnt_names                                                           */
+/*    bdf_fonts                                                            */
+/*    cid_fonts                                                            */
+/*    pfr_fonts                                                            */
+/*    winfnt_fonts                                                         */
+/*    font_formats                                                         */
+/*    gasp_table                                                           */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/* <Chapter>                                                               */
+/*    module_specific                                                      */
+/*                                                                         */
+/* <Title>                                                                 */
+/*    Controlling FreeType Modules                                         */
+/*                                                                         */
+/* <Sections>                                                              */
+/*    auto_hinter                                                          */
+/*    cff_driver                                                           */
+/*    tt_driver                                                            */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/* <Chapter>                                                               */
+/*    cache_subsystem                                                      */
+/*                                                                         */
+/* <Title>                                                                 */
+/*    Cache Sub-System                                                     */
+/*                                                                         */
+/* <Sections>                                                              */
+/*    cache_subsystem                                                      */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/* <Chapter>                                                               */
+/*    support_api                                                          */
+/*                                                                         */
+/* <Title>                                                                 */
+/*    Support API                                                          */
+/*                                                                         */
+/* <Sections>                                                              */
+/*    computations                                                         */
+/*    list_processing                                                      */
+/*    outline_processing                                                   */
+/*    quick_advance                                                        */
+/*    bitmap_handling                                                      */
+/*    raster                                                               */
+/*    glyph_stroker                                                        */
+/*    system_interface                                                     */
+/*    module_management                                                    */
+/*    gzip                                                                 */
+/*    lzw                                                                  */
+/*    bzip2                                                                */
+/*    lcd_filtering                                                        */
+/*                                                                         */
+/***************************************************************************/
diff --git a/core/include/thirdparties/freetype/freetype/ftcid.h b/core/include/thirdparties/freetype/freetype/ftcid.h
new file mode 100644
index 0000000..f595975
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftcid.h
@@ -0,0 +1,166 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcid.h                                                                */
+/*                                                                         */
+/*    FreeType API for accessing CID font information (specification).     */
+/*                                                                         */
+/*  Copyright 2007, 2009 by Dereg Clegg, Michael Toftdal.                  */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTCID_H__
+#define __FTCID_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    cid_fonts                                                          */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    CID Fonts                                                          */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    CID-keyed font specific API.                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of CID-keyed font specific   */
+  /*    functions.                                                         */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /**********************************************************************
+   *
+   * @function:
+   *    FT_Get_CID_Registry_Ordering_Supplement
+   *
+   * @description:
+   *    Retrieve the Registry/Ordering/Supplement triple (also known as the
+   *    "R/O/S") from a CID-keyed font.
+   *
+   * @input:
+   *    face ::
+   *       A handle to the input face.
+   *
+   * @output:
+   *    registry ::
+   *       The registry, as a C~string, owned by the face.
+   *
+   *    ordering ::
+   *       The ordering, as a C~string, owned by the face.
+   *
+   *    supplement ::
+   *       The supplement.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   *
+   * @note:
+   *    This function only works with CID faces, returning an error
+   *    otherwise.
+   *
+   * @since:
+   *    2.3.6
+   */
+  FT_EXPORT( FT_Error )
+  FT_Get_CID_Registry_Ordering_Supplement( FT_Face       face,
+                                           const char*  *registry,
+                                           const char*  *ordering,
+                                           FT_Int       *supplement);
+
+
+  /**********************************************************************
+   *
+   * @function:
+   *    FT_Get_CID_Is_Internally_CID_Keyed
+   *
+   * @description:
+   *    Retrieve the type of the input face, CID keyed or not.  In
+   *    constrast to the @FT_IS_CID_KEYED macro this function returns
+   *    successfully also for CID-keyed fonts in an SNFT wrapper.
+   *
+   * @input:
+   *    face ::
+   *       A handle to the input face.
+   *
+   * @output:
+   *    is_cid ::
+   *       The type of the face as an @FT_Bool.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   *
+   * @note:
+   *    This function only works with CID faces and OpenType fonts,
+   *    returning an error otherwise.
+   *
+   * @since:
+   *    2.3.9
+   */
+  FT_EXPORT( FT_Error )
+  FT_Get_CID_Is_Internally_CID_Keyed( FT_Face   face,
+                                      FT_Bool  *is_cid );
+
+
+  /**********************************************************************
+   *
+   * @function:
+   *    FT_Get_CID_From_Glyph_Index
+   *
+   * @description:
+   *    Retrieve the CID of the input glyph index.
+   *
+   * @input:
+   *    face ::
+   *       A handle to the input face.
+   *
+   *    glyph_index ::
+   *       The input glyph index.
+   *
+   * @output:
+   *    cid ::
+   *       The CID as an @FT_UInt.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   *
+   * @note:
+   *    This function only works with CID faces and OpenType fonts,
+   *    returning an error otherwise.
+   *
+   * @since:
+   *    2.3.9
+   */
+  FT_EXPORT( FT_Error )
+  FT_Get_CID_From_Glyph_Index( FT_Face   face,
+                               FT_UInt   glyph_index,
+                               FT_UInt  *cid );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTCID_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/fterrdef.h b/core/include/thirdparties/freetype/freetype/fterrdef.h
new file mode 100644
index 0000000..76c7b9e
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/fterrdef.h
@@ -0,0 +1,249 @@
+/***************************************************************************/
+/*                                                                         */
+/*  fterrdef.h                                                             */
+/*                                                                         */
+/*    FreeType error codes (specification).                                */
+/*                                                                         */
+/*  Copyright 2002, 2004, 2006, 2007, 2010-2013 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*******************************************************************/
+  /*******************************************************************/
+  /*****                                                         *****/
+  /*****                LIST OF ERROR CODES/MESSAGES             *****/
+  /*****                                                         *****/
+  /*******************************************************************/
+  /*******************************************************************/
+
+
+  /* You need to define both FT_ERRORDEF_ and FT_NOERRORDEF_ before */
+  /* including this file.                                           */
+
+
+  /* generic errors */
+
+  FT_NOERRORDEF_( Ok,                                        0x00, \
+                  "no error" )
+
+  FT_ERRORDEF_( Cannot_Open_Resource,                        0x01, \
+                "cannot open resource" )
+  FT_ERRORDEF_( Unknown_File_Format,                         0x02, \
+                "unknown file format" )
+  FT_ERRORDEF_( Invalid_File_Format,                         0x03, \
+                "broken file" )
+  FT_ERRORDEF_( Invalid_Version,                             0x04, \
+                "invalid FreeType version" )
+  FT_ERRORDEF_( Lower_Module_Version,                        0x05, \
+                "module version is too low" )
+  FT_ERRORDEF_( Invalid_Argument,                            0x06, \
+                "invalid argument" )
+  FT_ERRORDEF_( Unimplemented_Feature,                       0x07, \
+                "unimplemented feature" )
+  FT_ERRORDEF_( Invalid_Table,                               0x08, \
+                "broken table" )
+  FT_ERRORDEF_( Invalid_Offset,                              0x09, \
+                "broken offset within table" )
+  FT_ERRORDEF_( Array_Too_Large,                             0x0A, \
+                "array allocation size too large" )
+  FT_ERRORDEF_( Missing_Module,                              0x0B, \
+                "missing module" )
+  FT_ERRORDEF_( Missing_Property,                            0x0C, \
+                "missing property" )
+
+  /* glyph/character errors */
+
+  FT_ERRORDEF_( Invalid_Glyph_Index,                         0x10, \
+                "invalid glyph index" )
+  FT_ERRORDEF_( Invalid_Character_Code,                      0x11, \
+                "invalid character code" )
+  FT_ERRORDEF_( Invalid_Glyph_Format,                        0x12, \
+                "unsupported glyph image format" )
+  FT_ERRORDEF_( Cannot_Render_Glyph,                         0x13, \
+                "cannot render this glyph format" )
+  FT_ERRORDEF_( Invalid_Outline,                             0x14, \
+                "invalid outline" )
+  FT_ERRORDEF_( Invalid_Composite,                           0x15, \
+                "invalid composite glyph" )
+  FT_ERRORDEF_( Too_Many_Hints,                              0x16, \
+                "too many hints" )
+  FT_ERRORDEF_( Invalid_Pixel_Size,                          0x17, \
+                "invalid pixel size" )
+
+  /* handle errors */
+
+  FT_ERRORDEF_( Invalid_Handle,                              0x20, \
+                "invalid object handle" )
+  FT_ERRORDEF_( Invalid_Library_Handle,                      0x21, \
+                "invalid library handle" )
+  FT_ERRORDEF_( Invalid_Driver_Handle,                       0x22, \
+                "invalid module handle" )
+  FT_ERRORDEF_( Invalid_Face_Handle,                         0x23, \
+                "invalid face handle" )
+  FT_ERRORDEF_( Invalid_Size_Handle,                         0x24, \
+                "invalid size handle" )
+  FT_ERRORDEF_( Invalid_Slot_Handle,                         0x25, \
+                "invalid glyph slot handle" )
+  FT_ERRORDEF_( Invalid_CharMap_Handle,                      0x26, \
+                "invalid charmap handle" )
+  FT_ERRORDEF_( Invalid_Cache_Handle,                        0x27, \
+                "invalid cache manager handle" )
+  FT_ERRORDEF_( Invalid_Stream_Handle,                       0x28, \
+                "invalid stream handle" )
+
+  /* driver errors */
+
+  FT_ERRORDEF_( Too_Many_Drivers,                            0x30, \
+                "too many modules" )
+  FT_ERRORDEF_( Too_Many_Extensions,                         0x31, \
+                "too many extensions" )
+
+  /* memory errors */
+
+  FT_ERRORDEF_( Out_Of_Memory,                               0x40, \
+                "out of memory" )
+  FT_ERRORDEF_( Unlisted_Object,                             0x41, \
+                "unlisted object" )
+
+  /* stream errors */
+
+  FT_ERRORDEF_( Cannot_Open_Stream,                          0x51, \
+                "cannot open stream" )
+  FT_ERRORDEF_( Invalid_Stream_Seek,                         0x52, \
+                "invalid stream seek" )
+  FT_ERRORDEF_( Invalid_Stream_Skip,                         0x53, \
+                "invalid stream skip" )
+  FT_ERRORDEF_( Invalid_Stream_Read,                         0x54, \
+                "invalid stream read" )
+  FT_ERRORDEF_( Invalid_Stream_Operation,                    0x55, \
+                "invalid stream operation" )
+  FT_ERRORDEF_( Invalid_Frame_Operation,                     0x56, \
+                "invalid frame operation" )
+  FT_ERRORDEF_( Nested_Frame_Access,                         0x57, \
+                "nested frame access" )
+  FT_ERRORDEF_( Invalid_Frame_Read,                          0x58, \
+                "invalid frame read" )
+
+  /* raster errors */
+
+  FT_ERRORDEF_( Raster_Uninitialized,                        0x60, \
+                "raster uninitialized" )
+  FT_ERRORDEF_( Raster_Corrupted,                            0x61, \
+                "raster corrupted" )
+  FT_ERRORDEF_( Raster_Overflow,                             0x62, \
+                "raster overflow" )
+  FT_ERRORDEF_( Raster_Negative_Height,                      0x63, \
+                "negative height while rastering" )
+
+  /* cache errors */
+
+  FT_ERRORDEF_( Too_Many_Caches,                             0x70, \
+                "too many registered caches" )
+
+  /* TrueType and SFNT errors */
+
+  FT_ERRORDEF_( Invalid_Opcode,                              0x80, \
+                "invalid opcode" )
+  FT_ERRORDEF_( Too_Few_Arguments,                           0x81, \
+                "too few arguments" )
+  FT_ERRORDEF_( Stack_Overflow,                              0x82, \
+                "stack overflow" )
+  FT_ERRORDEF_( Code_Overflow,                               0x83, \
+                "code overflow" )
+  FT_ERRORDEF_( Bad_Argument,                                0x84, \
+                "bad argument" )
+  FT_ERRORDEF_( Divide_By_Zero,                              0x85, \
+                "division by zero" )
+  FT_ERRORDEF_( Invalid_Reference,                           0x86, \
+                "invalid reference" )
+  FT_ERRORDEF_( Debug_OpCode,                                0x87, \
+                "found debug opcode" )
+  FT_ERRORDEF_( ENDF_In_Exec_Stream,                         0x88, \
+                "found ENDF opcode in execution stream" )
+  FT_ERRORDEF_( Nested_DEFS,                                 0x89, \
+                "nested DEFS" )
+  FT_ERRORDEF_( Invalid_CodeRange,                           0x8A, \
+                "invalid code range" )
+  FT_ERRORDEF_( Execution_Too_Long,                          0x8B, \
+                "execution context too long" )
+  FT_ERRORDEF_( Too_Many_Function_Defs,                      0x8C, \
+                "too many function definitions" )
+  FT_ERRORDEF_( Too_Many_Instruction_Defs,                   0x8D, \
+                "too many instruction definitions" )
+  FT_ERRORDEF_( Table_Missing,                               0x8E, \
+                "SFNT font table missing" )
+  FT_ERRORDEF_( Horiz_Header_Missing,                        0x8F, \
+                "horizontal header (hhea) table missing" )
+  FT_ERRORDEF_( Locations_Missing,                           0x90, \
+                "locations (loca) table missing" )
+  FT_ERRORDEF_( Name_Table_Missing,                          0x91, \
+                "name table missing" )
+  FT_ERRORDEF_( CMap_Table_Missing,                          0x92, \
+                "character map (cmap) table missing" )
+  FT_ERRORDEF_( Hmtx_Table_Missing,                          0x93, \
+                "horizontal metrics (hmtx) table missing" )
+  FT_ERRORDEF_( Post_Table_Missing,                          0x94, \
+                "PostScript (post) table missing" )
+  FT_ERRORDEF_( Invalid_Horiz_Metrics,                       0x95, \
+                "invalid horizontal metrics" )
+  FT_ERRORDEF_( Invalid_CharMap_Format,                      0x96, \
+                "invalid character map (cmap) format" )
+  FT_ERRORDEF_( Invalid_PPem,                                0x97, \
+                "invalid ppem value" )
+  FT_ERRORDEF_( Invalid_Vert_Metrics,                        0x98, \
+                "invalid vertical metrics" )
+  FT_ERRORDEF_( Could_Not_Find_Context,                      0x99, \
+                "could not find context" )
+  FT_ERRORDEF_( Invalid_Post_Table_Format,                   0x9A, \
+                "invalid PostScript (post) table format" )
+  FT_ERRORDEF_( Invalid_Post_Table,                          0x9B, \
+                "invalid PostScript (post) table" )
+
+  /* CFF, CID, and Type 1 errors */
+
+  FT_ERRORDEF_( Syntax_Error,                                0xA0, \
+                "opcode syntax error" )
+  FT_ERRORDEF_( Stack_Underflow,                             0xA1, \
+                "argument stack underflow" )
+  FT_ERRORDEF_( Ignore,                                      0xA2, \
+                "ignore" )
+  FT_ERRORDEF_( No_Unicode_Glyph_Name,                       0xA3, \
+                "no Unicode glyph name found" )
+  FT_ERRORDEF_( Glyph_Too_Big,                               0xA4, \
+                "glyph to big for hinting" )
+
+  /* BDF errors */
+
+  FT_ERRORDEF_( Missing_Startfont_Field,                     0xB0, \
+                "`STARTFONT' field missing" )
+  FT_ERRORDEF_( Missing_Font_Field,                          0xB1, \
+                "`FONT' field missing" )
+  FT_ERRORDEF_( Missing_Size_Field,                          0xB2, \
+                "`SIZE' field missing" )
+  FT_ERRORDEF_( Missing_Fontboundingbox_Field,               0xB3, \
+                "`FONTBOUNDINGBOX' field missing" )
+  FT_ERRORDEF_( Missing_Chars_Field,                         0xB4, \
+                "`CHARS' field missing" )
+  FT_ERRORDEF_( Missing_Startchar_Field,                     0xB5, \
+                "`STARTCHAR' field missing" )
+  FT_ERRORDEF_( Missing_Encoding_Field,                      0xB6, \
+                "`ENCODING' field missing" )
+  FT_ERRORDEF_( Missing_Bbx_Field,                           0xB7, \
+                "`BBX' field missing" )
+  FT_ERRORDEF_( Bbx_Too_Big,                                 0xB8, \
+                "`BBX' too big" )
+  FT_ERRORDEF_( Corrupted_Font_Header,                       0xB9, \
+                "Font header corrupted or missing fields" )
+  FT_ERRORDEF_( Corrupted_Font_Glyphs,                       0xBA, \
+                "Font glyphs corrupted or missing fields" )
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/fterrors.h b/core/include/thirdparties/freetype/freetype/fterrors.h
new file mode 100644
index 0000000..bd69d0f
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/fterrors.h
@@ -0,0 +1,198 @@
+/***************************************************************************/
+/*                                                                         */
+/*  fterrors.h                                                             */
+/*                                                                         */
+/*    FreeType error code handling (specification).                        */
+/*                                                                         */
+/*  Copyright 1996-2002, 2004, 2007, 2013 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This special header file is used to define the handling of FT2        */
+  /* enumeration constants.  It can also be used to generate error message */
+  /* strings with a small macro trick explained below.                     */
+  /*                                                                       */
+  /* I - Error Formats                                                     */
+  /* -----------------                                                     */
+  /*                                                                       */
+  /*   The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be   */
+  /*   defined in ftoption.h in order to make the higher byte indicate     */
+  /*   the module where the error has happened (this is not compatible     */
+  /*   with standard builds of FreeType 2).  See the file `ftmoderr.h' for */
+  /*   more details.                                                       */
+  /*                                                                       */
+  /*                                                                       */
+  /* II - Error Message strings                                            */
+  /* --------------------------                                            */
+  /*                                                                       */
+  /*   The error definitions below are made through special macros that    */
+  /*   allow client applications to build a table of error message strings */
+  /*   if they need it.  The strings are not included in a normal build of */
+  /*   FreeType 2 to save space (most client applications do not use       */
+  /*   them).                                                              */
+  /*                                                                       */
+  /*   To do so, you have to define the following macros before including  */
+  /*   this file:                                                          */
+  /*                                                                       */
+  /*   FT_ERROR_START_LIST ::                                              */
+  /*     This macro is called before anything else to define the start of  */
+  /*     the error list.  It is followed by several FT_ERROR_DEF calls     */
+  /*     (see below).                                                      */
+  /*                                                                       */
+  /*   FT_ERROR_DEF( e, v, s ) ::                                          */
+  /*     This macro is called to define one single error.                  */
+  /*     `e' is the error code identifier (e.g. FT_Err_Invalid_Argument).  */
+  /*     `v' is the error numerical value.                                 */
+  /*     `s' is the corresponding error string.                            */
+  /*                                                                       */
+  /*   FT_ERROR_END_LIST ::                                                */
+  /*     This macro ends the list.                                         */
+  /*                                                                       */
+  /*   Additionally, you have to undefine __FTERRORS_H__ before #including */
+  /*   this file.                                                          */
+  /*                                                                       */
+  /*   Here is a simple example:                                           */
+  /*                                                                       */
+  /*     {                                                                 */
+  /*       #undef __FTERRORS_H__                                           */
+  /*       #define FT_ERRORDEF( e, v, s )  { e, s },                       */
+  /*       #define FT_ERROR_START_LIST     {                               */
+  /*       #define FT_ERROR_END_LIST       { 0, 0 } };                     */
+  /*                                                                       */
+  /*       const struct                                                    */
+  /*       {                                                               */
+  /*         int          err_code;                                        */
+  /*         const char*  err_msg;                                         */
+  /*       } ft_errors[] =                                                 */
+  /*                                                                       */
+  /*       #include "fterrors.h"                                            */
+  /*     }                                                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTERRORS_H__
+#define __FTERRORS_H__
+
+
+  /* include module base error codes */
+#include "ftmoderr.h"
+
+
+  /*******************************************************************/
+  /*******************************************************************/
+  /*****                                                         *****/
+  /*****                       SETUP MACROS                      *****/
+  /*****                                                         *****/
+  /*******************************************************************/
+  /*******************************************************************/
+
+
+#undef  FT_NEED_EXTERN_C
+
+
+  /* FT_ERR_PREFIX is used as a prefix for error identifiers. */
+  /* By default, we use `FT_Err_'.                            */
+  /*                                                          */
+#ifndef FT_ERR_PREFIX
+#define FT_ERR_PREFIX  FT_Err_
+#endif
+
+
+  /* FT_ERR_BASE is used as the base for module-specific errors. */
+  /*                                                             */
+#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+
+#ifndef FT_ERR_BASE
+#define FT_ERR_BASE  FT_Mod_Err_Base
+#endif
+
+#else
+
+#undef FT_ERR_BASE
+#define FT_ERR_BASE  0
+
+#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */
+
+
+  /* If FT_ERRORDEF is not defined, we need to define a simple */
+  /* enumeration type.                                         */
+  /*                                                           */
+#ifndef FT_ERRORDEF
+
+#define FT_ERRORDEF( e, v, s )  e = v,
+#define FT_ERROR_START_LIST     enum {
+#define FT_ERROR_END_LIST       FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
+
+#ifdef __cplusplus
+#define FT_NEED_EXTERN_C
+  extern "C" {
+#endif
+
+#endif /* !FT_ERRORDEF */
+
+
+  /* this macro is used to define an error */
+#define FT_ERRORDEF_( e, v, s )                                             \
+          FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s )
+
+  /* this is only used for <module>_Err_Ok, which must be 0! */
+#define FT_NOERRORDEF_( e, v, s )                             \
+          FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s )
+
+
+#ifdef FT_ERROR_START_LIST
+  FT_ERROR_START_LIST
+#endif
+
+
+  /* now include the error codes */
+#include "fterrdef.h"
+
+
+#ifdef FT_ERROR_END_LIST
+  FT_ERROR_END_LIST
+#endif
+
+
+  /*******************************************************************/
+  /*******************************************************************/
+  /*****                                                         *****/
+  /*****                      SIMPLE CLEANUP                     *****/
+  /*****                                                         *****/
+  /*******************************************************************/
+  /*******************************************************************/
+
+#ifdef FT_NEED_EXTERN_C
+  }
+#endif
+
+#undef FT_ERROR_START_LIST
+#undef FT_ERROR_END_LIST
+
+#undef FT_ERRORDEF
+#undef FT_ERRORDEF_
+#undef FT_NOERRORDEF_
+
+#undef FT_NEED_EXTERN_C
+#undef FT_ERR_BASE
+
+  /* FT_ERR_PREFIX is needed internally */
+#ifndef FT2_BUILD_LIBRARY
+#undef FT_ERR_PREFIX
+#endif
+
+#endif /* __FTERRORS_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftgasp.h b/core/include/thirdparties/freetype/freetype/ftgasp.h
new file mode 100644
index 0000000..ff0a34a
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftgasp.h
@@ -0,0 +1,128 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftgasp.h                                                               */
+/*                                                                         */
+/*    Access of TrueType's `gasp' table (specification).                   */
+/*                                                                         */
+/*  Copyright 2007, 2008, 2011 by                                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef _FT_GASP_H_
+#define _FT_GASP_H_
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+  /***************************************************************************
+   *
+   * @section:
+   *   gasp_table
+   *
+   * @title:
+   *   Gasp Table
+   *
+   * @abstract:
+   *   Retrieving TrueType `gasp' table entries.
+   *
+   * @description:
+   *   The function @FT_Get_Gasp can be used to query a TrueType or OpenType
+   *   font for specific entries in its `gasp' table, if any.  This is
+   *   mainly useful when implementing native TrueType hinting with the
+   *   bytecode interpreter to duplicate the Windows text rendering results.
+   */
+
+  /*************************************************************************
+   *
+   * @enum:
+   *   FT_GASP_XXX
+   *
+   * @description:
+   *   A list of values and/or bit-flags returned by the @FT_Get_Gasp
+   *   function.
+   *
+   * @values:
+   *   FT_GASP_NO_TABLE ::
+   *     This special value means that there is no GASP table in this face.
+   *     It is up to the client to decide what to do.
+   *
+   *   FT_GASP_DO_GRIDFIT ::
+   *     Grid-fitting and hinting should be performed at the specified ppem.
+   *     This *really* means TrueType bytecode interpretation.  If this bit
+   *     is not set, no hinting gets applied.
+   *
+   *   FT_GASP_DO_GRAY ::
+   *     Anti-aliased rendering should be performed at the specified ppem.
+   *     If not set, do monochrome rendering.
+   *
+   *   FT_GASP_SYMMETRIC_SMOOTHING ::
+   *     If set, smoothing along multiple axes must be used with ClearType.
+   *
+   *   FT_GASP_SYMMETRIC_GRIDFIT ::
+   *     Grid-fitting must be used with ClearType's symmetric smoothing.
+   *
+   * @note:
+   *   The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be
+   *   used for standard font rasterization only.  Independently of that,
+   *   `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to
+   *   be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and
+   *   `FT_GASP_DO_GRAY' are consequently ignored).
+   *
+   *   `ClearType' is Microsoft's implementation of LCD rendering, partly
+   *   protected by patents.
+   *
+   * @since:
+   *   2.3.0
+   */
+#define FT_GASP_NO_TABLE               -1
+#define FT_GASP_DO_GRIDFIT           0x01
+#define FT_GASP_DO_GRAY              0x02
+#define FT_GASP_SYMMETRIC_SMOOTHING  0x08
+#define FT_GASP_SYMMETRIC_GRIDFIT    0x10
+
+
+  /*************************************************************************
+   *
+   * @func:
+   *   FT_Get_Gasp
+   *
+   * @description:
+   *   Read the `gasp' table from a TrueType or OpenType font file and
+   *   return the entry corresponding to a given character pixel size.
+   *
+   * @input:
+   *   face :: The source face handle.
+   *   ppem :: The vertical character pixel size.
+   *
+   * @return:
+   *   Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no
+   *   `gasp' table in the face.
+   *
+   * @since:
+   *   2.3.0
+   */
+  FT_EXPORT( FT_Int )
+  FT_Get_Gasp( FT_Face  face,
+               FT_UInt  ppem );
+
+/* */
+
+#endif /* _FT_GASP_H_ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftglyph.h b/core/include/thirdparties/freetype/freetype/ftglyph.h
new file mode 100644
index 0000000..ec2d9d8
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftglyph.h
@@ -0,0 +1,620 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftglyph.h                                                              */
+/*                                                                         */
+/*    FreeType convenience functions to handle glyphs (specification).     */
+/*                                                                         */
+/*  Copyright 1996-2003, 2006, 2008, 2009, 2011 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This file contains the definition of several convenience functions    */
+  /* that can be used by client applications to easily retrieve glyph      */
+  /* bitmaps and outlines from a given face.                               */
+  /*                                                                       */
+  /* These functions should be optional if you are writing a font server   */
+  /* or text layout engine on top of FreeType.  However, they are pretty   */
+  /* handy for many other simple uses of the library.                      */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTGLYPH_H__
+#define __FTGLYPH_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    glyph_management                                                   */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Glyph Management                                                   */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Generic interface to manage individual glyph data.                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains definitions used to manage glyph data        */
+  /*    through generic FT_Glyph objects.  Each of them can contain a      */
+  /*    bitmap, a vector outline, or even images in other formats.         */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /* forward declaration to a private type */
+  typedef struct FT_Glyph_Class_  FT_Glyph_Class;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Glyph                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Handle to an object used to model generic glyph images.  It is a   */
+  /*    pointer to the @FT_GlyphRec structure and can contain a glyph      */
+  /*    bitmap or pointer.                                                 */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Glyph objects are not owned by the library.  You must thus release */
+  /*    them manually (through @FT_Done_Glyph) _before_ calling            */
+  /*    @FT_Done_FreeType.                                                 */
+  /*                                                                       */
+  typedef struct FT_GlyphRec_*  FT_Glyph;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_GlyphRec                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The root glyph structure contains a given glyph image plus its     */
+  /*    advance width in 16.16 fixed-point format.                         */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    library :: A handle to the FreeType library object.                */
+  /*                                                                       */
+  /*    clazz   :: A pointer to the glyph's class.  Private.               */
+  /*                                                                       */
+  /*    format  :: The format of the glyph's image.                        */
+  /*                                                                       */
+  /*    advance :: A 16.16 vector that gives the glyph's advance width.    */
+  /*                                                                       */
+  typedef struct  FT_GlyphRec_
+  {
+    FT_Library             library;
+    const FT_Glyph_Class*  clazz;
+    FT_Glyph_Format        format;
+    FT_Vector              advance;
+
+  } FT_GlyphRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_BitmapGlyph                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to an object used to model a bitmap glyph image.  This is */
+  /*    a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.     */
+  /*                                                                       */
+  typedef struct FT_BitmapGlyphRec_*  FT_BitmapGlyph;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_BitmapGlyphRec                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used for bitmap glyph images.  This really is a        */
+  /*    `sub-class' of @FT_GlyphRec.                                       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    root   :: The root @FT_Glyph fields.                               */
+  /*                                                                       */
+  /*    left   :: The left-side bearing, i.e., the horizontal distance     */
+  /*              from the current pen position to the left border of the  */
+  /*              glyph bitmap.                                            */
+  /*                                                                       */
+  /*    top    :: The top-side bearing, i.e., the vertical distance from   */
+  /*              the current pen position to the top border of the glyph  */
+  /*              bitmap.  This distance is positive for upwards~y!        */
+  /*                                                                       */
+  /*    bitmap :: A descriptor for the bitmap.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have       */
+  /*    `glyph->format == FT_GLYPH_FORMAT_BITMAP'.  This lets you access   */
+  /*    the bitmap's contents easily.                                      */
+  /*                                                                       */
+  /*    The corresponding pixel buffer is always owned by @FT_BitmapGlyph  */
+  /*    and is thus created and destroyed with it.                         */
+  /*                                                                       */
+  typedef struct  FT_BitmapGlyphRec_
+  {
+    FT_GlyphRec  root;
+    FT_Int       left;
+    FT_Int       top;
+    FT_Bitmap    bitmap;
+
+  } FT_BitmapGlyphRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_OutlineGlyph                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to an object used to model an outline glyph image.  This  */
+  /*    is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. */
+  /*                                                                       */
+  typedef struct FT_OutlineGlyphRec_*  FT_OutlineGlyph;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_OutlineGlyphRec                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used for outline (vectorial) glyph images.  This       */
+  /*    really is a `sub-class' of @FT_GlyphRec.                           */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    root    :: The root @FT_Glyph fields.                              */
+  /*                                                                       */
+  /*    outline :: A descriptor for the outline.                           */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have      */
+  /*    `glyph->format == FT_GLYPH_FORMAT_OUTLINE'.  This lets you access  */
+  /*    the outline's content easily.                                      */
+  /*                                                                       */
+  /*    As the outline is extracted from a glyph slot, its coordinates are */
+  /*    expressed normally in 26.6 pixels, unless the flag                 */
+  /*    @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char(). */
+  /*                                                                       */
+  /*    The outline's tables are always owned by the object and are        */
+  /*    destroyed with it.                                                 */
+  /*                                                                       */
+  typedef struct  FT_OutlineGlyphRec_
+  {
+    FT_GlyphRec  root;
+    FT_Outline   outline;
+
+  } FT_OutlineGlyphRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Glyph                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to extract a glyph image from a slot.  Note that   */
+  /*    the created @FT_Glyph object must be released with @FT_Done_Glyph. */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    slot   :: A handle to the source glyph slot.                       */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    aglyph :: A handle to the glyph object.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Get_Glyph( FT_GlyphSlot  slot,
+                FT_Glyph     *aglyph );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Glyph_Copy                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to copy a glyph image.  Note that the created      */
+  /*    @FT_Glyph object must be released with @FT_Done_Glyph.             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    source :: A handle to the source glyph object.                     */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    target :: A handle to the target glyph object.  0~in case of       */
+  /*              error.                                                   */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Glyph_Copy( FT_Glyph   source,
+                 FT_Glyph  *target );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Glyph_Transform                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Transform a glyph image if its format is scalable.                 */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    glyph  :: A handle to the target glyph object.                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    matrix :: A pointer to a 2x2 matrix to apply.                      */
+  /*                                                                       */
+  /*    delta  :: A pointer to a 2d vector to apply.  Coordinates are      */
+  /*              expressed in 1/64th of a pixel.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code (if not 0, the glyph format is not scalable).  */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The 2x2 transformation matrix is also applied to the glyph's       */
+  /*    advance vector.                                                    */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Glyph_Transform( FT_Glyph    glyph,
+                      FT_Matrix*  matrix,
+                      FT_Vector*  delta );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    FT_Glyph_BBox_Mode                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The mode how the values of @FT_Glyph_Get_CBox are returned.        */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    FT_GLYPH_BBOX_UNSCALED ::                                          */
+  /*      Return unscaled font units.                                      */
+  /*                                                                       */
+  /*    FT_GLYPH_BBOX_SUBPIXELS ::                                         */
+  /*      Return unfitted 26.6 coordinates.                                */
+  /*                                                                       */
+  /*    FT_GLYPH_BBOX_GRIDFIT ::                                           */
+  /*      Return grid-fitted 26.6 coordinates.                             */
+  /*                                                                       */
+  /*    FT_GLYPH_BBOX_TRUNCATE ::                                          */
+  /*      Return coordinates in integer pixels.                            */
+  /*                                                                       */
+  /*    FT_GLYPH_BBOX_PIXELS ::                                            */
+  /*      Return grid-fitted pixel coordinates.                            */
+  /*                                                                       */
+  typedef enum  FT_Glyph_BBox_Mode_
+  {
+    FT_GLYPH_BBOX_UNSCALED  = 0,
+    FT_GLYPH_BBOX_SUBPIXELS = 0,
+    FT_GLYPH_BBOX_GRIDFIT   = 1,
+    FT_GLYPH_BBOX_TRUNCATE  = 2,
+    FT_GLYPH_BBOX_PIXELS    = 3
+
+  } FT_Glyph_BBox_Mode;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    ft_glyph_bbox_xxx                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    These constants are deprecated.  Use the corresponding             */
+  /*    @FT_Glyph_BBox_Mode values instead.                                */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*   ft_glyph_bbox_unscaled  :: See @FT_GLYPH_BBOX_UNSCALED.             */
+  /*   ft_glyph_bbox_subpixels :: See @FT_GLYPH_BBOX_SUBPIXELS.            */
+  /*   ft_glyph_bbox_gridfit   :: See @FT_GLYPH_BBOX_GRIDFIT.              */
+  /*   ft_glyph_bbox_truncate  :: See @FT_GLYPH_BBOX_TRUNCATE.             */
+  /*   ft_glyph_bbox_pixels    :: See @FT_GLYPH_BBOX_PIXELS.               */
+  /*                                                                       */
+#define ft_glyph_bbox_unscaled   FT_GLYPH_BBOX_UNSCALED
+#define ft_glyph_bbox_subpixels  FT_GLYPH_BBOX_SUBPIXELS
+#define ft_glyph_bbox_gridfit    FT_GLYPH_BBOX_GRIDFIT
+#define ft_glyph_bbox_truncate   FT_GLYPH_BBOX_TRUNCATE
+#define ft_glyph_bbox_pixels     FT_GLYPH_BBOX_PIXELS
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Glyph_Get_CBox                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return a glyph's `control box'.  The control box encloses all the  */
+  /*    outline's points, including Bézier control points.  Though it      */
+  /*    coincides with the exact bounding box for most glyphs, it can be   */
+  /*    slightly larger in some situations (like when rotating an outline  */
+  /*    which contains Bézier outside arcs).                               */
+  /*                                                                       */
+  /*    Computing the control box is very fast, while getting the bounding */
+  /*    box can take much more time as it needs to walk over all segments  */
+  /*    and arcs in the outline.  To get the latter, you can use the       */
+  /*    `ftbbox' component which is dedicated to this single task.         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    glyph :: A handle to the source glyph object.                      */
+  /*                                                                       */
+  /*    mode  :: The mode which indicates how to interpret the returned    */
+  /*             bounding box values.                                      */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    acbox :: The glyph coordinate bounding box.  Coordinates are       */
+  /*             expressed in 1/64th of pixels if it is grid-fitted.       */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Coordinates are relative to the glyph origin, using the y~upwards  */
+  /*    convention.                                                        */
+  /*                                                                       */
+  /*    If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode'   */
+  /*    must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font        */
+  /*    units in 26.6 pixel format.  The value @FT_GLYPH_BBOX_SUBPIXELS    */
+  /*    is another name for this constant.                                 */
+  /*                                                                       */
+  /*    If the font is tricky and the glyph has been loaded with           */
+  /*    @FT_LOAD_NO_SCALE, the resulting CBox is meaningless.  To get      */
+  /*    reasonable values for the CBox it is necessary to load the glyph   */
+  /*    at a large ppem value (so that the hinting instructions can        */
+  /*    properly shift and scale the subglyphs), then extracting the CBox  */
+  /*    which can be eventually converted back to font units.              */
+  /*                                                                       */
+  /*    Note that the maximum coordinates are exclusive, which means that  */
+  /*    one can compute the width and height of the glyph image (be it in  */
+  /*    integer or 26.6 pixels) as:                                        */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      width  = bbox.xMax - bbox.xMin;                                  */
+  /*      height = bbox.yMax - bbox.yMin;                                  */
+  /*    }                                                                  */
+  /*                                                                       */
+  /*    Note also that for 26.6 coordinates, if `bbox_mode' is set to      */
+  /*    @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted,  */
+  /*    which corresponds to:                                              */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      bbox.xMin = FLOOR(bbox.xMin);                                    */
+  /*      bbox.yMin = FLOOR(bbox.yMin);                                    */
+  /*      bbox.xMax = CEILING(bbox.xMax);                                  */
+  /*      bbox.yMax = CEILING(bbox.yMax);                                  */
+  /*    }                                                                  */
+  /*                                                                       */
+  /*    To get the bbox in pixel coordinates, set `bbox_mode' to           */
+  /*    @FT_GLYPH_BBOX_TRUNCATE.                                           */
+  /*                                                                       */
+  /*    To get the bbox in grid-fitted pixel coordinates, set `bbox_mode'  */
+  /*    to @FT_GLYPH_BBOX_PIXELS.                                          */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Glyph_Get_CBox( FT_Glyph  glyph,
+                     FT_UInt   bbox_mode,
+                     FT_BBox  *acbox );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Glyph_To_Bitmap                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Convert a given glyph object to a bitmap glyph object.             */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    the_glyph   :: A pointer to a handle to the target glyph.          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    render_mode :: An enumeration that describes how the data is       */
+  /*                   rendered.                                           */
+  /*                                                                       */
+  /*    origin      :: A pointer to a vector used to translate the glyph   */
+  /*                   image before rendering.  Can be~0 (if no            */
+  /*                   translation).  The origin is expressed in           */
+  /*                   26.6 pixels.                                        */
+  /*                                                                       */
+  /*    destroy     :: A boolean that indicates that the original glyph    */
+  /*                   image should be destroyed by this function.  It is  */
+  /*                   never destroyed in case of error.                   */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function does nothing if the glyph format isn't scalable.     */
+  /*                                                                       */
+  /*    The glyph image is translated with the `origin' vector before      */
+  /*    rendering.                                                         */
+  /*                                                                       */
+  /*    The first parameter is a pointer to an @FT_Glyph handle, that will */
+  /*    be _replaced_ by this function (with newly allocated data).        */
+  /*    Typically, you would use (omitting error handling):                */
+  /*                                                                       */
+  /*                                                                       */
+  /*      {                                                                */
+  /*        FT_Glyph        glyph;                                         */
+  /*        FT_BitmapGlyph  glyph_bitmap;                                  */
+  /*                                                                       */
+  /*                                                                       */
+  /*        // load glyph                                                  */
+  /*        error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAUT );     */
+  /*                                                                       */
+  /*        // extract glyph image                                         */
+  /*        error = FT_Get_Glyph( face->glyph, &glyph );                   */
+  /*                                                                       */
+  /*        // convert to a bitmap (default render mode + destroying old)  */
+  /*        if ( glyph->format != FT_GLYPH_FORMAT_BITMAP )                 */
+  /*        {                                                              */
+  /*          error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL,   */
+  /*                                      0, 1 );                          */
+  /*          if ( error ) // `glyph' unchanged                            */
+  /*            ...                                                        */
+  /*        }                                                              */
+  /*                                                                       */
+  /*        // access bitmap content by typecasting                        */
+  /*        glyph_bitmap = (FT_BitmapGlyph)glyph;                          */
+  /*                                                                       */
+  /*        // do funny stuff with it, like blitting/drawing               */
+  /*        ...                                                            */
+  /*                                                                       */
+  /*        // discard glyph image (bitmap or not)                         */
+  /*        FT_Done_Glyph( glyph );                                        */
+  /*      }                                                                */
+  /*                                                                       */
+  /*                                                                       */
+  /*    Here another example, again without error handling:                */
+  /*                                                                       */
+  /*                                                                       */
+  /*      {                                                                */
+  /*        FT_Glyph  glyphs[MAX_GLYPHS]                                   */
+  /*                                                                       */
+  /*                                                                       */
+  /*        ...                                                            */
+  /*                                                                       */
+  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
+  /*          error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) ||       */
+  /*                  FT_Get_Glyph ( face->glyph, &glyph[idx] );           */
+  /*                                                                       */
+  /*        ...                                                            */
+  /*                                                                       */
+  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
+  /*        {                                                              */
+  /*          FT_Glyph  bitmap = glyphs[idx];                              */
+  /*                                                                       */
+  /*                                                                       */
+  /*          ...                                                          */
+  /*                                                                       */
+  /*          // after this call, `bitmap' no longer points into           */
+  /*          // the `glyphs' array (and the old value isn't destroyed)    */
+  /*          FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 );    */
+  /*                                                                       */
+  /*          ...                                                          */
+  /*                                                                       */
+  /*          FT_Done_Glyph( bitmap );                                     */
+  /*        }                                                              */
+  /*                                                                       */
+  /*        ...                                                            */
+  /*                                                                       */
+  /*        for ( idx = 0; i < MAX_GLYPHS; i++ )                           */
+  /*          FT_Done_Glyph( glyphs[idx] );                                */
+  /*      }                                                                */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
+                      FT_Render_Mode  render_mode,
+                      FT_Vector*      origin,
+                      FT_Bool         destroy );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Done_Glyph                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Destroy a given glyph.                                             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    glyph :: A handle to the target glyph object.                      */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Done_Glyph( FT_Glyph  glyph );
+
+  /* */
+
+
+  /* other helpful functions */
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    computations                                                       */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Matrix_Multiply                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Perform the matrix operation `b = a*b'.                            */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    a :: A pointer to matrix `a'.                                      */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    b :: A pointer to matrix `b'.                                      */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The result is undefined if either `a' or `b' is zero.              */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Matrix_Multiply( const FT_Matrix*  a,
+                      FT_Matrix*        b );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Matrix_Invert                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Invert a 2x2 matrix.  Return an error if it can't be inverted.     */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    matrix :: A pointer to the target matrix.  Remains untouched in    */
+  /*              case of error.                                           */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Matrix_Invert( FT_Matrix*  matrix );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGLYPH_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8    */
+/* End:             */
diff --git a/core/include/thirdparties/freetype/freetype/ftgxval.h b/core/include/thirdparties/freetype/freetype/ftgxval.h
new file mode 100644
index 0000000..763652a
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftgxval.h
@@ -0,0 +1,358 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftgxval.h                                                              */
+/*                                                                         */
+/*    FreeType API for validating TrueTypeGX/AAT tables (specification).   */
+/*                                                                         */
+/*  Copyright 2004, 2005, 2006 by                                          */
+/*  Masatake YAMATO, Redhat K.K,                                           */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+/***************************************************************************/
+/*                                                                         */
+/* gxvalid is derived from both gxlayout module and otvalid module.        */
+/* Development of gxlayout is supported by the Information-technology      */
+/* Promotion Agency(IPA), Japan.                                           */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTGXVAL_H__
+#define __FTGXVAL_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    gx_validation                                                      */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    TrueTypeGX/AAT Validation                                          */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    An API to validate TrueTypeGX/AAT tables.                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of functions to validate     */
+  /*    some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd,  */
+  /*    trak, prop, lcar).                                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                                                                       */
+  /* Warning: Use FT_VALIDATE_XXX to validate a table.                     */
+  /*          Following definitions are for gxvalid developers.            */
+  /*                                                                       */
+  /*                                                                       */
+  /*************************************************************************/
+
+#define FT_VALIDATE_feat_INDEX     0
+#define FT_VALIDATE_mort_INDEX     1
+#define FT_VALIDATE_morx_INDEX     2
+#define FT_VALIDATE_bsln_INDEX     3
+#define FT_VALIDATE_just_INDEX     4
+#define FT_VALIDATE_kern_INDEX     5
+#define FT_VALIDATE_opbd_INDEX     6
+#define FT_VALIDATE_trak_INDEX     7
+#define FT_VALIDATE_prop_INDEX     8
+#define FT_VALIDATE_lcar_INDEX     9
+#define FT_VALIDATE_GX_LAST_INDEX  FT_VALIDATE_lcar_INDEX
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_VALIDATE_GX_LENGTH
+   *
+   * @description:
+   *   The number of tables checked in this module.  Use it as a parameter
+   *   for the `table-length' argument of function @FT_TrueTypeGX_Validate.
+   */
+#define FT_VALIDATE_GX_LENGTH     (FT_VALIDATE_GX_LAST_INDEX + 1)
+
+  /* */
+
+  /* Up to 0x1000 is used by otvalid.
+     Ox2xxx is reserved for feature OT extension. */
+#define FT_VALIDATE_GX_START 0x4000
+#define FT_VALIDATE_GX_BITFIELD( tag )                  \
+  ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
+
+
+ /**********************************************************************
+  *
+  * @enum:
+  *    FT_VALIDATE_GXXXX
+  *
+  * @description:
+  *    A list of bit-field constants used with @FT_TrueTypeGX_Validate to
+  *    indicate which TrueTypeGX/AAT Type tables should be validated.
+  *
+  * @values:
+  *    FT_VALIDATE_feat ::
+  *      Validate `feat' table.
+  *
+  *    FT_VALIDATE_mort ::
+  *      Validate `mort' table.
+  *
+  *    FT_VALIDATE_morx ::
+  *      Validate `morx' table.
+  *
+  *    FT_VALIDATE_bsln ::
+  *      Validate `bsln' table.
+  *
+  *    FT_VALIDATE_just ::
+  *      Validate `just' table.
+  *
+  *    FT_VALIDATE_kern ::
+  *      Validate `kern' table.
+  *
+  *    FT_VALIDATE_opbd ::
+  *      Validate `opbd' table.
+  *
+  *    FT_VALIDATE_trak ::
+  *      Validate `trak' table.
+  *
+  *    FT_VALIDATE_prop ::
+  *      Validate `prop' table.
+  *
+  *    FT_VALIDATE_lcar ::
+  *      Validate `lcar' table.
+  *
+  *    FT_VALIDATE_GX ::
+  *      Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
+  *      opbd, trak, prop and lcar).
+  *
+  */
+
+#define FT_VALIDATE_feat  FT_VALIDATE_GX_BITFIELD( feat )
+#define FT_VALIDATE_mort  FT_VALIDATE_GX_BITFIELD( mort )
+#define FT_VALIDATE_morx  FT_VALIDATE_GX_BITFIELD( morx )
+#define FT_VALIDATE_bsln  FT_VALIDATE_GX_BITFIELD( bsln )
+#define FT_VALIDATE_just  FT_VALIDATE_GX_BITFIELD( just )
+#define FT_VALIDATE_kern  FT_VALIDATE_GX_BITFIELD( kern )
+#define FT_VALIDATE_opbd  FT_VALIDATE_GX_BITFIELD( opbd )
+#define FT_VALIDATE_trak  FT_VALIDATE_GX_BITFIELD( trak )
+#define FT_VALIDATE_prop  FT_VALIDATE_GX_BITFIELD( prop )
+#define FT_VALIDATE_lcar  FT_VALIDATE_GX_BITFIELD( lcar )
+
+#define FT_VALIDATE_GX  ( FT_VALIDATE_feat | \
+                          FT_VALIDATE_mort | \
+                          FT_VALIDATE_morx | \
+                          FT_VALIDATE_bsln | \
+                          FT_VALIDATE_just | \
+                          FT_VALIDATE_kern | \
+                          FT_VALIDATE_opbd | \
+                          FT_VALIDATE_trak | \
+                          FT_VALIDATE_prop | \
+                          FT_VALIDATE_lcar )
+
+
+  /* */
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_TrueTypeGX_Validate
+  *
+  * @description:
+  *    Validate various TrueTypeGX tables to assure that all offsets and
+  *    indices are valid.  The idea is that a higher-level library which
+  *    actually does the text layout can access those tables without
+  *    error checking (which can be quite time consuming).
+  *
+  * @input:
+  *    face ::
+  *       A handle to the input face.
+  *
+  *    validation_flags ::
+  *       A bit field which specifies the tables to be validated.  See
+  *       @FT_VALIDATE_GXXXX for possible values.
+  *
+  *    table_length ::
+  *       The size of the `tables' array.  Normally, @FT_VALIDATE_GX_LENGTH
+  *       should be passed.
+  *
+  * @output:
+  *    tables ::
+  *       The array where all validated sfnt tables are stored.
+  *       The array itself must be allocated by a client.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   This function only works with TrueTypeGX fonts, returning an error
+  *   otherwise.
+  *
+  *   After use, the application should deallocate the buffers pointed to by
+  *   each `tables' element, by calling @FT_TrueTypeGX_Free.  A NULL value
+  *   indicates that the table either doesn't exist in the font, the
+  *   application hasn't asked for validation, or the validator doesn't have
+  *   the ability to validate the sfnt table.
+  */
+  FT_EXPORT( FT_Error )
+  FT_TrueTypeGX_Validate( FT_Face   face,
+                          FT_UInt   validation_flags,
+                          FT_Bytes  tables[FT_VALIDATE_GX_LENGTH],
+                          FT_UInt   table_length );
+
+
+  /* */
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_TrueTypeGX_Free
+  *
+  * @description:
+  *    Free the buffer allocated by TrueTypeGX validator.
+  *
+  * @input:
+  *    face ::
+  *       A handle to the input face.
+  *
+  *    table ::
+  *       The pointer to the buffer allocated by
+  *       @FT_TrueTypeGX_Validate.
+  *
+  * @note:
+  *   This function must be used to free the buffer allocated by
+  *   @FT_TrueTypeGX_Validate only.
+  */
+  FT_EXPORT( void )
+  FT_TrueTypeGX_Free( FT_Face   face,
+                      FT_Bytes  table );
+
+
+  /* */
+
+ /**********************************************************************
+  *
+  * @enum:
+  *    FT_VALIDATE_CKERNXXX
+  *
+  * @description:
+  *    A list of bit-field constants used with @FT_ClassicKern_Validate
+  *    to indicate the classic kern dialect or dialects.  If the selected
+  *    type doesn't fit, @FT_ClassicKern_Validate regards the table as
+  *    invalid.
+  *
+  * @values:
+  *    FT_VALIDATE_MS ::
+  *      Handle the `kern' table as a classic Microsoft kern table.
+  *
+  *    FT_VALIDATE_APPLE ::
+  *      Handle the `kern' table as a classic Apple kern table.
+  *
+  *    FT_VALIDATE_CKERN ::
+  *      Handle the `kern' as either classic Apple or Microsoft kern table.
+  */
+#define FT_VALIDATE_MS     ( FT_VALIDATE_GX_START << 0 )
+#define FT_VALIDATE_APPLE  ( FT_VALIDATE_GX_START << 1 )
+
+#define FT_VALIDATE_CKERN  ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
+
+
+  /* */
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_ClassicKern_Validate
+  *
+  * @description:
+  *    Validate classic (16-bit format) kern table to assure that the offsets
+  *    and indices are valid.  The idea is that a higher-level library which
+  *    actually does the text layout can access those tables without error
+  *    checking (which can be quite time consuming).
+  *
+  *    The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
+  *    the new 32-bit format and the classic 16-bit format, while
+  *    FT_ClassicKern_Validate only supports the classic 16-bit format.
+  *
+  * @input:
+  *    face ::
+  *       A handle to the input face.
+  *
+  *    validation_flags ::
+  *       A bit field which specifies the dialect to be validated.  See
+  *       @FT_VALIDATE_CKERNXXX for possible values.
+  *
+  * @output:
+  *    ckern_table ::
+  *       A pointer to the kern table.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   After use, the application should deallocate the buffers pointed to by
+  *   `ckern_table', by calling @FT_ClassicKern_Free.  A NULL value
+  *   indicates that the table doesn't exist in the font.
+  */
+  FT_EXPORT( FT_Error )
+  FT_ClassicKern_Validate( FT_Face    face,
+                           FT_UInt    validation_flags,
+                           FT_Bytes  *ckern_table );
+
+
+  /* */
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_ClassicKern_Free
+  *
+  * @description:
+  *    Free the buffer allocated by classic Kern validator.
+  *
+  * @input:
+  *    face ::
+  *       A handle to the input face.
+  *
+  *    table ::
+  *       The pointer to the buffer that is allocated by
+  *       @FT_ClassicKern_Validate.
+  *
+  * @note:
+  *   This function must be used to free the buffer allocated by
+  *   @FT_ClassicKern_Validate only.
+  */
+  FT_EXPORT( void )
+  FT_ClassicKern_Free( FT_Face   face,
+                       FT_Bytes  table );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGXVAL_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftgzip.h b/core/include/thirdparties/freetype/freetype/ftgzip.h
new file mode 100644
index 0000000..87155a4
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftgzip.h
@@ -0,0 +1,102 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftgzip.h                                                               */
+/*                                                                         */
+/*    Gzip-compressed stream support.                                      */
+/*                                                                         */
+/*  Copyright 2002, 2003, 2004, 2006 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTGZIP_H__
+#define __FTGZIP_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    gzip                                                               */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    GZIP Streams                                                       */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Using gzip-compressed font files.                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of Gzip-specific functions.  */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+ /************************************************************************
+  *
+  * @function:
+  *   FT_Stream_OpenGzip
+  *
+  * @description:
+  *   Open a new stream to parse gzip-compressed font files.  This is
+  *   mainly used to support the compressed `*.pcf.gz' fonts that come
+  *   with XFree86.
+  *
+  * @input:
+  *   stream ::
+  *     The target embedding stream.
+  *
+  *   source ::
+  *     The source stream.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   The source stream must be opened _before_ calling this function.
+  *
+  *   Calling the internal function `FT_Stream_Close' on the new stream will
+  *   *not* call `FT_Stream_Close' on the source stream.  None of the stream
+  *   objects will be released to the heap.
+  *
+  *   The stream implementation is very basic and resets the decompression
+  *   process each time seeking backwards is needed within the stream.
+  *
+  *   In certain builds of the library, gzip compression recognition is
+  *   automatically handled when calling @FT_New_Face or @FT_Open_Face.
+  *   This means that if no font driver is capable of handling the raw
+  *   compressed file, the library will try to open a gzipped stream from
+  *   it and re-open the face with it.
+  *
+  *   This function may return `FT_Err_Unimplemented_Feature' if your build
+  *   of FreeType was not compiled with zlib support.
+  */
+  FT_EXPORT( FT_Error )
+  FT_Stream_OpenGzip( FT_Stream  stream,
+                      FT_Stream  source );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGZIP_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftimage.h b/core/include/thirdparties/freetype/freetype/ftimage.h
new file mode 100644
index 0000000..401cb38
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftimage.h
@@ -0,0 +1,1322 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftimage.h                                                              */
+/*                                                                         */
+/*    FreeType glyph image formats and default raster interface            */
+/*    (specification).                                                     */
+/*                                                                         */
+/*  Copyright 1996-2010, 2013 by                                           */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Note: A `raster' is simply a scan-line converter, used to render      */
+  /*       FT_Outlines into FT_Bitmaps.                                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTIMAGE_H__
+#define __FTIMAGE_H__
+
+
+  /* _STANDALONE_ is from ftgrays.c */
+#ifndef _STANDALONE_
+#include "../ft2build.h"
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    basic_types                                                        */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Pos                                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The type FT_Pos is used to store vectorial coordinates.  Depending */
+  /*    on the context, these can represent distances in integer font      */
+  /*    units, or 16.16, or 26.6 fixed-point pixel coordinates.            */
+  /*                                                                       */
+  typedef signed long  FT_Pos;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Vector                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple structure used to store a 2D vector; coordinates are of   */
+  /*    the FT_Pos type.                                                   */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    x :: The horizontal coordinate.                                    */
+  /*    y :: The vertical coordinate.                                      */
+  /*                                                                       */
+  typedef struct  FT_Vector_
+  {
+    FT_Pos  x;
+    FT_Pos  y;
+
+  } FT_Vector;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_BBox                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to hold an outline's bounding box, i.e., the      */
+  /*    coordinates of its extrema in the horizontal and vertical          */
+  /*    directions.                                                        */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    xMin :: The horizontal minimum (left-most).                        */
+  /*                                                                       */
+  /*    yMin :: The vertical minimum (bottom-most).                        */
+  /*                                                                       */
+  /*    xMax :: The horizontal maximum (right-most).                       */
+  /*                                                                       */
+  /*    yMax :: The vertical maximum (top-most).                           */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The bounding box is specified with the coordinates of the lower    */
+  /*    left and the upper right corner.  In PostScript, those values are  */
+  /*    often called (llx,lly) and (urx,ury), respectively.                */
+  /*                                                                       */
+  /*    If `yMin' is negative, this value gives the glyph's descender.     */
+  /*    Otherwise, the glyph doesn't descend below the baseline.           */
+  /*    Similarly, if `ymax' is positive, this value gives the glyph's     */
+  /*    ascender.                                                          */
+  /*                                                                       */
+  /*    `xMin' gives the horizontal distance from the glyph's origin to    */
+  /*    the left edge of the glyph's bounding box.  If `xMin' is negative, */
+  /*    the glyph extends to the left of the origin.                       */
+  /*                                                                       */
+  typedef struct  FT_BBox_
+  {
+    FT_Pos  xMin, yMin;
+    FT_Pos  xMax, yMax;
+
+  } FT_BBox;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    FT_Pixel_Mode                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An enumeration type used to describe the format of pixels in a     */
+  /*    given bitmap.  Note that additional formats may be added in the    */
+  /*    future.                                                            */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    FT_PIXEL_MODE_NONE ::                                              */
+  /*      Value~0 is reserved.                                             */
+  /*                                                                       */
+  /*    FT_PIXEL_MODE_MONO ::                                              */
+  /*      A monochrome bitmap, using 1~bit per pixel.  Note that pixels    */
+  /*      are stored in most-significant order (MSB), which means that     */
+  /*      the left-most pixel in a byte has value 128.                     */
+  /*                                                                       */
+  /*    FT_PIXEL_MODE_GRAY ::                                              */
+  /*      An 8-bit bitmap, generally used to represent anti-aliased glyph  */
+  /*      images.  Each pixel is stored in one byte.  Note that the number */
+  /*      of `gray' levels is stored in the `num_grays' field of the       */
+  /*      @FT_Bitmap structure (it generally is 256).                      */
+  /*                                                                       */
+  /*    FT_PIXEL_MODE_GRAY2 ::                                             */
+  /*      A 2-bit per pixel bitmap, used to represent embedded             */
+  /*      anti-aliased bitmaps in font files according to the OpenType     */
+  /*      specification.  We haven't found a single font using this        */
+  /*      format, however.                                                 */
+  /*                                                                       */
+  /*    FT_PIXEL_MODE_GRAY4 ::                                             */
+  /*      A 4-bit per pixel bitmap, representing embedded anti-aliased     */
+  /*      bitmaps in font files according to the OpenType specification.   */
+  /*      We haven't found a single font using this format, however.       */
+  /*                                                                       */
+  /*    FT_PIXEL_MODE_LCD ::                                               */
+  /*      An 8-bit bitmap, representing RGB or BGR decimated glyph images  */
+  /*      used for display on LCD displays; the bitmap is three times      */
+  /*      wider than the original glyph image.  See also                   */
+  /*      @FT_RENDER_MODE_LCD.                                             */
+  /*                                                                       */
+  /*    FT_PIXEL_MODE_LCD_V ::                                             */
+  /*      An 8-bit bitmap, representing RGB or BGR decimated glyph images  */
+  /*      used for display on rotated LCD displays; the bitmap is three    */
+  /*      times taller than the original glyph image.  See also            */
+  /*      @FT_RENDER_MODE_LCD_V.                                           */
+  /*                                                                       */
+  /*    FT_PIXEL_MODE_BGRA ::                                              */
+  /*      An image with four 8-bit channels per pixel, representing a      */
+  /*      color image (such as emoticons) with alpha channel.  For each    */
+  /*      pixel, the format is BGRA, which means, the blue channel comes   */
+  /*      first in memory.  The color channels are pre-multiplied and in   */
+  /*      the sRGB colorspace.  For example, full red at half-translucent  */
+  /*      opacity will be represented as `00,00,80,80', not `00,00,FF,80'. */
+  /*      See also @FT_LOAD_COLOR.                                         */
+  /*                                                                       */
+  typedef enum  FT_Pixel_Mode_
+  {
+    FT_PIXEL_MODE_NONE = 0,
+    FT_PIXEL_MODE_MONO,
+    FT_PIXEL_MODE_GRAY,
+    FT_PIXEL_MODE_GRAY2,
+    FT_PIXEL_MODE_GRAY4,
+    FT_PIXEL_MODE_LCD,
+    FT_PIXEL_MODE_LCD_V,
+    FT_PIXEL_MODE_BGRA,
+
+    FT_PIXEL_MODE_MAX      /* do not remove */
+
+  } FT_Pixel_Mode;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    ft_pixel_mode_xxx                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A list of deprecated constants.  Use the corresponding             */
+  /*    @FT_Pixel_Mode values instead.                                     */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    ft_pixel_mode_none  :: See @FT_PIXEL_MODE_NONE.                    */
+  /*    ft_pixel_mode_mono  :: See @FT_PIXEL_MODE_MONO.                    */
+  /*    ft_pixel_mode_grays :: See @FT_PIXEL_MODE_GRAY.                    */
+  /*    ft_pixel_mode_pal2  :: See @FT_PIXEL_MODE_GRAY2.                   */
+  /*    ft_pixel_mode_pal4  :: See @FT_PIXEL_MODE_GRAY4.                   */
+  /*                                                                       */
+#define ft_pixel_mode_none   FT_PIXEL_MODE_NONE
+#define ft_pixel_mode_mono   FT_PIXEL_MODE_MONO
+#define ft_pixel_mode_grays  FT_PIXEL_MODE_GRAY
+#define ft_pixel_mode_pal2   FT_PIXEL_MODE_GRAY2
+#define ft_pixel_mode_pal4   FT_PIXEL_MODE_GRAY4
+
+ /* */
+
+#if 0
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    FT_Palette_Mode                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    THIS TYPE IS DEPRECATED.  DO NOT USE IT!                           */
+  /*                                                                       */
+  /*    An enumeration type to describe the format of a bitmap palette,    */
+  /*    used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8.               */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    ft_palette_mode_rgb  :: The palette is an array of 3-byte RGB      */
+  /*                            records.                                   */
+  /*                                                                       */
+  /*    ft_palette_mode_rgba :: The palette is an array of 4-byte RGBA     */
+  /*                            records.                                   */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by       */
+  /*    FreeType, these types are not handled by the library itself.       */
+  /*                                                                       */
+  typedef enum  FT_Palette_Mode_
+  {
+    ft_palette_mode_rgb = 0,
+    ft_palette_mode_rgba,
+
+    ft_palette_mode_max   /* do not remove */
+
+  } FT_Palette_Mode;
+
+  /* */
+
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Bitmap                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to describe a bitmap or pixmap to the raster.     */
+  /*    Note that we now manage pixmaps of various depths through the      */
+  /*    `pixel_mode' field.                                                */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    rows         :: The number of bitmap rows.                         */
+  /*                                                                       */
+  /*    width        :: The number of pixels in bitmap row.                */
+  /*                                                                       */
+  /*    pitch        :: The pitch's absolute value is the number of bytes  */
+  /*                    taken by one bitmap row, including padding.        */
+  /*                    However, the pitch is positive when the bitmap has */
+  /*                    a `down' flow, and negative when it has an `up'    */
+  /*                    flow.  In all cases, the pitch is an offset to add */
+  /*                    to a bitmap pointer in order to go down one row.   */
+  /*                                                                       */
+  /*                    Note that `padding' means the alignment of a       */
+  /*                    bitmap to a byte border, and FreeType functions    */
+  /*                    normally align to the smallest possible integer    */
+  /*                    value.                                             */
+  /*                                                                       */
+  /*                    For the B/W rasterizer, `pitch' is always an even  */
+  /*                    number.                                            */
+  /*                                                                       */
+  /*                    To change the pitch of a bitmap (say, to make it a */
+  /*                    multiple of 4), use @FT_Bitmap_Convert.            */
+  /*                    Alternatively, you might use callback functions to */
+  /*                    directly render to the application's surface; see  */
+  /*                    the file `example2.cpp' in the tutorial for a      */
+  /*                    demonstration.                                     */
+  /*                                                                       */
+  /*    buffer       :: A typeless pointer to the bitmap buffer.  This     */
+  /*                    value should be aligned on 32-bit boundaries in    */
+  /*                    most cases.                                        */
+  /*                                                                       */
+  /*    num_grays    :: This field is only used with                       */
+  /*                    @FT_PIXEL_MODE_GRAY; it gives the number of gray   */
+  /*                    levels used in the bitmap.                         */
+  /*                                                                       */
+  /*    pixel_mode   :: The pixel mode, i.e., how pixel bits are stored.   */
+  /*                    See @FT_Pixel_Mode for possible values.            */
+  /*                                                                       */
+  /*    palette_mode :: This field is intended for paletted pixel modes;   */
+  /*                    it indicates how the palette is stored.  Not       */
+  /*                    used currently.                                    */
+  /*                                                                       */
+  /*    palette      :: A typeless pointer to the bitmap palette; this     */
+  /*                    field is intended for paletted pixel modes.  Not   */
+  /*                    used currently.                                    */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*   For now, the only pixel modes supported by FreeType are mono and    */
+  /*   grays.  However, drivers might be added in the future to support    */
+  /*   more `colorful' options.                                            */
+  /*                                                                       */
+  typedef struct  FT_Bitmap_
+  {
+    int             rows;
+    int             width;
+    int             pitch;
+    unsigned char*  buffer;
+    short           num_grays;
+    char            pixel_mode;
+    char            palette_mode;
+    void*           palette;
+
+  } FT_Bitmap;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    outline_processing                                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Outline                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This structure is used to describe an outline to the scan-line     */
+  /*    converter.                                                         */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    n_contours :: The number of contours in the outline.               */
+  /*                                                                       */
+  /*    n_points   :: The number of points in the outline.                 */
+  /*                                                                       */
+  /*    points     :: A pointer to an array of `n_points' @FT_Vector       */
+  /*                  elements, giving the outline's point coordinates.    */
+  /*                                                                       */
+  /*    tags       :: A pointer to an array of `n_points' chars, giving    */
+  /*                  each outline point's type.                           */
+  /*                                                                       */
+  /*                  If bit~0 is unset, the point is `off' the curve,     */
+  /*                  i.e., a Bézier control point, while it is `on' if    */
+  /*                  set.                                                 */
+  /*                                                                       */
+  /*                  Bit~1 is meaningful for `off' points only.  If set,  */
+  /*                  it indicates a third-order Bézier arc control point; */
+  /*                  and a second-order control point if unset.           */
+  /*                                                                       */
+  /*                  If bit~2 is set, bits 5-7 contain the drop-out mode  */
+  /*                  (as defined in the OpenType specification; the value */
+  /*                  is the same as the argument to the SCANMODE          */
+  /*                  instruction).                                        */
+  /*                                                                       */
+  /*                  Bits 3 and~4 are reserved for internal purposes.     */
+  /*                                                                       */
+  /*    contours   :: An array of `n_contours' shorts, giving the end      */
+  /*                  point of each contour within the outline.  For       */
+  /*                  example, the first contour is defined by the points  */
+  /*                  `0' to `contours[0]', the second one is defined by   */
+  /*                  the points `contours[0]+1' to `contours[1]', etc.    */
+  /*                                                                       */
+  /*    flags      :: A set of bit flags used to characterize the outline  */
+  /*                  and give hints to the scan-converter and hinter on   */
+  /*                  how to convert/grid-fit it.  See @FT_OUTLINE_FLAGS.  */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The B/W rasterizer only checks bit~2 in the `tags' array for the   */
+  /*    first point of each contour.  The drop-out mode as given with      */
+  /*    @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and       */
+  /*    @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden.           */
+  /*                                                                       */
+  typedef struct  FT_Outline_
+  {
+    short       n_contours;      /* number of contours in glyph        */
+    short       n_points;        /* number of points in the glyph      */
+
+    FT_Vector*  points;          /* the outline's points               */
+    char*       tags;            /* the points flags                   */
+    short*      contours;        /* the contour end points             */
+
+    int         flags;           /* outline masks                      */
+
+  } FT_Outline;
+
+  /* Following limits must be consistent with */
+  /* FT_Outline.{n_contours,n_points}         */
+#define FT_OUTLINE_CONTOURS_MAX  SHRT_MAX
+#define FT_OUTLINE_POINTS_MAX    SHRT_MAX
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    FT_OUTLINE_FLAGS                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A list of bit-field constants use for the flags in an outline's    */
+  /*    `flags' field.                                                     */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    FT_OUTLINE_NONE ::                                                 */
+  /*      Value~0 is reserved.                                             */
+  /*                                                                       */
+  /*    FT_OUTLINE_OWNER ::                                                */
+  /*      If set, this flag indicates that the outline's field arrays      */
+  /*      (i.e., `points', `flags', and `contours') are `owned' by the     */
+  /*      outline object, and should thus be freed when it is destroyed.   */
+  /*                                                                       */
+  /*    FT_OUTLINE_EVEN_ODD_FILL ::                                        */
+  /*      By default, outlines are filled using the non-zero winding rule. */
+  /*      If set to 1, the outline will be filled using the even-odd fill  */
+  /*      rule (only works with the smooth rasterizer).                    */
+  /*                                                                       */
+  /*    FT_OUTLINE_REVERSE_FILL ::                                         */
+  /*      By default, outside contours of an outline are oriented in       */
+  /*      clock-wise direction, as defined in the TrueType specification.  */
+  /*      This flag is set if the outline uses the opposite direction      */
+  /*      (typically for Type~1 fonts).  This flag is ignored by the scan  */
+  /*      converter.                                                       */
+  /*                                                                       */
+  /*    FT_OUTLINE_IGNORE_DROPOUTS ::                                      */
+  /*      By default, the scan converter will try to detect drop-outs in   */
+  /*      an outline and correct the glyph bitmap to ensure consistent     */
+  /*      shape continuity.  If set, this flag hints the scan-line         */
+  /*      converter to ignore such cases.  See below for more information. */
+  /*                                                                       */
+  /*    FT_OUTLINE_SMART_DROPOUTS ::                                       */
+  /*      Select smart dropout control.  If unset, use simple dropout      */
+  /*      control.  Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See    */
+  /*      below for more information.                                      */
+  /*                                                                       */
+  /*    FT_OUTLINE_INCLUDE_STUBS ::                                        */
+  /*      If set, turn pixels on for `stubs', otherwise exclude them.      */
+  /*      Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See below for    */
+  /*      more information.                                                */
+  /*                                                                       */
+  /*    FT_OUTLINE_HIGH_PRECISION ::                                       */
+  /*      This flag indicates that the scan-line converter should try to   */
+  /*      convert this outline to bitmaps with the highest possible        */
+  /*      quality.  It is typically set for small character sizes.  Note   */
+  /*      that this is only a hint that might be completely ignored by a   */
+  /*      given scan-converter.                                            */
+  /*                                                                       */
+  /*    FT_OUTLINE_SINGLE_PASS ::                                          */
+  /*      This flag is set to force a given scan-converter to only use a   */
+  /*      single pass over the outline to render a bitmap glyph image.     */
+  /*      Normally, it is set for very large character sizes.  It is only  */
+  /*      a hint that might be completely ignored by a given               */
+  /*      scan-converter.                                                  */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */
+  /*    and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth            */
+  /*    rasterizer.                                                        */
+  /*                                                                       */
+  /*    There exists a second mechanism to pass the drop-out mode to the   */
+  /*    B/W rasterizer; see the `tags' field in @FT_Outline.               */
+  /*                                                                       */
+  /*    Please refer to the description of the `SCANTYPE' instruction in   */
+  /*    the OpenType specification (in file `ttinst1.doc') how simple      */
+  /*    drop-outs, smart drop-outs, and stubs are defined.                 */
+  /*                                                                       */
+#define FT_OUTLINE_NONE             0x0
+#define FT_OUTLINE_OWNER            0x1
+#define FT_OUTLINE_EVEN_ODD_FILL    0x2
+#define FT_OUTLINE_REVERSE_FILL     0x4
+#define FT_OUTLINE_IGNORE_DROPOUTS  0x8
+#define FT_OUTLINE_SMART_DROPOUTS   0x10
+#define FT_OUTLINE_INCLUDE_STUBS    0x20
+
+#define FT_OUTLINE_HIGH_PRECISION   0x100
+#define FT_OUTLINE_SINGLE_PASS      0x200
+
+
+ /*************************************************************************
+  *
+  * @enum:
+  *   ft_outline_flags
+  *
+  * @description:
+  *   These constants are deprecated.  Please use the corresponding
+  *   @FT_OUTLINE_FLAGS values.
+  *
+  * @values:
+  *   ft_outline_none            :: See @FT_OUTLINE_NONE.
+  *   ft_outline_owner           :: See @FT_OUTLINE_OWNER.
+  *   ft_outline_even_odd_fill   :: See @FT_OUTLINE_EVEN_ODD_FILL.
+  *   ft_outline_reverse_fill    :: See @FT_OUTLINE_REVERSE_FILL.
+  *   ft_outline_ignore_dropouts :: See @FT_OUTLINE_IGNORE_DROPOUTS.
+  *   ft_outline_high_precision  :: See @FT_OUTLINE_HIGH_PRECISION.
+  *   ft_outline_single_pass     :: See @FT_OUTLINE_SINGLE_PASS.
+  */
+#define ft_outline_none             FT_OUTLINE_NONE
+#define ft_outline_owner            FT_OUTLINE_OWNER
+#define ft_outline_even_odd_fill    FT_OUTLINE_EVEN_ODD_FILL
+#define ft_outline_reverse_fill     FT_OUTLINE_REVERSE_FILL
+#define ft_outline_ignore_dropouts  FT_OUTLINE_IGNORE_DROPOUTS
+#define ft_outline_high_precision   FT_OUTLINE_HIGH_PRECISION
+#define ft_outline_single_pass      FT_OUTLINE_SINGLE_PASS
+
+  /* */
+
+#define FT_CURVE_TAG( flag )  ( flag & 3 )
+
+#define FT_CURVE_TAG_ON            1
+#define FT_CURVE_TAG_CONIC         0
+#define FT_CURVE_TAG_CUBIC         2
+
+#define FT_CURVE_TAG_HAS_SCANMODE  4
+
+#define FT_CURVE_TAG_TOUCH_X       8  /* reserved for the TrueType hinter */
+#define FT_CURVE_TAG_TOUCH_Y      16  /* reserved for the TrueType hinter */
+
+#define FT_CURVE_TAG_TOUCH_BOTH    ( FT_CURVE_TAG_TOUCH_X | \
+                                     FT_CURVE_TAG_TOUCH_Y )
+
+#define FT_Curve_Tag_On       FT_CURVE_TAG_ON
+#define FT_Curve_Tag_Conic    FT_CURVE_TAG_CONIC
+#define FT_Curve_Tag_Cubic    FT_CURVE_TAG_CUBIC
+#define FT_Curve_Tag_Touch_X  FT_CURVE_TAG_TOUCH_X
+#define FT_Curve_Tag_Touch_Y  FT_CURVE_TAG_TOUCH_Y
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Outline_MoveToFunc                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function pointer type used to describe the signature of a `move  */
+  /*    to' function during outline walking/decomposition.                 */
+  /*                                                                       */
+  /*    A `move to' is emitted to start a new contour in an outline.       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    to   :: A pointer to the target point of the `move to'.            */
+  /*                                                                       */
+  /*    user :: A typeless pointer which is passed from the caller of the  */
+  /*            decomposition function.                                    */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    Error code.  0~means success.                                      */
+  /*                                                                       */
+  typedef int
+  (*FT_Outline_MoveToFunc)( const FT_Vector*  to,
+                            void*             user );
+
+#define FT_Outline_MoveTo_Func  FT_Outline_MoveToFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Outline_LineToFunc                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function pointer type used to describe the signature of a `line  */
+  /*    to' function during outline walking/decomposition.                 */
+  /*                                                                       */
+  /*    A `line to' is emitted to indicate a segment in the outline.       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    to   :: A pointer to the target point of the `line to'.            */
+  /*                                                                       */
+  /*    user :: A typeless pointer which is passed from the caller of the  */
+  /*            decomposition function.                                    */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    Error code.  0~means success.                                      */
+  /*                                                                       */
+  typedef int
+  (*FT_Outline_LineToFunc)( const FT_Vector*  to,
+                            void*             user );
+
+#define FT_Outline_LineTo_Func  FT_Outline_LineToFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Outline_ConicToFunc                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function pointer type used to describe the signature of a `conic */
+  /*    to' function during outline walking or decomposition.              */
+  /*                                                                       */
+  /*    A `conic to' is emitted to indicate a second-order Bézier arc in   */
+  /*    the outline.                                                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    control :: An intermediate control point between the last position */
+  /*               and the new target in `to'.                             */
+  /*                                                                       */
+  /*    to      :: A pointer to the target end point of the conic arc.     */
+  /*                                                                       */
+  /*    user    :: A typeless pointer which is passed from the caller of   */
+  /*               the decomposition function.                             */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    Error code.  0~means success.                                      */
+  /*                                                                       */
+  typedef int
+  (*FT_Outline_ConicToFunc)( const FT_Vector*  control,
+                             const FT_Vector*  to,
+                             void*             user );
+
+#define FT_Outline_ConicTo_Func  FT_Outline_ConicToFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Outline_CubicToFunc                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function pointer type used to describe the signature of a `cubic */
+  /*    to' function during outline walking or decomposition.              */
+  /*                                                                       */
+  /*    A `cubic to' is emitted to indicate a third-order Bézier arc.      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    control1 :: A pointer to the first Bézier control point.           */
+  /*                                                                       */
+  /*    control2 :: A pointer to the second Bézier control point.          */
+  /*                                                                       */
+  /*    to       :: A pointer to the target end point.                     */
+  /*                                                                       */
+  /*    user     :: A typeless pointer which is passed from the caller of  */
+  /*                the decomposition function.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    Error code.  0~means success.                                      */
+  /*                                                                       */
+  typedef int
+  (*FT_Outline_CubicToFunc)( const FT_Vector*  control1,
+                             const FT_Vector*  control2,
+                             const FT_Vector*  to,
+                             void*             user );
+
+#define FT_Outline_CubicTo_Func  FT_Outline_CubicToFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Outline_Funcs                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure to hold various function pointers used during outline  */
+  /*    decomposition in order to emit segments, conic, and cubic Béziers. */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    move_to  :: The `move to' emitter.                                 */
+  /*                                                                       */
+  /*    line_to  :: The segment emitter.                                   */
+  /*                                                                       */
+  /*    conic_to :: The second-order Bézier arc emitter.                   */
+  /*                                                                       */
+  /*    cubic_to :: The third-order Bézier arc emitter.                    */
+  /*                                                                       */
+  /*    shift    :: The shift that is applied to coordinates before they   */
+  /*                are sent to the emitter.                               */
+  /*                                                                       */
+  /*    delta    :: The delta that is applied to coordinates before they   */
+  /*                are sent to the emitter, but after the shift.          */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The point coordinates sent to the emitters are the transformed     */
+  /*    version of the original coordinates (this is important for high    */
+  /*    accuracy during scan-conversion).  The transformation is simple:   */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      x' = (x << shift) - delta                                        */
+  /*      y' = (x << shift) - delta                                        */
+  /*    }                                                                  */
+  /*                                                                       */
+  /*    Set the values of `shift' and `delta' to~0 to get the original     */
+  /*    point coordinates.                                                 */
+  /*                                                                       */
+  typedef struct  FT_Outline_Funcs_
+  {
+    FT_Outline_MoveToFunc   move_to;
+    FT_Outline_LineToFunc   line_to;
+    FT_Outline_ConicToFunc  conic_to;
+    FT_Outline_CubicToFunc  cubic_to;
+
+    int                     shift;
+    FT_Pos                  delta;
+
+  } FT_Outline_Funcs;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    basic_types                                                        */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_IMAGE_TAG                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This macro converts four-letter tags to an unsigned long type.     */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Since many 16-bit compilers don't like 32-bit enumerations, you    */
+  /*    should redefine this macro in case of problems to something like   */
+  /*    this:                                                              */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  value         */
+  /*    }                                                                  */
+  /*                                                                       */
+  /*    to get a simple enumeration without assigning special numbers.     */
+  /*                                                                       */
+#ifndef FT_IMAGE_TAG
+#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  \
+          value = ( ( (unsigned long)_x1 << 24 ) | \
+                    ( (unsigned long)_x2 << 16 ) | \
+                    ( (unsigned long)_x3 << 8  ) | \
+                      (unsigned long)_x4         )
+#endif /* FT_IMAGE_TAG */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    FT_Glyph_Format                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An enumeration type used to describe the format of a given glyph   */
+  /*    image.  Note that this version of FreeType only supports two image */
+  /*    formats, even though future font drivers will be able to register  */
+  /*    their own format.                                                  */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    FT_GLYPH_FORMAT_NONE ::                                            */
+  /*      The value~0 is reserved.                                         */
+  /*                                                                       */
+  /*    FT_GLYPH_FORMAT_COMPOSITE ::                                       */
+  /*      The glyph image is a composite of several other images.  This    */
+  /*      format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to   */
+  /*      report compound glyphs (like accented characters).               */
+  /*                                                                       */
+  /*    FT_GLYPH_FORMAT_BITMAP ::                                          */
+  /*      The glyph image is a bitmap, and can be described as an          */
+  /*      @FT_Bitmap.  You generally need to access the `bitmap' field of  */
+  /*      the @FT_GlyphSlotRec structure to read it.                       */
+  /*                                                                       */
+  /*    FT_GLYPH_FORMAT_OUTLINE ::                                         */
+  /*      The glyph image is a vectorial outline made of line segments     */
+  /*      and Bézier arcs; it can be described as an @FT_Outline; you      */
+  /*      generally want to access the `outline' field of the              */
+  /*      @FT_GlyphSlotRec structure to read it.                           */
+  /*                                                                       */
+  /*    FT_GLYPH_FORMAT_PLOTTER ::                                         */
+  /*      The glyph image is a vectorial path with no inside and outside   */
+  /*      contours.  Some Type~1 fonts, like those in the Hershey family,  */
+  /*      contain glyphs in this format.  These are described as           */
+  /*      @FT_Outline, but FreeType isn't currently capable of rendering   */
+  /*      them correctly.                                                  */
+  /*                                                                       */
+  typedef enum  FT_Glyph_Format_
+  {
+    FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ),
+
+    FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
+    FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP,    'b', 'i', 't', 's' ),
+    FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE,   'o', 'u', 't', 'l' ),
+    FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER,   'p', 'l', 'o', 't' )
+
+  } FT_Glyph_Format;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    ft_glyph_format_xxx                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A list of deprecated constants.  Use the corresponding             */
+  /*    @FT_Glyph_Format values instead.                                   */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    ft_glyph_format_none      :: See @FT_GLYPH_FORMAT_NONE.            */
+  /*    ft_glyph_format_composite :: See @FT_GLYPH_FORMAT_COMPOSITE.       */
+  /*    ft_glyph_format_bitmap    :: See @FT_GLYPH_FORMAT_BITMAP.          */
+  /*    ft_glyph_format_outline   :: See @FT_GLYPH_FORMAT_OUTLINE.         */
+  /*    ft_glyph_format_plotter   :: See @FT_GLYPH_FORMAT_PLOTTER.         */
+  /*                                                                       */
+#define ft_glyph_format_none       FT_GLYPH_FORMAT_NONE
+#define ft_glyph_format_composite  FT_GLYPH_FORMAT_COMPOSITE
+#define ft_glyph_format_bitmap     FT_GLYPH_FORMAT_BITMAP
+#define ft_glyph_format_outline    FT_GLYPH_FORMAT_OUTLINE
+#define ft_glyph_format_plotter    FT_GLYPH_FORMAT_PLOTTER
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****            R A S T E R   D E F I N I T I O N S                *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* A raster is a scan converter, in charge of rendering an outline into  */
+  /* a a bitmap.  This section contains the public API for rasters.        */
+  /*                                                                       */
+  /* Note that in FreeType 2, all rasters are now encapsulated within      */
+  /* specific modules called `renderers'.  See `freetype/ftrender.h' for   */
+  /* more details on renderers.                                            */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    raster                                                             */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Scanline Converter                                                 */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    How vectorial outlines are converted into bitmaps and pixmaps.     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains technical definitions.                       */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Raster                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle (pointer) to a raster object.  Each object can be used    */
+  /*    independently to convert an outline into a bitmap or pixmap.       */
+  /*                                                                       */
+  typedef struct FT_RasterRec_*  FT_Raster;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Span                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a single span of gray (or black) pixels  */
+  /*    when rendering a monochrome or anti-aliased bitmap.                */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    x        :: The span's horizontal start position.                  */
+  /*                                                                       */
+  /*    len      :: The span's length in pixels.                           */
+  /*                                                                       */
+  /*    coverage :: The span color/coverage, ranging from 0 (background)   */
+  /*                to 255 (foreground).  Only used for anti-aliased       */
+  /*                rendering.                                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This structure is used by the span drawing callback type named     */
+  /*    @FT_SpanFunc which takes the y~coordinate of the span as a         */
+  /*    a parameter.                                                       */
+  /*                                                                       */
+  /*    The coverage value is always between 0 and 255.  If you want less  */
+  /*    gray values, the callback function has to reduce them.             */
+  /*                                                                       */
+  typedef struct  FT_Span_
+  {
+    short           x;
+    unsigned short  len;
+    unsigned char   coverage;
+
+  } FT_Span;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_SpanFunc                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used as a call-back by the anti-aliased renderer in     */
+  /*    order to let client applications draw themselves the gray pixel    */
+  /*    spans on each scan line.                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    y     :: The scanline's y~coordinate.                              */
+  /*                                                                       */
+  /*    count :: The number of spans to draw on this scanline.             */
+  /*                                                                       */
+  /*    spans :: A table of `count' spans to draw on the scanline.         */
+  /*                                                                       */
+  /*    user  :: User-supplied data that is passed to the callback.        */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This callback allows client applications to directly render the    */
+  /*    gray spans of the anti-aliased bitmap to any kind of surfaces.     */
+  /*                                                                       */
+  /*    This can be used to write anti-aliased outlines directly to a      */
+  /*    given background bitmap, and even perform translucency.            */
+  /*                                                                       */
+  /*    Note that the `count' field cannot be greater than a fixed value   */
+  /*    defined by the `FT_MAX_GRAY_SPANS' configuration macro in          */
+  /*    `ftoption.h'.  By default, this value is set to~32, which means    */
+  /*    that if there are more than 32~spans on a given scanline, the      */
+  /*    callback is called several times with the same `y' parameter in    */
+  /*    order to draw all callbacks.                                       */
+  /*                                                                       */
+  /*    Otherwise, the callback is only called once per scan-line, and     */
+  /*    only for those scanlines that do have `gray' pixels on them.       */
+  /*                                                                       */
+  typedef void
+  (*FT_SpanFunc)( int             y,
+                  int             count,
+                  const FT_Span*  spans,
+                  void*           user );
+
+#define FT_Raster_Span_Func  FT_SpanFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Raster_BitTest_Func                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    THIS TYPE IS DEPRECATED.  DO NOT USE IT.                           */
+  /*                                                                       */
+  /*    A function used as a call-back by the monochrome scan-converter    */
+  /*    to test whether a given target pixel is already set to the drawing */
+  /*    `color'.  These tests are crucial to implement drop-out control    */
+  /*    per-se the TrueType spec.                                          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    y     :: The pixel's y~coordinate.                                 */
+  /*                                                                       */
+  /*    x     :: The pixel's x~coordinate.                                 */
+  /*                                                                       */
+  /*    user  :: User-supplied data that is passed to the callback.        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*   1~if the pixel is `set', 0~otherwise.                               */
+  /*                                                                       */
+  typedef int
+  (*FT_Raster_BitTest_Func)( int    y,
+                             int    x,
+                             void*  user );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Raster_BitSet_Func                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    THIS TYPE IS DEPRECATED.  DO NOT USE IT.                           */
+  /*                                                                       */
+  /*    A function used as a call-back by the monochrome scan-converter    */
+  /*    to set an individual target pixel.  This is crucial to implement   */
+  /*    drop-out control according to the TrueType specification.          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    y     :: The pixel's y~coordinate.                                 */
+  /*                                                                       */
+  /*    x     :: The pixel's x~coordinate.                                 */
+  /*                                                                       */
+  /*    user  :: User-supplied data that is passed to the callback.        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    1~if the pixel is `set', 0~otherwise.                              */
+  /*                                                                       */
+  typedef void
+  (*FT_Raster_BitSet_Func)( int    y,
+                            int    x,
+                            void*  user );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    FT_RASTER_FLAG_XXX                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A list of bit flag constants as used in the `flags' field of a     */
+  /*    @FT_Raster_Params structure.                                       */
+  /*                                                                       */
+  /* <Values>                                                              */
+  /*    FT_RASTER_FLAG_DEFAULT :: This value is 0.                         */
+  /*                                                                       */
+  /*    FT_RASTER_FLAG_AA      :: This flag is set to indicate that an     */
+  /*                              anti-aliased glyph image should be       */
+  /*                              generated.  Otherwise, it will be        */
+  /*                              monochrome (1-bit).                      */
+  /*                                                                       */
+  /*    FT_RASTER_FLAG_DIRECT  :: This flag is set to indicate direct      */
+  /*                              rendering.  In this mode, client         */
+  /*                              applications must provide their own span */
+  /*                              callback.  This lets them directly       */
+  /*                              draw or compose over an existing bitmap. */
+  /*                              If this bit is not set, the target       */
+  /*                              pixmap's buffer _must_ be zeroed before  */
+  /*                              rendering.                               */
+  /*                                                                       */
+  /*                              Note that for now, direct rendering is   */
+  /*                              only possible with anti-aliased glyphs.  */
+  /*                                                                       */
+  /*    FT_RASTER_FLAG_CLIP    :: This flag is only used in direct         */
+  /*                              rendering mode.  If set, the output will */
+  /*                              be clipped to a box specified in the     */
+  /*                              `clip_box' field of the                  */
+  /*                              @FT_Raster_Params structure.             */
+  /*                                                                       */
+  /*                              Note that by default, the glyph bitmap   */
+  /*                              is clipped to the target pixmap, except  */
+  /*                              in direct rendering mode where all spans */
+  /*                              are generated if no clipping box is set. */
+  /*                                                                       */
+#define FT_RASTER_FLAG_DEFAULT  0x0
+#define FT_RASTER_FLAG_AA       0x1
+#define FT_RASTER_FLAG_DIRECT   0x2
+#define FT_RASTER_FLAG_CLIP     0x4
+
+  /* deprecated */
+#define ft_raster_flag_default  FT_RASTER_FLAG_DEFAULT
+#define ft_raster_flag_aa       FT_RASTER_FLAG_AA
+#define ft_raster_flag_direct   FT_RASTER_FLAG_DIRECT
+#define ft_raster_flag_clip     FT_RASTER_FLAG_CLIP
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Raster_Params                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure to hold the arguments used by a raster's render        */
+  /*    function.                                                          */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    target      :: The target bitmap.                                  */
+  /*                                                                       */
+  /*    source      :: A pointer to the source glyph image (e.g., an       */
+  /*                   @FT_Outline).                                       */
+  /*                                                                       */
+  /*    flags       :: The rendering flags.                                */
+  /*                                                                       */
+  /*    gray_spans  :: The gray span drawing callback.                     */
+  /*                                                                       */
+  /*    black_spans :: The black span drawing callback.  UNIMPLEMENTED!    */
+  /*                                                                       */
+  /*    bit_test    :: The bit test callback.  UNIMPLEMENTED!              */
+  /*                                                                       */
+  /*    bit_set     :: The bit set callback.  UNIMPLEMENTED!               */
+  /*                                                                       */
+  /*    user        :: User-supplied data that is passed to each drawing   */
+  /*                   callback.                                           */
+  /*                                                                       */
+  /*    clip_box    :: An optional clipping box.  It is only used in       */
+  /*                   direct rendering mode.  Note that coordinates here  */
+  /*                   should be expressed in _integer_ pixels (and not in */
+  /*                   26.6 fixed-point units).                            */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA    */
+  /*    bit flag is set in the `flags' field, otherwise a monochrome       */
+  /*    bitmap is generated.                                               */
+  /*                                                                       */
+  /*    If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the      */
+  /*    raster will call the `gray_spans' callback to draw gray pixel      */
+  /*    spans, in the case of an aa glyph bitmap, it will call             */
+  /*    `black_spans', and `bit_test' and `bit_set' in the case of a       */
+  /*    monochrome bitmap.  This allows direct composition over a          */
+  /*    pre-existing bitmap through user-provided callbacks to perform the */
+  /*    span drawing/composition.                                          */
+  /*                                                                       */
+  /*    Note that the `bit_test' and `bit_set' callbacks are required when */
+  /*    rendering a monochrome bitmap, as they are crucial to implement    */
+  /*    correct drop-out control as defined in the TrueType specification. */
+  /*                                                                       */
+  typedef struct  FT_Raster_Params_
+  {
+    const FT_Bitmap*        target;
+    const void*             source;
+    int                     flags;
+    FT_SpanFunc             gray_spans;
+    FT_SpanFunc             black_spans;  /* doesn't work! */
+    FT_Raster_BitTest_Func  bit_test;     /* doesn't work! */
+    FT_Raster_BitSet_Func   bit_set;      /* doesn't work! */
+    void*                   user;
+    FT_BBox                 clip_box;
+
+  } FT_Raster_Params;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Raster_NewFunc                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to create a new raster object.                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory :: A handle to the memory allocator.                        */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    raster :: A handle to the new raster object.                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    Error code.  0~means success.                                      */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The `memory' parameter is a typeless pointer in order to avoid     */
+  /*    un-wanted dependencies on the rest of the FreeType code.  In       */
+  /*    practice, it is an @FT_Memory object, i.e., a handle to the        */
+  /*    standard FreeType memory allocator.  However, this field can be    */
+  /*    completely ignored by a given raster implementation.               */
+  /*                                                                       */
+  typedef int
+  (*FT_Raster_NewFunc)( void*       memory,
+                        FT_Raster*  raster );
+
+#define FT_Raster_New_Func  FT_Raster_NewFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Raster_DoneFunc                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to destroy a given raster object.                  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    raster :: A handle to the raster object.                           */
+  /*                                                                       */
+  typedef void
+  (*FT_Raster_DoneFunc)( FT_Raster  raster );
+
+#define FT_Raster_Done_Func  FT_Raster_DoneFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Raster_ResetFunc                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    FreeType provides an area of memory called the `render pool',      */
+  /*    available to all registered rasters.  This pool can be freely used */
+  /*    during a given scan-conversion but is shared by all rasters.  Its  */
+  /*    content is thus transient.                                         */
+  /*                                                                       */
+  /*    This function is called each time the render pool changes, or just */
+  /*    after a new raster object is created.                              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    raster    :: A handle to the new raster object.                    */
+  /*                                                                       */
+  /*    pool_base :: The address in memory of the render pool.             */
+  /*                                                                       */
+  /*    pool_size :: The size in bytes of the render pool.                 */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Rasters can ignore the render pool and rely on dynamic memory      */
+  /*    allocation if they want to (a handle to the memory allocator is    */
+  /*    passed to the raster constructor).  However, this is not           */
+  /*    recommended for efficiency purposes.                               */
+  /*                                                                       */
+  typedef void
+  (*FT_Raster_ResetFunc)( FT_Raster       raster,
+                          unsigned char*  pool_base,
+                          unsigned long   pool_size );
+
+#define FT_Raster_Reset_Func  FT_Raster_ResetFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Raster_SetModeFunc                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This function is a generic facility to change modes or attributes  */
+  /*    in a given raster.  This can be used for debugging purposes, or    */
+  /*    simply to allow implementation-specific `features' in a given      */
+  /*    raster module.                                                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    raster :: A handle to the new raster object.                       */
+  /*                                                                       */
+  /*    mode   :: A 4-byte tag used to name the mode or property.          */
+  /*                                                                       */
+  /*    args   :: A pointer to the new mode/property to use.               */
+  /*                                                                       */
+  typedef int
+  (*FT_Raster_SetModeFunc)( FT_Raster      raster,
+                            unsigned long  mode,
+                            void*          args );
+
+#define FT_Raster_Set_Mode_Func  FT_Raster_SetModeFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Raster_RenderFunc                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Invoke a given raster to scan-convert a given glyph image into a   */
+  /*    target bitmap.                                                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    raster :: A handle to the raster object.                           */
+  /*                                                                       */
+  /*    params :: A pointer to an @FT_Raster_Params structure used to      */
+  /*              store the rendering parameters.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    Error code.  0~means success.                                      */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The exact format of the source image depends on the raster's glyph */
+  /*    format defined in its @FT_Raster_Funcs structure.  It can be an    */
+  /*    @FT_Outline or anything else in order to support a large array of  */
+  /*    glyph formats.                                                     */
+  /*                                                                       */
+  /*    Note also that the render function can fail and return a           */
+  /*    `FT_Err_Unimplemented_Feature' error code if the raster used does  */
+  /*    not support direct composition.                                    */
+  /*                                                                       */
+  /*    XXX: For now, the standard raster doesn't support direct           */
+  /*         composition but this should change for the final release (see */
+  /*         the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c'    */
+  /*         for examples of distinct implementations which support direct */
+  /*         composition).                                                 */
+  /*                                                                       */
+  typedef int
+  (*FT_Raster_RenderFunc)( FT_Raster                raster,
+                           const FT_Raster_Params*  params );
+
+#define FT_Raster_Render_Func  FT_Raster_RenderFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Raster_Funcs                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*   A structure used to describe a given raster class to the library.   */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    glyph_format  :: The supported glyph format for this raster.       */
+  /*                                                                       */
+  /*    raster_new    :: The raster constructor.                           */
+  /*                                                                       */
+  /*    raster_reset  :: Used to reset the render pool within the raster.  */
+  /*                                                                       */
+  /*    raster_render :: A function to render a glyph into a given bitmap. */
+  /*                                                                       */
+  /*    raster_done   :: The raster destructor.                            */
+  /*                                                                       */
+  typedef struct  FT_Raster_Funcs_
+  {
+    FT_Glyph_Format        glyph_format;
+    FT_Raster_NewFunc      raster_new;
+    FT_Raster_ResetFunc    raster_reset;
+    FT_Raster_SetModeFunc  raster_set_mode;
+    FT_Raster_RenderFunc   raster_render;
+    FT_Raster_DoneFunc     raster_done;
+
+  } FT_Raster_Funcs;
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTIMAGE_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8    */
+/* End:             */
diff --git a/core/include/thirdparties/freetype/freetype/ftincrem.h b/core/include/thirdparties/freetype/freetype/ftincrem.h
new file mode 100644
index 0000000..3a3015e
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftincrem.h
@@ -0,0 +1,353 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftincrem.h                                                             */
+/*                                                                         */
+/*    FreeType incremental loading (specification).                        */
+/*                                                                         */
+/*  Copyright 2002, 2003, 2006, 2007, 2008, 2010 by                        */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTINCREM_H__
+#define __FTINCREM_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+  /***************************************************************************
+   *
+   * @section:
+   *    incremental
+   *
+   * @title:
+   *    Incremental Loading
+   *
+   * @abstract:
+   *    Custom Glyph Loading.
+   *
+   * @description:
+   *   This section contains various functions used to perform so-called
+   *   `incremental' glyph loading.  This is a mode where all glyphs loaded
+   *   from a given @FT_Face are provided by the client application,
+   *
+   *   Apart from that, all other tables are loaded normally from the font
+   *   file.  This mode is useful when FreeType is used within another
+   *   engine, e.g., a PostScript Imaging Processor.
+   *
+   *   To enable this mode, you must use @FT_Open_Face, passing an
+   *   @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an
+   *   @FT_Incremental_Interface value.  See the comments for
+   *   @FT_Incremental_InterfaceRec for an example.
+   *
+   */
+
+
+  /***************************************************************************
+   *
+   * @type:
+   *   FT_Incremental
+   *
+   * @description:
+   *   An opaque type describing a user-provided object used to implement
+   *   `incremental' glyph loading within FreeType.  This is used to support
+   *   embedded fonts in certain environments (e.g., PostScript interpreters),
+   *   where the glyph data isn't in the font file, or must be overridden by
+   *   different values.
+   *
+   * @note:
+   *   It is up to client applications to create and implement @FT_Incremental
+   *   objects, as long as they provide implementations for the methods
+   *   @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
+   *   and @FT_Incremental_GetGlyphMetricsFunc.
+   *
+   *   See the description of @FT_Incremental_InterfaceRec to understand how
+   *   to use incremental objects with FreeType.
+   *
+   */
+  typedef struct FT_IncrementalRec_*  FT_Incremental;
+
+
+  /***************************************************************************
+   *
+   * @struct:
+   *   FT_Incremental_MetricsRec
+   *
+   * @description:
+   *   A small structure used to contain the basic glyph metrics returned
+   *   by the @FT_Incremental_GetGlyphMetricsFunc method.
+   *
+   * @fields:
+   *   bearing_x ::
+   *     Left bearing, in font units.
+   *
+   *   bearing_y ::
+   *     Top bearing, in font units.
+   *
+   *   advance ::
+   *     Horizontal component of glyph advance, in font units.
+   *
+   *   advance_v ::
+   *     Vertical component of glyph advance, in font units.
+   *
+   * @note:
+   *   These correspond to horizontal or vertical metrics depending on the
+   *   value of the `vertical' argument to the function
+   *   @FT_Incremental_GetGlyphMetricsFunc.
+   *
+   */
+  typedef struct  FT_Incremental_MetricsRec_
+  {
+    FT_Long  bearing_x;
+    FT_Long  bearing_y;
+    FT_Long  advance;
+    FT_Long  advance_v;     /* since 2.3.12 */
+
+  } FT_Incremental_MetricsRec;
+
+
+  /***************************************************************************
+   *
+   * @struct:
+   *   FT_Incremental_Metrics
+   *
+   * @description:
+   *   A handle to an @FT_Incremental_MetricsRec structure.
+   *
+   */
+   typedef struct FT_Incremental_MetricsRec_*  FT_Incremental_Metrics;
+
+
+  /***************************************************************************
+   *
+   * @type:
+   *   FT_Incremental_GetGlyphDataFunc
+   *
+   * @description:
+   *   A function called by FreeType to access a given glyph's data bytes
+   *   during @FT_Load_Glyph or @FT_Load_Char if incremental loading is
+   *   enabled.
+   *
+   *   Note that the format of the glyph's data bytes depends on the font
+   *   file format.  For TrueType, it must correspond to the raw bytes within
+   *   the `glyf' table.  For PostScript formats, it must correspond to the
+   *   *unencrypted* charstring bytes, without any `lenIV' header.  It is
+   *   undefined for any other format.
+   *
+   * @input:
+   *   incremental ::
+   *     Handle to an opaque @FT_Incremental handle provided by the client
+   *     application.
+   *
+   *   glyph_index ::
+   *     Index of relevant glyph.
+   *
+   * @output:
+   *   adata ::
+   *     A structure describing the returned glyph data bytes (which will be
+   *     accessed as a read-only byte block).
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   If this function returns successfully the method
+   *   @FT_Incremental_FreeGlyphDataFunc will be called later to release
+   *   the data bytes.
+   *
+   *   Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
+   *   compound glyphs.
+   *
+   */
+  typedef FT_Error
+  (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental  incremental,
+                                      FT_UInt         glyph_index,
+                                      FT_Data*        adata );
+
+
+  /***************************************************************************
+   *
+   * @type:
+   *   FT_Incremental_FreeGlyphDataFunc
+   *
+   * @description:
+   *   A function used to release the glyph data bytes returned by a
+   *   successful call to @FT_Incremental_GetGlyphDataFunc.
+   *
+   * @input:
+   *   incremental ::
+   *     A handle to an opaque @FT_Incremental handle provided by the client
+   *     application.
+   *
+   *   data ::
+   *     A structure describing the glyph data bytes (which will be accessed
+   *     as a read-only byte block).
+   *
+   */
+  typedef void
+  (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental  incremental,
+                                       FT_Data*        data );
+
+
+  /***************************************************************************
+   *
+   * @type:
+   *   FT_Incremental_GetGlyphMetricsFunc
+   *
+   * @description:
+   *   A function used to retrieve the basic metrics of a given glyph index
+   *   before accessing its data.  This is necessary because, in certain
+   *   formats like TrueType, the metrics are stored in a different place from
+   *   the glyph images proper.
+   *
+   * @input:
+   *   incremental ::
+   *     A handle to an opaque @FT_Incremental handle provided by the client
+   *     application.
+   *
+   *   glyph_index ::
+   *     Index of relevant glyph.
+   *
+   *   vertical ::
+   *     If true, return vertical metrics.
+   *
+   *   ametrics ::
+   *     This parameter is used for both input and output.
+   *     The original glyph metrics, if any, in font units.  If metrics are
+   *     not available all the values must be set to zero.
+   *
+   * @output:
+   *   ametrics ::
+   *     The replacement glyph metrics in font units.
+   *
+   */
+  typedef FT_Error
+  (*FT_Incremental_GetGlyphMetricsFunc)
+                      ( FT_Incremental              incremental,
+                        FT_UInt                     glyph_index,
+                        FT_Bool                     vertical,
+                        FT_Incremental_MetricsRec  *ametrics );
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   FT_Incremental_FuncsRec
+   *
+   * @description:
+   *   A table of functions for accessing fonts that load data
+   *   incrementally.  Used in @FT_Incremental_InterfaceRec.
+   *
+   * @fields:
+   *   get_glyph_data ::
+   *     The function to get glyph data.  Must not be null.
+   *
+   *   free_glyph_data ::
+   *     The function to release glyph data.  Must not be null.
+   *
+   *   get_glyph_metrics ::
+   *     The function to get glyph metrics.  May be null if the font does
+   *     not provide overriding glyph metrics.
+   *
+   */
+  typedef struct  FT_Incremental_FuncsRec_
+  {
+    FT_Incremental_GetGlyphDataFunc     get_glyph_data;
+    FT_Incremental_FreeGlyphDataFunc    free_glyph_data;
+    FT_Incremental_GetGlyphMetricsFunc  get_glyph_metrics;
+
+  } FT_Incremental_FuncsRec;
+
+
+  /***************************************************************************
+   *
+   * @struct:
+   *   FT_Incremental_InterfaceRec
+   *
+   * @description:
+   *   A structure to be used with @FT_Open_Face to indicate that the user
+   *   wants to support incremental glyph loading.  You should use it with
+   *   @FT_PARAM_TAG_INCREMENTAL as in the following example:
+   *
+   *     {
+   *       FT_Incremental_InterfaceRec  inc_int;
+   *       FT_Parameter                 parameter;
+   *       FT_Open_Args                 open_args;
+   *
+   *
+   *       // set up incremental descriptor
+   *       inc_int.funcs  = my_funcs;
+   *       inc_int.object = my_object;
+   *
+   *       // set up optional parameter
+   *       parameter.tag  = FT_PARAM_TAG_INCREMENTAL;
+   *       parameter.data = &inc_int;
+   *
+   *       // set up FT_Open_Args structure
+   *       open_args.flags      = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
+   *       open_args.pathname   = my_font_pathname;
+   *       open_args.num_params = 1;
+   *       open_args.params     = &parameter; // we use one optional argument
+   *
+   *       // open the font
+   *       error = FT_Open_Face( library, &open_args, index, &face );
+   *       ...
+   *     }
+   *
+   */
+  typedef struct  FT_Incremental_InterfaceRec_
+  {
+    const FT_Incremental_FuncsRec*  funcs;
+    FT_Incremental                  object;
+
+  } FT_Incremental_InterfaceRec;
+
+
+  /***************************************************************************
+   *
+   * @type:
+   *   FT_Incremental_Interface
+   *
+   * @description:
+   *   A pointer to an @FT_Incremental_InterfaceRec structure.
+   *
+   */
+  typedef FT_Incremental_InterfaceRec*   FT_Incremental_Interface;
+
+
+  /***************************************************************************
+   *
+   * @constant:
+   *   FT_PARAM_TAG_INCREMENTAL
+   *
+   * @description:
+   *   A constant used as the tag of @FT_Parameter structures to indicate
+   *   an incremental loading object to be used by FreeType.
+   *
+   */
+#define FT_PARAM_TAG_INCREMENTAL  FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
+
+  /* */
+
+FT_END_HEADER
+
+#endif /* __FTINCREM_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftlcdfil.h b/core/include/thirdparties/freetype/freetype/ftlcdfil.h
new file mode 100644
index 0000000..042f983
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftlcdfil.h
@@ -0,0 +1,251 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftlcdfil.h                                                             */
+/*                                                                         */
+/*    FreeType API for color filtering of subpixel bitmap glyphs           */
+/*    (specification).                                                     */
+/*                                                                         */
+/*  Copyright 2006, 2007, 2008, 2010 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FT_LCD_FILTER_H__
+#define __FT_LCD_FILTER_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+  /***************************************************************************
+   *
+   * @section:
+   *   lcd_filtering
+   *
+   * @title:
+   *   LCD Filtering
+   *
+   * @abstract:
+   *   Reduce color fringes of LCD-optimized bitmaps.
+   *
+   * @description:
+   *   The @FT_Library_SetLcdFilter API can be used to specify a low-pass
+   *   filter which is then applied to LCD-optimized bitmaps generated
+   *   through @FT_Render_Glyph.  This is useful to reduce color fringes
+   *   which would occur with unfiltered rendering.
+   *
+   *   Note that no filter is active by default, and that this function is
+   *   *not* implemented in default builds of the library.  You need to
+   *   #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your `ftoption.h' file
+   *   in order to activate it.
+   *
+   *   FreeType generates alpha coverage maps, which are linear by nature.
+   *   For instance, the value 0x80 in bitmap representation means that
+   *   (within numerical precision) 0x80/0xff fraction of that pixel is
+   *   covered by the glyph's outline.  The blending function for placing
+   *   text over a background is
+   *
+   *   {
+   *     dst = alpha * src + (1 - alpha) * dst    ,
+   *   }
+   *
+   *   which is known as OVER.  However, when calculating the output of the
+   *   OVER operator, the source colors should first be transformed to a
+   *   linear color space, then alpha blended in that space, and transformed
+   *   back to the output color space.
+   *
+   *   When linear light blending is used, the default FIR5 filtering
+   *   weights (as given by FT_LCD_FILTER_DEFAULT) are no longer optimal, as
+   *   they have been designed for black on white rendering while lacking
+   *   gamma correction.  To preserve color neutrality, weights for a FIR5
+   *   filter should be chosen according to two free parameters `a' and `c',
+   *   and the FIR weights should be
+   *
+   *   {
+   *     [a - c, a + c, 2 * a, a + c, a - c]    .
+   *   }
+   *
+   *   This formula generates equal weights for all the color primaries
+   *   across the filter kernel, which makes it colorless.  One suggested
+   *   set of weights is
+   *
+   *   {
+   *     [0x10, 0x50, 0x60, 0x50, 0x10]    ,
+   *   }
+   *
+   *   where `a' has value 0x30 and `b' value 0x20.  The weights in filter
+   *   may have a sum larger than 0x100, which increases coloration slightly
+   *   but also improves contrast.
+   */
+
+
+  /****************************************************************************
+   *
+   * @enum:
+   *   FT_LcdFilter
+   *
+   * @description:
+   *   A list of values to identify various types of LCD filters.
+   *
+   * @values:
+   *   FT_LCD_FILTER_NONE ::
+   *     Do not perform filtering.  When used with subpixel rendering, this
+   *     results in sometimes severe color fringes.
+   *
+   *   FT_LCD_FILTER_DEFAULT ::
+   *     The default filter reduces color fringes considerably, at the cost
+   *     of a slight blurriness in the output.
+   *
+   *   FT_LCD_FILTER_LIGHT ::
+   *     The light filter is a variant that produces less blurriness at the
+   *     cost of slightly more color fringes than the default one.  It might
+   *     be better, depending on taste, your monitor, or your personal vision.
+   *
+   *   FT_LCD_FILTER_LEGACY ::
+   *     This filter corresponds to the original libXft color filter.  It
+   *     provides high contrast output but can exhibit really bad color
+   *     fringes if glyphs are not extremely well hinted to the pixel grid.
+   *     In other words, it only works well if the TrueType bytecode
+   *     interpreter is enabled *and* high-quality hinted fonts are used.
+   *
+   *     This filter is only provided for comparison purposes, and might be
+   *     disabled or stay unsupported in the future.
+   *
+   * @since:
+   *   2.3.0
+   */
+  typedef enum  FT_LcdFilter_
+  {
+    FT_LCD_FILTER_NONE    = 0,
+    FT_LCD_FILTER_DEFAULT = 1,
+    FT_LCD_FILTER_LIGHT   = 2,
+    FT_LCD_FILTER_LEGACY  = 16,
+
+    FT_LCD_FILTER_MAX   /* do not remove */
+
+  } FT_LcdFilter;
+
+
+  /**************************************************************************
+   *
+   * @func:
+   *   FT_Library_SetLcdFilter
+   *
+   * @description:
+   *   This function is used to apply color filtering to LCD decimated
+   *   bitmaps, like the ones used when calling @FT_Render_Glyph with
+   *   @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V.
+   *
+   * @input:
+   *   library ::
+   *     A handle to the target library instance.
+   *
+   *   filter ::
+   *     The filter type.
+   *
+   *     You can use @FT_LCD_FILTER_NONE here to disable this feature, or
+   *     @FT_LCD_FILTER_DEFAULT to use a default filter that should work
+   *     well on most LCD screens.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   This feature is always disabled by default.  Clients must make an
+   *   explicit call to this function with a `filter' value other than
+   *   @FT_LCD_FILTER_NONE in order to enable it.
+   *
+   *   Due to *PATENTS* covering subpixel rendering, this function doesn't
+   *   do anything except returning `FT_Err_Unimplemented_Feature' if the
+   *   configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+   *   defined in your build of the library, which should correspond to all
+   *   default builds of FreeType.
+   *
+   *   The filter affects glyph bitmaps rendered through @FT_Render_Glyph,
+   *   @FT_Outline_Get_Bitmap, @FT_Load_Glyph, and @FT_Load_Char.
+   *
+   *   It does _not_ affect the output of @FT_Outline_Render and
+   *   @FT_Outline_Get_Bitmap.
+   *
+   *   If this feature is activated, the dimensions of LCD glyph bitmaps are
+   *   either larger or taller than the dimensions of the corresponding
+   *   outline with regards to the pixel grid.  For example, for
+   *   @FT_RENDER_MODE_LCD, the filter adds up to 3~pixels to the left, and
+   *   up to 3~pixels to the right.
+   *
+   *   The bitmap offset values are adjusted correctly, so clients shouldn't
+   *   need to modify their layout and glyph positioning code when enabling
+   *   the filter.
+   *
+   * @since:
+   *   2.3.0
+   */
+  FT_EXPORT( FT_Error )
+  FT_Library_SetLcdFilter( FT_Library    library,
+                           FT_LcdFilter  filter );
+
+
+  /**************************************************************************
+   *
+   * @func:
+   *   FT_Library_SetLcdFilterWeights
+   *
+   * @description:
+   *   Use this function to override the filter weights selected by
+   *   @FT_Library_SetLcdFilter.  By default, FreeType uses the quintuple
+   *   (0x00, 0x55, 0x56, 0x55, 0x00) for FT_LCD_FILTER_LIGHT, and (0x10,
+   *   0x40, 0x70, 0x40, 0x10) for FT_LCD_FILTER_DEFAULT and
+   *   FT_LCD_FILTER_LEGACY.
+   *
+   * @input:
+   *   library ::
+   *     A handle to the target library instance.
+   *
+   *   weights ::
+   *     A pointer to an array; the function copies the first five bytes and
+   *     uses them to specify the filter weights.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   Due to *PATENTS* covering subpixel rendering, this function doesn't
+   *   do anything except returning `FT_Err_Unimplemented_Feature' if the
+   *   configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+   *   defined in your build of the library, which should correspond to all
+   *   default builds of FreeType.
+   *
+   *   This function must be called after @FT_Library_SetLcdFilter to have
+   *   any effect.
+   *
+   * @since:
+   *   2.4.0
+   */
+  FT_EXPORT( FT_Error )
+  FT_Library_SetLcdFilterWeights( FT_Library      library,
+                                  unsigned char  *weights );
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FT_LCD_FILTER_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftlist.h b/core/include/thirdparties/freetype/freetype/ftlist.h
new file mode 100644
index 0000000..8b18978
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftlist.h
@@ -0,0 +1,277 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftlist.h                                                               */
+/*                                                                         */
+/*    Generic list support for FreeType (specification).                   */
+/*                                                                         */
+/*  Copyright 1996-2001, 2003, 2007, 2010 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*  This file implements functions relative to list processing.  Its     */
+  /*  data structures are defined in `freetype.h'.                         */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTLIST_H__
+#define __FTLIST_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    list_processing                                                    */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    List Processing                                                    */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Simple management of lists.                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains various definitions related to list          */
+  /*    processing using doubly-linked nodes.                              */
+  /*                                                                       */
+  /* <Order>                                                               */
+  /*    FT_List                                                            */
+  /*    FT_ListNode                                                        */
+  /*    FT_ListRec                                                         */
+  /*    FT_ListNodeRec                                                     */
+  /*                                                                       */
+  /*    FT_List_Add                                                        */
+  /*    FT_List_Insert                                                     */
+  /*    FT_List_Find                                                       */
+  /*    FT_List_Remove                                                     */
+  /*    FT_List_Up                                                         */
+  /*    FT_List_Iterate                                                    */
+  /*    FT_List_Iterator                                                   */
+  /*    FT_List_Finalize                                                   */
+  /*    FT_List_Destructor                                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_List_Find                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Find the list node for a given listed object.                      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    list :: A pointer to the parent list.                              */
+  /*    data :: The address of the listed object.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    List node.  NULL if it wasn't found.                               */
+  /*                                                                       */
+  FT_EXPORT( FT_ListNode )
+  FT_List_Find( FT_List  list,
+                void*    data );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_List_Add                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Append an element to the end of a list.                            */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    list :: A pointer to the parent list.                              */
+  /*    node :: The node to append.                                        */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_List_Add( FT_List      list,
+               FT_ListNode  node );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_List_Insert                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Insert an element at the head of a list.                           */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    list :: A pointer to parent list.                                  */
+  /*    node :: The node to insert.                                        */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_List_Insert( FT_List      list,
+                  FT_ListNode  node );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_List_Remove                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Remove a node from a list.  This function doesn't check whether    */
+  /*    the node is in the list!                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    node :: The node to remove.                                        */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    list :: A pointer to the parent list.                              */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_List_Remove( FT_List      list,
+                  FT_ListNode  node );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_List_Up                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Move a node to the head/top of a list.  Used to maintain LRU       */
+  /*    lists.                                                             */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    list :: A pointer to the parent list.                              */
+  /*    node :: The node to move.                                          */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_List_Up( FT_List      list,
+              FT_ListNode  node );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_List_Iterator                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An FT_List iterator function which is called during a list parse   */
+  /*    by @FT_List_Iterate.                                               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    node :: The current iteration list node.                           */
+  /*                                                                       */
+  /*    user :: A typeless pointer passed to @FT_List_Iterate.             */
+  /*            Can be used to point to the iteration's state.             */
+  /*                                                                       */
+  typedef FT_Error
+  (*FT_List_Iterator)( FT_ListNode  node,
+                       void*        user );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_List_Iterate                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Parse a list and calls a given iterator function on each element.  */
+  /*    Note that parsing is stopped as soon as one of the iterator calls  */
+  /*    returns a non-zero value.                                          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    list     :: A handle to the list.                                  */
+  /*    iterator :: An iterator function, called on each node of the list. */
+  /*    user     :: A user-supplied field which is passed as the second    */
+  /*                argument to the iterator.                              */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The result (a FreeType error code) of the last iterator call.      */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_List_Iterate( FT_List           list,
+                   FT_List_Iterator  iterator,
+                   void*             user );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_List_Destructor                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An @FT_List iterator function which is called during a list        */
+  /*    finalization by @FT_List_Finalize to destroy all elements in a     */
+  /*    given list.                                                        */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    system :: The current system object.                               */
+  /*                                                                       */
+  /*    data   :: The current object to destroy.                           */
+  /*                                                                       */
+  /*    user   :: A typeless pointer passed to @FT_List_Iterate.  It can   */
+  /*              be used to point to the iteration's state.               */
+  /*                                                                       */
+  typedef void
+  (*FT_List_Destructor)( FT_Memory  memory,
+                         void*      data,
+                         void*      user );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_List_Finalize                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Destroy all elements in the list as well as the list itself.       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    list    :: A handle to the list.                                   */
+  /*                                                                       */
+  /*    destroy :: A list destructor that will be applied to each element  */
+  /*               of the list.                                            */
+  /*                                                                       */
+  /*    memory  :: The current memory object which handles deallocation.   */
+  /*                                                                       */
+  /*    user    :: A user-supplied field which is passed as the last       */
+  /*               argument to the destructor.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function expects that all nodes added by @FT_List_Add or      */
+  /*    @FT_List_Insert have been dynamically allocated.                   */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_List_Finalize( FT_List             list,
+                    FT_List_Destructor  destroy,
+                    FT_Memory           memory,
+                    void*               user );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTLIST_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftlzw.h b/core/include/thirdparties/freetype/freetype/ftlzw.h
new file mode 100644
index 0000000..5bb4a82
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftlzw.h
@@ -0,0 +1,99 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftlzw.h                                                                */
+/*                                                                         */
+/*    LZW-compressed stream support.                                       */
+/*                                                                         */
+/*  Copyright 2004, 2006 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTLZW_H__
+#define __FTLZW_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    lzw                                                                */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    LZW Streams                                                        */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Using LZW-compressed font files.                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of LZW-specific functions.   */
+  /*                                                                       */
+  /*************************************************************************/
+
+ /************************************************************************
+  *
+  * @function:
+  *   FT_Stream_OpenLZW
+  *
+  * @description:
+  *   Open a new stream to parse LZW-compressed font files.  This is
+  *   mainly used to support the compressed `*.pcf.Z' fonts that come
+  *   with XFree86.
+  *
+  * @input:
+  *   stream :: The target embedding stream.
+  *
+  *   source :: The source stream.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   The source stream must be opened _before_ calling this function.
+  *
+  *   Calling the internal function `FT_Stream_Close' on the new stream will
+  *   *not* call `FT_Stream_Close' on the source stream.  None of the stream
+  *   objects will be released to the heap.
+  *
+  *   The stream implementation is very basic and resets the decompression
+  *   process each time seeking backwards is needed within the stream
+  *
+  *   In certain builds of the library, LZW compression recognition is
+  *   automatically handled when calling @FT_New_Face or @FT_Open_Face.
+  *   This means that if no font driver is capable of handling the raw
+  *   compressed file, the library will try to open a LZW stream from it
+  *   and re-open the face with it.
+  *
+  *   This function may return `FT_Err_Unimplemented_Feature' if your build
+  *   of FreeType was not compiled with LZW support.
+  */
+  FT_EXPORT( FT_Error )
+  FT_Stream_OpenLZW( FT_Stream  stream,
+                     FT_Stream  source );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTLZW_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftmac.h b/core/include/thirdparties/freetype/freetype/ftmac.h
new file mode 100644
index 0000000..f40f3fb
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftmac.h
@@ -0,0 +1,274 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftmac.h                                                                */
+/*                                                                         */
+/*    Additional Mac-specific API.                                         */
+/*                                                                         */
+/*  Copyright 1996-2001, 2004, 2006, 2007 by                               */
+/*  Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.     */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/* NOTE: Include this file after <freetype/freetype.h> and after any       */
+/*       Mac-specific headers (because this header uses Mac types such as  */
+/*       Handle, FSSpec, FSRef, etc.)                                      */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTMAC_H__
+#define __FTMAC_H__
+
+
+#include "../ft2build.h"
+
+
+FT_BEGIN_HEADER
+
+
+/* gcc-3.4.1 and later can warn about functions tagged as deprecated */
+#ifndef FT_DEPRECATED_ATTRIBUTE
+#if defined(__GNUC__)                                               && \
+    ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
+#define FT_DEPRECATED_ATTRIBUTE  __attribute__((deprecated))
+#else
+#define FT_DEPRECATED_ATTRIBUTE
+#endif
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    mac_specific                                                       */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Mac Specific Interface                                             */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Only available on the Macintosh.                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The following definitions are only available if FreeType is        */
+  /*    compiled on a Macintosh.                                           */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_New_Face_From_FOND                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new face object from a FOND resource.                     */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library    :: A handle to the library resource.                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    fond       :: A FOND resource.                                     */
+  /*                                                                       */
+  /*    face_index :: Only supported for the -1 `sanity check' special     */
+  /*                  case.                                                */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    aface      :: A handle to a new face object.                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Notes>                                                               */
+  /*    This function can be used to create @FT_Face objects from fonts    */
+  /*    that are installed in the system as follows.                       */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      fond = GetResource( 'FOND', fontName );                          */
+  /*      error = FT_New_Face_From_FOND( library, fond, 0, &face );        */
+  /*    }                                                                  */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_New_Face_From_FOND( FT_Library  library,
+                         Handle      fond,
+                         FT_Long     face_index,
+                         FT_Face    *aface )
+                       FT_DEPRECATED_ATTRIBUTE;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_GetFile_From_Mac_Name                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return an FSSpec for the disk file containing the named font.      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    fontName   :: Mac OS name of the font (e.g., Times New Roman       */
+  /*                  Bold).                                               */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    pathSpec   :: FSSpec to the file.  For passing to                  */
+  /*                  @FT_New_Face_From_FSSpec.                            */
+  /*                                                                       */
+  /*    face_index :: Index of the face.  For passing to                   */
+  /*                  @FT_New_Face_From_FSSpec.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_GetFile_From_Mac_Name( const char*  fontName,
+                            FSSpec*      pathSpec,
+                            FT_Long*     face_index )
+                          FT_DEPRECATED_ATTRIBUTE;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_GetFile_From_Mac_ATS_Name                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return an FSSpec for the disk file containing the named font.      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    fontName   :: Mac OS name of the font in ATS framework.            */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    pathSpec   :: FSSpec to the file. For passing to                   */
+  /*                  @FT_New_Face_From_FSSpec.                            */
+  /*                                                                       */
+  /*    face_index :: Index of the face. For passing to                    */
+  /*                  @FT_New_Face_From_FSSpec.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_GetFile_From_Mac_ATS_Name( const char*  fontName,
+                                FSSpec*      pathSpec,
+                                FT_Long*     face_index )
+                              FT_DEPRECATED_ATTRIBUTE;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_GetFilePath_From_Mac_ATS_Name                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return a pathname of the disk file and face index for given font   */
+  /*    name which is handled by ATS framework.                            */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    fontName    :: Mac OS name of the font in ATS framework.           */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    path        :: Buffer to store pathname of the file.  For passing  */
+  /*                   to @FT_New_Face.  The client must allocate this     */
+  /*                   buffer before calling this function.                */
+  /*                                                                       */
+  /*    maxPathSize :: Lengths of the buffer `path' that client allocated. */
+  /*                                                                       */
+  /*    face_index  :: Index of the face.  For passing to @FT_New_Face.    */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_GetFilePath_From_Mac_ATS_Name( const char*  fontName,
+                                    UInt8*       path,
+                                    UInt32       maxPathSize,
+                                    FT_Long*     face_index )
+                                  FT_DEPRECATED_ATTRIBUTE;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_New_Face_From_FSSpec                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new face object from a given resource and typeface index  */
+  /*    using an FSSpec to the font file.                                  */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library    :: A handle to the library resource.                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    spec       :: FSSpec to the font file.                             */
+  /*                                                                       */
+  /*    face_index :: The index of the face within the resource.  The      */
+  /*                  first face has index~0.                              */
+  /* <Output>                                                              */
+  /*    aface      :: A handle to a new face object.                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    @FT_New_Face_From_FSSpec is identical to @FT_New_Face except       */
+  /*    it accepts an FSSpec instead of a path.                            */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_New_Face_From_FSSpec( FT_Library     library,
+                           const FSSpec  *spec,
+                           FT_Long        face_index,
+                           FT_Face       *aface )
+                         FT_DEPRECATED_ATTRIBUTE;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_New_Face_From_FSRef                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new face object from a given resource and typeface index  */
+  /*    using an FSRef to the font file.                                   */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library    :: A handle to the library resource.                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    spec       :: FSRef to the font file.                              */
+  /*                                                                       */
+  /*    face_index :: The index of the face within the resource.  The      */
+  /*                  first face has index~0.                              */
+  /* <Output>                                                              */
+  /*    aface      :: A handle to a new face object.                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    @FT_New_Face_From_FSRef is identical to @FT_New_Face except        */
+  /*    it accepts an FSRef instead of a path.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_New_Face_From_FSRef( FT_Library    library,
+                          const FSRef  *ref,
+                          FT_Long       face_index,
+                          FT_Face      *aface )
+                        FT_DEPRECATED_ATTRIBUTE;
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTMAC_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftmm.h b/core/include/thirdparties/freetype/freetype/ftmm.h
new file mode 100644
index 0000000..52aaf44
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftmm.h
@@ -0,0 +1,378 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftmm.h                                                                 */
+/*                                                                         */
+/*    FreeType Multiple Master font interface (specification).             */
+/*                                                                         */
+/*  Copyright 1996-2001, 2003, 2004, 2006, 2009 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTMM_H__
+#define __FTMM_H__
+
+
+#include "../ft2build.h"
+#include "t1tables.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    multiple_masters                                                   */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Multiple Masters                                                   */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    How to manage Multiple Masters fonts.                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The following types and functions are used to manage Multiple      */
+  /*    Master fonts, i.e., the selection of specific design instances by  */
+  /*    setting design axis coordinates.                                   */
+  /*                                                                       */
+  /*    George Williams has extended this interface to make it work with   */
+  /*    both Type~1 Multiple Masters fonts and GX distortable (var)        */
+  /*    fonts.  Some of these routines only work with MM fonts, others     */
+  /*    will work with both types.  They are similar enough that a         */
+  /*    consistent interface makes sense.                                  */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_MM_Axis                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple structure used to model a given axis in design space for  */
+  /*    Multiple Masters fonts.                                            */
+  /*                                                                       */
+  /*    This structure can't be used for GX var fonts.                     */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    name    :: The axis's name.                                        */
+  /*                                                                       */
+  /*    minimum :: The axis's minimum design coordinate.                   */
+  /*                                                                       */
+  /*    maximum :: The axis's maximum design coordinate.                   */
+  /*                                                                       */
+  typedef struct  FT_MM_Axis_
+  {
+    FT_String*  name;
+    FT_Long     minimum;
+    FT_Long     maximum;
+
+  } FT_MM_Axis;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Multi_Master                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model the axes and space of a Multiple Masters */
+  /*    font.                                                              */
+  /*                                                                       */
+  /*    This structure can't be used for GX var fonts.                     */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    num_axis    :: Number of axes.  Cannot exceed~4.                   */
+  /*                                                                       */
+  /*    num_designs :: Number of designs; should be normally 2^num_axis    */
+  /*                   even though the Type~1 specification strangely      */
+  /*                   allows for intermediate designs to be present. This */
+  /*                   number cannot exceed~16.                            */
+  /*                                                                       */
+  /*    axis        :: A table of axis descriptors.                        */
+  /*                                                                       */
+  typedef struct  FT_Multi_Master_
+  {
+    FT_UInt     num_axis;
+    FT_UInt     num_designs;
+    FT_MM_Axis  axis[T1_MAX_MM_AXIS];
+
+  } FT_Multi_Master;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Var_Axis                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple structure used to model a given axis in design space for  */
+  /*    Multiple Masters and GX var fonts.                                 */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    name    :: The axis's name.                                        */
+  /*               Not always meaningful for GX.                           */
+  /*                                                                       */
+  /*    minimum :: The axis's minimum design coordinate.                   */
+  /*                                                                       */
+  /*    def     :: The axis's default design coordinate.                   */
+  /*               FreeType computes meaningful default values for MM; it  */
+  /*               is then an integer value, not in 16.16 format.          */
+  /*                                                                       */
+  /*    maximum :: The axis's maximum design coordinate.                   */
+  /*                                                                       */
+  /*    tag     :: The axis's tag (the GX equivalent to `name').           */
+  /*               FreeType provides default values for MM if possible.    */
+  /*                                                                       */
+  /*    strid   :: The entry in `name' table (another GX version of        */
+  /*               `name').                                                */
+  /*               Not meaningful for MM.                                  */
+  /*                                                                       */
+  typedef struct  FT_Var_Axis_
+  {
+    FT_String*  name;
+
+    FT_Fixed    minimum;
+    FT_Fixed    def;
+    FT_Fixed    maximum;
+
+    FT_ULong    tag;
+    FT_UInt     strid;
+
+  } FT_Var_Axis;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Var_Named_Style                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple structure used to model a named style in a GX var font.   */
+  /*                                                                       */
+  /*    This structure can't be used for MM fonts.                         */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    coords :: The design coordinates for this style.                   */
+  /*              This is an array with one entry for each axis.           */
+  /*                                                                       */
+  /*    strid  :: The entry in `name' table identifying this style.        */
+  /*                                                                       */
+  typedef struct  FT_Var_Named_Style_
+  {
+    FT_Fixed*  coords;
+    FT_UInt    strid;
+
+  } FT_Var_Named_Style;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_MM_Var                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model the axes and space of a Multiple Masters */
+  /*    or GX var distortable font.                                        */
+  /*                                                                       */
+  /*    Some fields are specific to one format and not to the other.       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    num_axis        :: The number of axes.  The maximum value is~4 for */
+  /*                       MM; no limit in GX.                             */
+  /*                                                                       */
+  /*    num_designs     :: The number of designs; should be normally       */
+  /*                       2^num_axis for MM fonts.  Not meaningful for GX */
+  /*                       (where every glyph could have a different       */
+  /*                       number of designs).                             */
+  /*                                                                       */
+  /*    num_namedstyles :: The number of named styles; only meaningful for */
+  /*                       GX which allows certain design coordinates to   */
+  /*                       have a string ID (in the `name' table)          */
+  /*                       associated with them.  The font can tell the    */
+  /*                       user that, for example, Weight=1.5 is `Bold'.   */
+  /*                                                                       */
+  /*    axis            :: A table of axis descriptors.                    */
+  /*                       GX fonts contain slightly more data than MM.    */
+  /*                                                                       */
+  /*    namedstyles     :: A table of named styles.                        */
+  /*                       Only meaningful with GX.                        */
+  /*                                                                       */
+  typedef struct  FT_MM_Var_
+  {
+    FT_UInt              num_axis;
+    FT_UInt              num_designs;
+    FT_UInt              num_namedstyles;
+    FT_Var_Axis*         axis;
+    FT_Var_Named_Style*  namedstyle;
+
+  } FT_MM_Var;
+
+
+  /* */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Multi_Master                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the Multiple Master descriptor of a given font.           */
+  /*                                                                       */
+  /*    This function can't be used with GX fonts.                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face    :: A handle to the source face.                            */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    amaster :: The Multiple Masters descriptor.                        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Get_Multi_Master( FT_Face           face,
+                       FT_Multi_Master  *amaster );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_MM_Var                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the Multiple Master/GX var descriptor of a given font.    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face    :: A handle to the source face.                            */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    amaster :: The Multiple Masters/GX var descriptor.                 */
+  /*               Allocates a data structure, which the user must free    */
+  /*               (a single call to FT_FREE will do it).                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Get_MM_Var( FT_Face      face,
+                 FT_MM_Var*  *amaster );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Set_MM_Design_Coordinates                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    For Multiple Masters fonts, choose an interpolated font design     */
+  /*    through design coordinates.                                        */
+  /*                                                                       */
+  /*    This function can't be used with GX fonts.                         */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    face       :: A handle to the source face.                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    num_coords :: The number of design coordinates (must be equal to   */
+  /*                  the number of axes in the font).                     */
+  /*                                                                       */
+  /*    coords     :: An array of design coordinates.                      */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Set_MM_Design_Coordinates( FT_Face   face,
+                                FT_UInt   num_coords,
+                                FT_Long*  coords );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Set_Var_Design_Coordinates                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    For Multiple Master or GX Var fonts, choose an interpolated font   */
+  /*    design through design coordinates.                                 */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    face       :: A handle to the source face.                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    num_coords :: The number of design coordinates (must be equal to   */
+  /*                  the number of axes in the font).                     */
+  /*                                                                       */
+  /*    coords     :: An array of design coordinates.                      */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Set_Var_Design_Coordinates( FT_Face    face,
+                                 FT_UInt    num_coords,
+                                 FT_Fixed*  coords );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Set_MM_Blend_Coordinates                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    For Multiple Masters and GX var fonts, choose an interpolated font */
+  /*    design through normalized blend coordinates.                       */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    face       :: A handle to the source face.                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    num_coords :: The number of design coordinates (must be equal to   */
+  /*                  the number of axes in the font).                     */
+  /*                                                                       */
+  /*    coords     :: The design coordinates array (each element must be   */
+  /*                  between 0 and 1.0).                                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Set_MM_Blend_Coordinates( FT_Face    face,
+                               FT_UInt    num_coords,
+                               FT_Fixed*  coords );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Set_Var_Blend_Coordinates                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This is another name of @FT_Set_MM_Blend_Coordinates.              */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Set_Var_Blend_Coordinates( FT_Face    face,
+                                FT_UInt    num_coords,
+                                FT_Fixed*  coords );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTMM_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftmodapi.h b/core/include/thirdparties/freetype/freetype/ftmodapi.h
new file mode 100644
index 0000000..f12c0a9
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftmodapi.h
@@ -0,0 +1,641 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftmodapi.h                                                             */
+/*                                                                         */
+/*    FreeType modules public interface (specification).                   */
+/*                                                                         */
+/*  Copyright 1996-2003, 2006, 2008-2010, 2012, 2013 by                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTMODAPI_H__
+#define __FTMODAPI_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    module_management                                                  */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Module Management                                                  */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    How to add, upgrade, remove, and control modules from FreeType.    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The definitions below are used to manage modules within FreeType.  */
+  /*    Modules can be added, upgraded, and removed at runtime.            */
+  /*    Additionally, some module properties can be controlled also.       */
+  /*                                                                       */
+  /*    Here is a list of possible values of the `module_name' field in    */
+  /*    the @FT_Module_Class structure.                                    */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      autofitter                                                       */
+  /*      bdf                                                              */
+  /*      cff                                                              */
+  /*      gxvalid                                                          */
+  /*      otvalid                                                          */
+  /*      pcf                                                              */
+  /*      pfr                                                              */
+  /*      psaux                                                            */
+  /*      pshinter                                                         */
+  /*      psnames                                                          */
+  /*      raster1, raster5                                                 */
+  /*      sfnt                                                             */
+  /*      smooth, smooth-lcd, smooth-lcdv                                  */
+  /*      truetype                                                         */
+  /*      type1                                                            */
+  /*      type42                                                           */
+  /*      t1cid                                                            */
+  /*      winfonts                                                         */
+  /*    }                                                                  */
+  /*                                                                       */
+  /*    Note that the FreeType Cache sub-system is not a FreeType module.  */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /* module bit flags */
+#define FT_MODULE_FONT_DRIVER         1  /* this module is a font driver  */
+#define FT_MODULE_RENDERER            2  /* this module is a renderer     */
+#define FT_MODULE_HINTER              4  /* this module is a glyph hinter */
+#define FT_MODULE_STYLER              8  /* this module is a styler       */
+
+#define FT_MODULE_DRIVER_SCALABLE     0x100   /* the driver supports      */
+                                              /* scalable fonts           */
+#define FT_MODULE_DRIVER_NO_OUTLINES  0x200   /* the driver does not      */
+                                              /* support vector outlines  */
+#define FT_MODULE_DRIVER_HAS_HINTER   0x400   /* the driver provides its  */
+                                              /* own hinter               */
+
+
+  /* deprecated values */
+#define ft_module_font_driver         FT_MODULE_FONT_DRIVER
+#define ft_module_renderer            FT_MODULE_RENDERER
+#define ft_module_hinter              FT_MODULE_HINTER
+#define ft_module_styler              FT_MODULE_STYLER
+
+#define ft_module_driver_scalable     FT_MODULE_DRIVER_SCALABLE
+#define ft_module_driver_no_outlines  FT_MODULE_DRIVER_NO_OUTLINES
+#define ft_module_driver_has_hinter   FT_MODULE_DRIVER_HAS_HINTER
+
+
+  typedef FT_Pointer  FT_Module_Interface;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Module_Constructor                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to initialize (not create) a new module object.    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    module :: The module to initialize.                                */
+  /*                                                                       */
+  typedef FT_Error
+  (*FT_Module_Constructor)( FT_Module  module );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Module_Destructor                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to finalize (not destroy) a given module object.   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    module :: The module to finalize.                                  */
+  /*                                                                       */
+  typedef void
+  (*FT_Module_Destructor)( FT_Module  module );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Module_Requester                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to query a given module for a specific interface.  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    module :: The module to be searched.                               */
+  /*                                                                       */
+  /*    name ::   The name of the interface in the module.                 */
+  /*                                                                       */
+  typedef FT_Module_Interface
+  (*FT_Module_Requester)( FT_Module    module,
+                          const char*  name );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Module_Class                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The module class descriptor.                                       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    module_flags    :: Bit flags describing the module.                */
+  /*                                                                       */
+  /*    module_size     :: The size of one module object/instance in       */
+  /*                       bytes.                                          */
+  /*                                                                       */
+  /*    module_name     :: The name of the module.                         */
+  /*                                                                       */
+  /*    module_version  :: The version, as a 16.16 fixed number            */
+  /*                       (major.minor).                                  */
+  /*                                                                       */
+  /*    module_requires :: The version of FreeType this module requires,   */
+  /*                       as a 16.16 fixed number (major.minor).  Starts  */
+  /*                       at version 2.0, i.e., 0x20000.                  */
+  /*                                                                       */
+  /*    module_init     :: The initializing function.                      */
+  /*                                                                       */
+  /*    module_done     :: The finalizing function.                        */
+  /*                                                                       */
+  /*    get_interface   :: The interface requesting function.              */
+  /*                                                                       */
+  typedef struct  FT_Module_Class_
+  {
+    FT_ULong               module_flags;
+    FT_Long                module_size;
+    const FT_String*       module_name;
+    FT_Fixed               module_version;
+    FT_Fixed               module_requires;
+
+    const void*            module_interface;
+
+    FT_Module_Constructor  module_init;
+    FT_Module_Destructor   module_done;
+    FT_Module_Requester    get_interface;
+
+  } FT_Module_Class;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Add_Module                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Add a new module to a given library instance.                      */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library :: A handle to the library object.                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    clazz   :: A pointer to class descriptor for the module.           */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    An error will be returned if a module already exists by that name, */
+  /*    or if the module requires a version of FreeType that is too great. */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Add_Module( FT_Library              library,
+                 const FT_Module_Class*  clazz );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Module                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Find a module by its name.                                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library     :: A handle to the library object.                     */
+  /*                                                                       */
+  /*    module_name :: The module's name (as an ASCII string).             */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    A module handle.  0~if none was found.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    FreeType's internal modules aren't documented very well, and you   */
+  /*    should look up the source code for details.                        */
+  /*                                                                       */
+  FT_EXPORT( FT_Module )
+  FT_Get_Module( FT_Library   library,
+                 const char*  module_name );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Remove_Module                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Remove a given module from a library instance.                     */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library :: A handle to a library object.                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    module  :: A handle to a module object.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The module object is destroyed by the function in case of success. */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Remove_Module( FT_Library  library,
+                    FT_Module   module );
+
+
+  /**********************************************************************
+   *
+   * @function:
+   *    FT_Property_Set
+   *
+   * @description:
+   *    Set a property for a given module.
+   *
+   * @input:
+   *    library ::
+   *       A handle to the library the module is part of.
+   *
+   *    module_name ::
+   *       The module name.
+   *
+   *    property_name ::
+   *       The property name.  Properties are described in the `Synopsis'
+   *       subsection of the module's documentation.
+   *
+   *       Note that only a few modules have properties.
+   *
+   *    value ::
+   *       A generic pointer to a variable or structure which gives the new
+   *       value of the property.  The exact definition of `value' is
+   *       dependent on the property; see the `Synopsis' subsection of the
+   *       module's documentation.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *    If `module_name' isn't a valid module name, or `property_name'
+   *    doesn't specify a valid property, or if `value' doesn't represent a
+   *    valid value for the given property, an error is returned.
+   *
+   *    The following example sets property `bar' (a simple integer) in
+   *    module `foo' to value~1.
+   *
+   *    {
+   *      FT_UInt  bar;
+   *
+   *
+   *      bar = 1;
+   *      FT_Property_Set( library, "foo", "bar", &bar );
+   *    }
+   *
+   *    Note that the FreeType Cache sub-system doesn't recognize module
+   *    property changes.  To avoid glyph lookup confusion within the cache
+   *    you should call @FTC_Manager_Reset to completely flush the cache if
+   *    a module property gets changed after @FTC_Manager_New has been
+   *    called.
+   *
+   *    It is not possible to set properties of the FreeType Cache
+   *    sub-system itself with FT_Property_Set; use @FTC_Property_Set
+   *    instead.
+   *
+   *  @since:
+   *    2.4.11
+   *
+   */
+  FT_EXPORT( FT_Error )
+  FT_Property_Set( FT_Library        library,
+                   const FT_String*  module_name,
+                   const FT_String*  property_name,
+                   const void*       value );
+
+
+  /**********************************************************************
+   *
+   * @function:
+   *    FT_Property_Get
+   *
+   * @description:
+   *    Get a module's property value.
+   *
+   * @input:
+   *    library ::
+   *       A handle to the library the module is part of.
+   *
+   *    module_name ::
+   *       The module name.
+   *
+   *    property_name ::
+   *       The property name.  Properties are described in the `Synopsis'
+   *       subsection of the module's documentation.
+   *
+   * @inout:
+   *    value ::
+   *       A generic pointer to a variable or structure which gives the
+   *       value of the property.  The exact definition of `value' is
+   *       dependent on the property; see the `Synopsis' subsection of the
+   *       module's documentation.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *    If `module_name' isn't a valid module name, or `property_name'
+   *    doesn't specify a valid property, or if `value' doesn't represent a
+   *    valid value for the given property, an error is returned.
+   *
+   *    The following example gets property `baz' (a range) in module `foo'.
+   *
+   *    {
+   *      typedef  range_
+   *      {
+   *        FT_Int32  min;
+   *        FT_Int32  max;
+   *
+   *      } range;
+   *
+   *      range  baz;
+   *
+   *
+   *      FT_Property_Get( library, "foo", "baz", &baz );
+   *    }
+   *
+   *    It is not possible to retrieve properties of the FreeType Cache
+   *    sub-system with FT_Property_Get; use @FTC_Property_Get instead.
+   *
+   *  @since:
+   *    2.4.11
+   *
+   */
+  FT_EXPORT( FT_Error )
+  FT_Property_Get( FT_Library        library,
+                   const FT_String*  module_name,
+                   const FT_String*  property_name,
+                   void*             value );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Reference_Library                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A counter gets initialized to~1 at the time an @FT_Library         */
+  /*    structure is created.  This function increments the counter.       */
+  /*    @FT_Done_Library then only destroys a library if the counter is~1, */
+  /*    otherwise it simply decrements the counter.                        */
+  /*                                                                       */
+  /*    This function helps in managing life-cycles of structures which    */
+  /*    reference @FT_Library objects.                                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle to a target library object.                    */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Since>                                                               */
+  /*    2.4.2                                                              */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Reference_Library( FT_Library  library );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_New_Library                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This function is used to create a new FreeType library instance    */
+  /*    from a given memory object.  It is thus possible to use libraries  */
+  /*    with distinct memory allocators within the same program.           */
+  /*                                                                       */
+  /*    Normally, you would call this function (followed by a call to      */
+  /*    @FT_Add_Default_Modules or a series of calls to @FT_Add_Module)    */
+  /*    instead of @FT_Init_FreeType to initialize the FreeType library.   */
+  /*                                                                       */
+  /*    Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a      */
+  /*    library instance.                                                  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory   :: A handle to the original memory object.                */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    alibrary :: A pointer to handle of a new library object.           */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    See the discussion of reference counters in the description of     */
+  /*    @FT_Reference_Library.                                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_New_Library( FT_Memory    memory,
+                  FT_Library  *alibrary );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Done_Library                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Discard a given library object.  This closes all drivers and       */
+  /*    discards all resource objects.                                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle to the target library.                         */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    See the discussion of reference counters in the description of     */
+  /*    @FT_Reference_Library.                                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Done_Library( FT_Library  library );
+
+/* */
+
+  typedef void
+  (*FT_DebugHook_Func)( void*  arg );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Set_Debug_Hook                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Set a debug hook function for debugging the interpreter of a font  */
+  /*    format.                                                            */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library    :: A handle to the library object.                      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    hook_index :: The index of the debug hook.  You should use the     */
+  /*                  values defined in `ftobjs.h', e.g.,                  */
+  /*                  `FT_DEBUG_HOOK_TRUETYPE'.                            */
+  /*                                                                       */
+  /*    debug_hook :: The function used to debug the interpreter.          */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Currently, four debug hook slots are available, but only two (for  */
+  /*    the TrueType and the Type~1 interpreter) are defined.              */
+  /*                                                                       */
+  /*    Since the internal headers of FreeType are no longer installed,    */
+  /*    the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly.      */
+  /*    This is a bug and will be fixed in a forthcoming release.          */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Set_Debug_Hook( FT_Library         library,
+                     FT_UInt            hook_index,
+                     FT_DebugHook_Func  debug_hook );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Add_Default_Modules                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Add the set of default drivers to a given library object.          */
+  /*    This is only useful when you create a library object with          */
+  /*    @FT_New_Library (usually to plug a custom memory manager).         */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library :: A handle to a new library object.                       */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Add_Default_Modules( FT_Library  library );
+
+
+
+  /**************************************************************************
+   *
+   * @section:
+   *   truetype_engine
+   *
+   * @title:
+   *   The TrueType Engine
+   *
+   * @abstract:
+   *   TrueType bytecode support.
+   *
+   * @description:
+   *   This section contains a function used to query the level of TrueType
+   *   bytecode support compiled in this version of the library.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   *  @enum:
+   *     FT_TrueTypeEngineType
+   *
+   *  @description:
+   *     A list of values describing which kind of TrueType bytecode
+   *     engine is implemented in a given FT_Library instance.  It is used
+   *     by the @FT_Get_TrueType_Engine_Type function.
+   *
+   *  @values:
+   *     FT_TRUETYPE_ENGINE_TYPE_NONE ::
+   *       The library doesn't implement any kind of bytecode interpreter.
+   *
+   *     FT_TRUETYPE_ENGINE_TYPE_UNPATENTED ::
+   *       The library implements a bytecode interpreter that doesn't
+   *       support the patented operations of the TrueType virtual machine.
+   *
+   *       Its main use is to load certain Asian fonts which position and
+   *       scale glyph components with bytecode instructions.  It produces
+   *       bad output for most other fonts.
+   *
+   *     FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
+   *       The library implements a bytecode interpreter that covers
+   *       the full instruction set of the TrueType virtual machine (this
+   *       was governed by patents until May 2010, hence the name).
+   *
+   *  @since:
+   *     2.2
+   *
+   */
+  typedef enum  FT_TrueTypeEngineType_
+  {
+    FT_TRUETYPE_ENGINE_TYPE_NONE = 0,
+    FT_TRUETYPE_ENGINE_TYPE_UNPATENTED,
+    FT_TRUETYPE_ENGINE_TYPE_PATENTED
+
+  } FT_TrueTypeEngineType;
+
+
+  /**************************************************************************
+   *
+   *  @func:
+   *     FT_Get_TrueType_Engine_Type
+   *
+   *  @description:
+   *     Return an @FT_TrueTypeEngineType value to indicate which level of
+   *     the TrueType virtual machine a given library instance supports.
+   *
+   *  @input:
+   *     library ::
+   *       A library instance.
+   *
+   *  @return:
+   *     A value indicating which level is supported.
+   *
+   *  @since:
+   *     2.2
+   *
+   */
+  FT_EXPORT( FT_TrueTypeEngineType )
+  FT_Get_TrueType_Engine_Type( FT_Library  library );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTMODAPI_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftmoderr.h b/core/include/thirdparties/freetype/freetype/ftmoderr.h
new file mode 100644
index 0000000..4ca851e
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftmoderr.h
@@ -0,0 +1,194 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftmoderr.h                                                             */
+/*                                                                         */
+/*    FreeType module error offsets (specification).                       */
+/*                                                                         */
+/*  Copyright 2001-2005, 2010, 2013 by                                     */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This file is used to define the FreeType module error codes.          */
+  /*                                                                       */
+  /* If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is    */
+  /* set, the lower byte of an error value identifies the error code as    */
+  /* usual.  In addition, the higher byte identifies the module.  For      */
+  /* example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the */
+  /* error `TT_Err_Invalid_File_Format' has value 0x1303, the error        */
+  /* `T1_Err_Invalid_File_Format' has value 0x1403, etc.                   */
+  /*                                                                       */
+  /* Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero,    */
+  /* including the high byte.                                              */
+  /*                                                                       */
+  /* If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of   */
+  /* an error value is set to zero.                                        */
+  /*                                                                       */
+  /* To hide the various `XXX_Err_' prefixes in the source code, FreeType  */
+  /* provides some macros in `fttypes.h'.                                  */
+  /*                                                                       */
+  /*   FT_ERR( err )                                                       */
+  /*     Add current error module prefix (as defined with the              */
+  /*     `FT_ERR_PREFIX' macro) to `err'.  For example, in the BDF module  */
+  /*     the line                                                          */
+  /*                                                                       */
+  /*       error = FT_ERR( Invalid_Outline );                              */
+  /*                                                                       */
+  /*     expands to                                                        */
+  /*                                                                       */
+  /*       error = BDF_Err_Invalid_Outline;                                */
+  /*                                                                       */
+  /*     For simplicity, you can always use `FT_Err_Ok' directly instead   */
+  /*     of `FT_ERR( Ok )'.                                                */
+  /*                                                                       */
+  /*   FT_ERR_EQ( errcode, err )                                           */
+  /*   FT_ERR_NEQ( errcode, err )                                          */
+  /*     Compare error code `errcode' with the error `err' for equality    */
+  /*     and inequality, respectively.  Example:                           */
+  /*                                                                       */
+  /*       if ( FT_ERR_EQ( error, Invalid_Outline ) )                      */
+  /*         ...                                                           */
+  /*                                                                       */
+  /*     Using this macro you don't have to think about error prefixes.    */
+  /*     Of course, if module errors are not active, the above example is  */
+  /*     the same as                                                       */
+  /*                                                                       */
+  /*       if ( error == FT_Err_Invalid_Outline )                          */
+  /*         ...                                                           */
+  /*                                                                       */
+  /*   FT_ERROR_BASE( errcode )                                            */
+  /*   FT_ERROR_MODULE( errcode )                                          */
+  /*     Get base error and module error code, respectively.               */
+  /*                                                                       */
+  /*                                                                       */
+  /* It can also be used to create a module error message table easily     */
+  /* with something like                                                   */
+  /*                                                                       */
+  /*   {                                                                   */
+  /*     #undef __FTMODERR_H__                                             */
+  /*     #define FT_MODERRDEF( e, v, s )  { FT_Mod_Err_ ## e, s },         */
+  /*     #define FT_MODERR_START_LIST     {                                */
+  /*     #define FT_MODERR_END_LIST       { 0, 0 } };                      */
+  /*                                                                       */
+  /*     const struct                                                      */
+  /*     {                                                                 */
+  /*       int          mod_err_offset;                                    */
+  /*       const char*  mod_err_msg                                        */
+  /*     } ft_mod_errors[] =                                               */
+  /*                                                                       */
+  /*     #include "ftmoderr.h"                                       */
+  /*   }                                                                   */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTMODERR_H__
+#define __FTMODERR_H__
+
+
+  /*******************************************************************/
+  /*******************************************************************/
+  /*****                                                         *****/
+  /*****                       SETUP MACROS                      *****/
+  /*****                                                         *****/
+  /*******************************************************************/
+  /*******************************************************************/
+
+
+#undef  FT_NEED_EXTERN_C
+
+#ifndef FT_MODERRDEF
+
+#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+#define FT_MODERRDEF( e, v, s )  FT_Mod_Err_ ## e = v,
+#else
+#define FT_MODERRDEF( e, v, s )  FT_Mod_Err_ ## e = 0,
+#endif
+
+#define FT_MODERR_START_LIST  enum {
+#define FT_MODERR_END_LIST    FT_Mod_Err_Max };
+
+#ifdef __cplusplus
+#define FT_NEED_EXTERN_C
+  extern "C" {
+#endif
+
+#endif /* !FT_MODERRDEF */
+
+
+  /*******************************************************************/
+  /*******************************************************************/
+  /*****                                                         *****/
+  /*****               LIST MODULE ERROR BASES                   *****/
+  /*****                                                         *****/
+  /*******************************************************************/
+  /*******************************************************************/
+
+
+#ifdef FT_MODERR_START_LIST
+  FT_MODERR_START_LIST
+#endif
+
+
+  FT_MODERRDEF( Base,      0x000, "base module" )
+  FT_MODERRDEF( Autofit,   0x100, "autofitter module" )
+  FT_MODERRDEF( BDF,       0x200, "BDF module" )
+  FT_MODERRDEF( Bzip2,     0x300, "Bzip2 module" )
+  FT_MODERRDEF( Cache,     0x400, "cache module" )
+  FT_MODERRDEF( CFF,       0x500, "CFF module" )
+  FT_MODERRDEF( CID,       0x600, "CID module" )
+  FT_MODERRDEF( Gzip,      0x700, "Gzip module" )
+  FT_MODERRDEF( LZW,       0x800, "LZW module" )
+  FT_MODERRDEF( OTvalid,   0x900, "OpenType validation module" )
+  FT_MODERRDEF( PCF,       0xA00, "PCF module" )
+  FT_MODERRDEF( PFR,       0xB00, "PFR module" )
+  FT_MODERRDEF( PSaux,     0xC00, "PS auxiliary module" )
+  FT_MODERRDEF( PShinter,  0xD00, "PS hinter module" )
+  FT_MODERRDEF( PSnames,   0xE00, "PS names module" )
+  FT_MODERRDEF( Raster,    0xF00, "raster module" )
+  FT_MODERRDEF( SFNT,     0x1000, "SFNT module" )
+  FT_MODERRDEF( Smooth,   0x1100, "smooth raster module" )
+  FT_MODERRDEF( TrueType, 0x1200, "TrueType module" )
+  FT_MODERRDEF( Type1,    0x1300, "Type 1 module" )
+  FT_MODERRDEF( Type42,   0x1400, "Type 42 module" )
+  FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" )
+  FT_MODERRDEF( GXvalid,  0x1600, "GX validation module" )
+
+
+#ifdef FT_MODERR_END_LIST
+  FT_MODERR_END_LIST
+#endif
+
+
+  /*******************************************************************/
+  /*******************************************************************/
+  /*****                                                         *****/
+  /*****                      CLEANUP                            *****/
+  /*****                                                         *****/
+  /*******************************************************************/
+  /*******************************************************************/
+
+
+#ifdef FT_NEED_EXTERN_C
+  }
+#endif
+
+#undef FT_MODERR_START_LIST
+#undef FT_MODERR_END_LIST
+#undef FT_MODERRDEF
+#undef FT_NEED_EXTERN_C
+
+
+#endif /* __FTMODERR_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftotval.h b/core/include/thirdparties/freetype/freetype/ftotval.h
new file mode 100644
index 0000000..e33e307
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftotval.h
@@ -0,0 +1,203 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftotval.h                                                              */
+/*                                                                         */
+/*    FreeType API for validating OpenType tables (specification).         */
+/*                                                                         */
+/*  Copyright 2004, 2005, 2006, 2007 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+/***************************************************************************/
+/*                                                                         */
+/*                                                                         */
+/* Warning: This module might be moved to a different library in the       */
+/*          future to avoid a tight dependency between FreeType and the    */
+/*          OpenType specification.                                        */
+/*                                                                         */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTOTVAL_H__
+#define __FTOTVAL_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    ot_validation                                                      */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    OpenType Validation                                                */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    An API to validate OpenType tables.                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of functions to validate     */
+  /*    some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).         */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+ /**********************************************************************
+  *
+  * @enum:
+  *    FT_VALIDATE_OTXXX
+  *
+  * @description:
+  *    A list of bit-field constants used with @FT_OpenType_Validate to
+  *    indicate which OpenType tables should be validated.
+  *
+  * @values:
+  *    FT_VALIDATE_BASE ::
+  *      Validate BASE table.
+  *
+  *    FT_VALIDATE_GDEF ::
+  *      Validate GDEF table.
+  *
+  *    FT_VALIDATE_GPOS ::
+  *      Validate GPOS table.
+  *
+  *    FT_VALIDATE_GSUB ::
+  *      Validate GSUB table.
+  *
+  *    FT_VALIDATE_JSTF ::
+  *      Validate JSTF table.
+  *
+  *    FT_VALIDATE_MATH ::
+  *      Validate MATH table.
+  *
+  *    FT_VALIDATE_OT ::
+  *      Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
+  *
+  */
+#define FT_VALIDATE_BASE  0x0100
+#define FT_VALIDATE_GDEF  0x0200
+#define FT_VALIDATE_GPOS  0x0400
+#define FT_VALIDATE_GSUB  0x0800
+#define FT_VALIDATE_JSTF  0x1000
+#define FT_VALIDATE_MATH  0x2000
+
+#define FT_VALIDATE_OT  FT_VALIDATE_BASE | \
+                        FT_VALIDATE_GDEF | \
+                        FT_VALIDATE_GPOS | \
+                        FT_VALIDATE_GSUB | \
+                        FT_VALIDATE_JSTF | \
+                        FT_VALIDATE_MATH
+
+  /* */
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_OpenType_Validate
+  *
+  * @description:
+  *    Validate various OpenType tables to assure that all offsets and
+  *    indices are valid.  The idea is that a higher-level library which
+  *    actually does the text layout can access those tables without
+  *    error checking (which can be quite time consuming).
+  *
+  * @input:
+  *    face ::
+  *       A handle to the input face.
+  *
+  *    validation_flags ::
+  *       A bit field which specifies the tables to be validated.  See
+  *       @FT_VALIDATE_OTXXX for possible values.
+  *
+  * @output:
+  *    BASE_table ::
+  *       A pointer to the BASE table.
+  *
+  *    GDEF_table ::
+  *       A pointer to the GDEF table.
+  *
+  *    GPOS_table ::
+  *       A pointer to the GPOS table.
+  *
+  *    GSUB_table ::
+  *       A pointer to the GSUB table.
+  *
+  *    JSTF_table ::
+  *       A pointer to the JSTF table.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   This function only works with OpenType fonts, returning an error
+  *   otherwise.
+  *
+  *   After use, the application should deallocate the five tables with
+  *   @FT_OpenType_Free.  A NULL value indicates that the table either
+  *   doesn't exist in the font, or the application hasn't asked for
+  *   validation.
+  */
+  FT_EXPORT( FT_Error )
+  FT_OpenType_Validate( FT_Face    face,
+                        FT_UInt    validation_flags,
+                        FT_Bytes  *BASE_table,
+                        FT_Bytes  *GDEF_table,
+                        FT_Bytes  *GPOS_table,
+                        FT_Bytes  *GSUB_table,
+                        FT_Bytes  *JSTF_table );
+
+  /* */
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_OpenType_Free
+  *
+  * @description:
+  *    Free the buffer allocated by OpenType validator.
+  *
+  * @input:
+  *    face ::
+  *       A handle to the input face.
+  *
+  *    table ::
+  *       The pointer to the buffer that is allocated by
+  *       @FT_OpenType_Validate.
+  *
+  * @note:
+  *   This function must be used to free the buffer allocated by
+  *   @FT_OpenType_Validate only.
+  */
+  FT_EXPORT( void )
+  FT_OpenType_Free( FT_Face   face,
+                    FT_Bytes  table );
+
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTOTVAL_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftoutln.h b/core/include/thirdparties/freetype/freetype/ftoutln.h
new file mode 100644
index 0000000..ca94947
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftoutln.h
@@ -0,0 +1,560 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftoutln.h                                                              */
+/*                                                                         */
+/*    Support for the FT_Outline type used to store glyph shapes of        */
+/*    most scalable font formats (specification).                          */
+/*                                                                         */
+/*  Copyright 1996-2003, 2005-2012 by                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTOUTLN_H__
+#define __FTOUTLN_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    outline_processing                                                 */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Outline Processing                                                 */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Functions to create, transform, and render vectorial glyph images. */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains routines used to create and destroy scalable */
+  /*    glyph images known as `outlines'.  These can also be measured,     */
+  /*    transformed, and converted into bitmaps and pixmaps.               */
+  /*                                                                       */
+  /* <Order>                                                               */
+  /*    FT_Outline                                                         */
+  /*    FT_OUTLINE_FLAGS                                                   */
+  /*    FT_Outline_New                                                     */
+  /*    FT_Outline_Done                                                    */
+  /*    FT_Outline_Copy                                                    */
+  /*    FT_Outline_Translate                                               */
+  /*    FT_Outline_Transform                                               */
+  /*    FT_Outline_Embolden                                                */
+  /*    FT_Outline_EmboldenXY                                              */
+  /*    FT_Outline_Reverse                                                 */
+  /*    FT_Outline_Check                                                   */
+  /*                                                                       */
+  /*    FT_Outline_Get_CBox                                                */
+  /*    FT_Outline_Get_BBox                                                */
+  /*                                                                       */
+  /*    FT_Outline_Get_Bitmap                                              */
+  /*    FT_Outline_Render                                                  */
+  /*                                                                       */
+  /*    FT_Outline_Decompose                                               */
+  /*    FT_Outline_Funcs                                                   */
+  /*    FT_Outline_MoveTo_Func                                             */
+  /*    FT_Outline_LineTo_Func                                             */
+  /*    FT_Outline_ConicTo_Func                                            */
+  /*    FT_Outline_CubicTo_Func                                            */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Decompose                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Walk over an outline's structure to decompose it into individual   */
+  /*    segments and Bézier arcs.  This function also emits `move to'      */
+  /*    operations to indicate the start of new contours in the outline.   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    outline        :: A pointer to the source target.                  */
+  /*                                                                       */
+  /*    func_interface :: A table of `emitters', i.e., function pointers   */
+  /*                      called during decomposition to indicate path     */
+  /*                      operations.                                      */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    user           :: A typeless pointer which is passed to each       */
+  /*                      emitter during the decomposition.  It can be     */
+  /*                      used to store the state during the               */
+  /*                      decomposition.                                   */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Decompose( FT_Outline*              outline,
+                        const FT_Outline_Funcs*  func_interface,
+                        void*                    user );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_New                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new outline of a given size.                              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library     :: A handle to the library object from where the       */
+  /*                   outline is allocated.  Note however that the new    */
+  /*                   outline will *not* necessarily be *freed*, when     */
+  /*                   destroying the library, by @FT_Done_FreeType.       */
+  /*                                                                       */
+  /*    numPoints   :: The maximum number of points within the outline.    */
+  /*                   Must be smaller than or equal to 0xFFFF (65535).    */
+  /*                                                                       */
+  /*    numContours :: The maximum number of contours within the outline.  */
+  /*                   This value must be in the range 0 to `numPoints'.   */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    anoutline   :: A handle to the new outline.                        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The reason why this function takes a `library' parameter is simply */
+  /*    to use the library's memory allocator.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_New( FT_Library   library,
+                  FT_UInt      numPoints,
+                  FT_Int       numContours,
+                  FT_Outline  *anoutline );
+
+
+  FT_EXPORT( FT_Error )
+  FT_Outline_New_Internal( FT_Memory    memory,
+                           FT_UInt      numPoints,
+                           FT_Int       numContours,
+                           FT_Outline  *anoutline );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Done                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Destroy an outline created with @FT_Outline_New.                   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle of the library object used to allocate the     */
+  /*               outline.                                                */
+  /*                                                                       */
+  /*    outline :: A pointer to the outline object to be discarded.        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    If the outline's `owner' field is not set, only the outline        */
+  /*    descriptor will be released.                                       */
+  /*                                                                       */
+  /*    The reason why this function takes an `library' parameter is       */
+  /*    simply to use ft_mem_free().                                       */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Done( FT_Library   library,
+                   FT_Outline*  outline );
+
+
+  FT_EXPORT( FT_Error )
+  FT_Outline_Done_Internal( FT_Memory    memory,
+                            FT_Outline*  outline );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Check                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Check the contents of an outline descriptor.                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    outline :: A handle to a source outline.                           */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Check( FT_Outline*  outline );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Get_CBox                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return an outline's `control box'.  The control box encloses all   */
+  /*    the outline's points, including Bézier control points.  Though it  */
+  /*    coincides with the exact bounding box for most glyphs, it can be   */
+  /*    slightly larger in some situations (like when rotating an outline  */
+  /*    which contains Bézier outside arcs).                               */
+  /*                                                                       */
+  /*    Computing the control box is very fast, while getting the bounding */
+  /*    box can take much more time as it needs to walk over all segments  */
+  /*    and arcs in the outline.  To get the latter, you can use the       */
+  /*    `ftbbox' component which is dedicated to this single task.         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    outline :: A pointer to the source outline descriptor.             */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    acbox   :: The outline's control box.                              */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    See @FT_Glyph_Get_CBox for a discussion of tricky fonts.           */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Outline_Get_CBox( const FT_Outline*  outline,
+                       FT_BBox           *acbox );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Translate                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Apply a simple translation to the points of an outline.            */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    outline :: A pointer to the target outline descriptor.             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    xOffset :: The horizontal offset.                                  */
+  /*                                                                       */
+  /*    yOffset :: The vertical offset.                                    */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Outline_Translate( const FT_Outline*  outline,
+                        FT_Pos             xOffset,
+                        FT_Pos             yOffset );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Copy                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Copy an outline into another one.  Both objects must have the      */
+  /*    same sizes (number of points & number of contours) when this       */
+  /*    function is called.                                                */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    source :: A handle to the source outline.                          */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    target :: A handle to the target outline.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Copy( const FT_Outline*  source,
+                   FT_Outline        *target );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Transform                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Apply a simple 2x2 matrix to all of an outline's points.  Useful   */
+  /*    for applying rotations, slanting, flipping, etc.                   */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    outline :: A pointer to the target outline descriptor.             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    matrix  :: A pointer to the transformation matrix.                 */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    You can use @FT_Outline_Translate if you need to translate the     */
+  /*    outline's points.                                                  */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Outline_Transform( const FT_Outline*  outline,
+                        const FT_Matrix*   matrix );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Embolden                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Embolden an outline.  The new outline will be at most 4~times      */
+  /*    `strength' pixels wider and higher.  You may think of the left and */
+  /*    bottom borders as unchanged.                                       */
+  /*                                                                       */
+  /*    Negative `strength' values to reduce the outline thickness are     */
+  /*    possible also.                                                     */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    outline  :: A handle to the target outline.                        */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    strength :: How strong the glyph is emboldened.  Expressed in      */
+  /*                26.6 pixel format.                                     */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The used algorithm to increase or decrease the thickness of the    */
+  /*    glyph doesn't change the number of points; this means that certain */
+  /*    situations like acute angles or intersections are sometimes        */
+  /*    handled incorrectly.                                               */
+  /*                                                                       */
+  /*    If you need `better' metrics values you should call                */
+  /*    @FT_Outline_Get_CBox or @FT_Outline_Get_BBox.                      */
+  /*                                                                       */
+  /*    Example call:                                                      */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );                   */
+  /*      if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE )             */
+  /*        FT_Outline_Embolden( &face->slot->outline, strength );         */
+  /*    }                                                                  */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Embolden( FT_Outline*  outline,
+                       FT_Pos       strength );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_EmboldenXY                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Embolden an outline.  The new outline will be `xstrength' pixels   */
+  /*    wider and `ystrength' pixels higher.  Otherwise, it is similar to  */
+  /*    @FT_Outline_Embolden, which uses the same strength in both         */
+  /*    directions.                                                        */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_EmboldenXY( FT_Outline*  outline,
+                         FT_Pos       xstrength,
+                         FT_Pos       ystrength );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Reverse                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Reverse the drawing direction of an outline.  This is used to      */
+  /*    ensure consistent fill conventions for mirrored glyphs.            */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    outline :: A pointer to the target outline descriptor.             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in     */
+  /*    the outline's `flags' field.                                       */
+  /*                                                                       */
+  /*    It shouldn't be used by a normal client application, unless it     */
+  /*    knows what it is doing.                                            */
+  /*                                                                       */
+  FT_EXPORT( void )
+  FT_Outline_Reverse( FT_Outline*  outline );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Get_Bitmap                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Render an outline within a bitmap.  The outline's image is simply  */
+  /*    OR-ed to the target bitmap.                                        */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle to a FreeType library object.                  */
+  /*                                                                       */
+  /*    outline :: A pointer to the source outline descriptor.             */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    abitmap :: A pointer to the target bitmap descriptor.              */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function does NOT CREATE the bitmap, it only renders an       */
+  /*    outline image within the one you pass to it!  Consequently, the    */
+  /*    various fields in `abitmap' should be set accordingly.             */
+  /*                                                                       */
+  /*    It will use the raster corresponding to the default glyph format.  */
+  /*                                                                       */
+  /*    The value of the `num_grays' field in `abitmap' is ignored.  If    */
+  /*    you select the gray-level rasterizer, and you want less than 256   */
+  /*    gray levels, you have to use @FT_Outline_Render directly.          */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Get_Bitmap( FT_Library        library,
+                         FT_Outline*       outline,
+                         const FT_Bitmap  *abitmap );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Outline_Render                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Render an outline within a bitmap using the current scan-convert.  */
+  /*    This function uses an @FT_Raster_Params structure as an argument,  */
+  /*    allowing advanced features like direct composition, translucency,  */
+  /*    etc.                                                               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle to a FreeType library object.                  */
+  /*                                                                       */
+  /*    outline :: A pointer to the source outline descriptor.             */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    params  :: A pointer to an @FT_Raster_Params structure used to     */
+  /*               describe the rendering operation.                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    You should know what you are doing and how @FT_Raster_Params works */
+  /*    to use this function.                                              */
+  /*                                                                       */
+  /*    The field `params.source' will be set to `outline' before the scan */
+  /*    converter is called, which means that the value you give to it is  */
+  /*    actually ignored.                                                  */
+  /*                                                                       */
+  /*    The gray-level rasterizer always uses 256 gray levels.  If you     */
+  /*    want less gray levels, you have to provide your own span callback. */
+  /*    See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the   */
+  /*    @FT_Raster_Params structure for more details.                      */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Outline_Render( FT_Library         library,
+                     FT_Outline*        outline,
+                     FT_Raster_Params*  params );
+
+
+ /**************************************************************************
+  *
+  * @enum:
+  *   FT_Orientation
+  *
+  * @description:
+  *   A list of values used to describe an outline's contour orientation.
+  *
+  *   The TrueType and PostScript specifications use different conventions
+  *   to determine whether outline contours should be filled or unfilled.
+  *
+  * @values:
+  *   FT_ORIENTATION_TRUETYPE ::
+  *     According to the TrueType specification, clockwise contours must
+  *     be filled, and counter-clockwise ones must be unfilled.
+  *
+  *   FT_ORIENTATION_POSTSCRIPT ::
+  *     According to the PostScript specification, counter-clockwise contours
+  *     must be filled, and clockwise ones must be unfilled.
+  *
+  *   FT_ORIENTATION_FILL_RIGHT ::
+  *     This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
+  *     remember that in TrueType, everything that is to the right of
+  *     the drawing direction of a contour must be filled.
+  *
+  *   FT_ORIENTATION_FILL_LEFT ::
+  *     This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
+  *     remember that in PostScript, everything that is to the left of
+  *     the drawing direction of a contour must be filled.
+  *
+  *   FT_ORIENTATION_NONE ::
+  *     The orientation cannot be determined.  That is, different parts of
+  *     the glyph have different orientation.
+  *
+  */
+  typedef enum  FT_Orientation_
+  {
+    FT_ORIENTATION_TRUETYPE   = 0,
+    FT_ORIENTATION_POSTSCRIPT = 1,
+    FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
+    FT_ORIENTATION_FILL_LEFT  = FT_ORIENTATION_POSTSCRIPT,
+    FT_ORIENTATION_NONE
+
+  } FT_Orientation;
+
+
+ /**************************************************************************
+  *
+  * @function:
+  *   FT_Outline_Get_Orientation
+  *
+  * @description:
+  *   This function analyzes a glyph outline and tries to compute its
+  *   fill orientation (see @FT_Orientation).  This is done by computing
+  *   the direction of each global horizontal and/or vertical extrema
+  *   within the outline.
+  *
+  *   Note that this will return @FT_ORIENTATION_TRUETYPE for empty
+  *   outlines.
+  *
+  * @input:
+  *   outline ::
+  *     A handle to the source outline.
+  *
+  * @return:
+  *   The orientation.
+  *
+  */
+  FT_EXPORT( FT_Orientation )
+  FT_Outline_Get_Orientation( FT_Outline*  outline );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTOUTLN_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8    */
+/* End:             */
diff --git a/core/include/thirdparties/freetype/freetype/ftpfr.h b/core/include/thirdparties/freetype/freetype/ftpfr.h
new file mode 100644
index 0000000..62cd67e
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftpfr.h
@@ -0,0 +1,172 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftpfr.h                                                                */
+/*                                                                         */
+/*    FreeType API for accessing PFR-specific data (specification only).   */
+/*                                                                         */
+/*  Copyright 2002, 2003, 2004, 2006, 2008, 2009 by                        */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTPFR_H__
+#define __FTPFR_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    pfr_fonts                                                          */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    PFR Fonts                                                          */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    PFR/TrueDoc specific API.                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of PFR-specific functions.   */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_Get_PFR_Metrics
+  *
+  * @description:
+  *    Return the outline and metrics resolutions of a given PFR face.
+  *
+  * @input:
+  *    face :: Handle to the input face.  It can be a non-PFR face.
+  *
+  * @output:
+  *    aoutline_resolution ::
+  *      Outline resolution.  This is equivalent to `face->units_per_EM'
+  *      for non-PFR fonts.  Optional (parameter can be NULL).
+  *
+  *    ametrics_resolution ::
+  *      Metrics resolution.  This is equivalent to `outline_resolution'
+  *      for non-PFR fonts.  Optional (parameter can be NULL).
+  *
+  *    ametrics_x_scale ::
+  *      A 16.16 fixed-point number used to scale distance expressed
+  *      in metrics units to device sub-pixels.  This is equivalent to
+  *      `face->size->x_scale', but for metrics only.  Optional (parameter
+  *      can be NULL).
+  *
+  *    ametrics_y_scale ::
+  *      Same as `ametrics_x_scale' but for the vertical direction.
+  *      optional (parameter can be NULL).
+  *
+  * @return:
+  *    FreeType error code.  0~means success.
+  *
+  * @note:
+  *   If the input face is not a PFR, this function will return an error.
+  *   However, in all cases, it will return valid values.
+  */
+  FT_EXPORT( FT_Error )
+  FT_Get_PFR_Metrics( FT_Face    face,
+                      FT_UInt   *aoutline_resolution,
+                      FT_UInt   *ametrics_resolution,
+                      FT_Fixed  *ametrics_x_scale,
+                      FT_Fixed  *ametrics_y_scale );
+
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_Get_PFR_Kerning
+  *
+  * @description:
+  *    Return the kerning pair corresponding to two glyphs in a PFR face.
+  *    The distance is expressed in metrics units, unlike the result of
+  *    @FT_Get_Kerning.
+  *
+  * @input:
+  *    face  :: A handle to the input face.
+  *
+  *    left  :: Index of the left glyph.
+  *
+  *    right :: Index of the right glyph.
+  *
+  * @output:
+  *    avector :: A kerning vector.
+  *
+  * @return:
+  *    FreeType error code.  0~means success.
+  *
+  * @note:
+  *    This function always return distances in original PFR metrics
+  *    units.  This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED
+  *    mode, which always returns distances converted to outline units.
+  *
+  *    You can use the value of the `x_scale' and `y_scale' parameters
+  *    returned by @FT_Get_PFR_Metrics to scale these to device sub-pixels.
+  */
+  FT_EXPORT( FT_Error )
+  FT_Get_PFR_Kerning( FT_Face     face,
+                      FT_UInt     left,
+                      FT_UInt     right,
+                      FT_Vector  *avector );
+
+
+ /**********************************************************************
+  *
+  * @function:
+  *    FT_Get_PFR_Advance
+  *
+  * @description:
+  *    Return a given glyph advance, expressed in original metrics units,
+  *    from a PFR font.
+  *
+  * @input:
+  *    face   :: A handle to the input face.
+  *
+  *    gindex :: The glyph index.
+  *
+  * @output:
+  *    aadvance :: The glyph advance in metrics units.
+  *
+  * @return:
+  *    FreeType error code.  0~means success.
+  *
+  * @note:
+  *    You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics
+  *    to convert the advance to device sub-pixels (i.e., 1/64th of pixels).
+  */
+  FT_EXPORT( FT_Error )
+  FT_Get_PFR_Advance( FT_Face   face,
+                      FT_UInt   gindex,
+                      FT_Pos   *aadvance );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTPFR_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftrender.h b/core/include/thirdparties/freetype/freetype/ftrender.h
new file mode 100644
index 0000000..b1437df
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftrender.h
@@ -0,0 +1,238 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftrender.h                                                             */
+/*                                                                         */
+/*    FreeType renderer modules public interface (specification).          */
+/*                                                                         */
+/*  Copyright 1996-2001, 2005, 2006, 2010 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTRENDER_H__
+#define __FTRENDER_H__
+
+
+#include "../ft2build.h"
+#include "ftmodapi.h"
+#include "ftglyph.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    module_management                                                  */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /* create a new glyph object */
+  typedef FT_Error
+  (*FT_Glyph_InitFunc)( FT_Glyph      glyph,
+                        FT_GlyphSlot  slot );
+
+  /* destroys a given glyph object */
+  typedef void
+  (*FT_Glyph_DoneFunc)( FT_Glyph  glyph );
+
+  typedef void
+  (*FT_Glyph_TransformFunc)( FT_Glyph          glyph,
+                             const FT_Matrix*  matrix,
+                             const FT_Vector*  delta );
+
+  typedef void
+  (*FT_Glyph_GetBBoxFunc)( FT_Glyph  glyph,
+                           FT_BBox*  abbox );
+
+  typedef FT_Error
+  (*FT_Glyph_CopyFunc)( FT_Glyph   source,
+                        FT_Glyph   target );
+
+  typedef FT_Error
+  (*FT_Glyph_PrepareFunc)( FT_Glyph      glyph,
+                           FT_GlyphSlot  slot );
+
+/* deprecated */
+#define FT_Glyph_Init_Func       FT_Glyph_InitFunc
+#define FT_Glyph_Done_Func       FT_Glyph_DoneFunc
+#define FT_Glyph_Transform_Func  FT_Glyph_TransformFunc
+#define FT_Glyph_BBox_Func       FT_Glyph_GetBBoxFunc
+#define FT_Glyph_Copy_Func       FT_Glyph_CopyFunc
+#define FT_Glyph_Prepare_Func    FT_Glyph_PrepareFunc
+
+
+  struct  FT_Glyph_Class_
+  {
+    FT_Long                 glyph_size;
+    FT_Glyph_Format         glyph_format;
+    FT_Glyph_InitFunc       glyph_init;
+    FT_Glyph_DoneFunc       glyph_done;
+    FT_Glyph_CopyFunc       glyph_copy;
+    FT_Glyph_TransformFunc  glyph_transform;
+    FT_Glyph_GetBBoxFunc    glyph_bbox;
+    FT_Glyph_PrepareFunc    glyph_prepare;
+  };
+
+
+  typedef FT_Error
+  (*FT_Renderer_RenderFunc)( FT_Renderer       renderer,
+                             FT_GlyphSlot      slot,
+                             FT_UInt           mode,
+                             const FT_Vector*  origin );
+
+  typedef FT_Error
+  (*FT_Renderer_TransformFunc)( FT_Renderer       renderer,
+                                FT_GlyphSlot      slot,
+                                const FT_Matrix*  matrix,
+                                const FT_Vector*  delta );
+
+
+  typedef void
+  (*FT_Renderer_GetCBoxFunc)( FT_Renderer   renderer,
+                              FT_GlyphSlot  slot,
+                              FT_BBox*      cbox );
+
+
+  typedef FT_Error
+  (*FT_Renderer_SetModeFunc)( FT_Renderer  renderer,
+                              FT_ULong     mode_tag,
+                              FT_Pointer   mode_ptr );
+
+/* deprecated identifiers */
+#define FTRenderer_render  FT_Renderer_RenderFunc
+#define FTRenderer_transform  FT_Renderer_TransformFunc
+#define FTRenderer_getCBox  FT_Renderer_GetCBoxFunc
+#define FTRenderer_setMode  FT_Renderer_SetModeFunc
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Renderer_Class                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The renderer module class descriptor.                              */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    root            :: The root @FT_Module_Class fields.               */
+  /*                                                                       */
+  /*    glyph_format    :: The glyph image format this renderer handles.   */
+  /*                                                                       */
+  /*    render_glyph    :: A method used to render the image that is in a  */
+  /*                       given glyph slot into a bitmap.                 */
+  /*                                                                       */
+  /*    transform_glyph :: A method used to transform the image that is in */
+  /*                       a given glyph slot.                             */
+  /*                                                                       */
+  /*    get_glyph_cbox  :: A method used to access the glyph's cbox.       */
+  /*                                                                       */
+  /*    set_mode        :: A method used to pass additional parameters.    */
+  /*                                                                       */
+  /*    raster_class    :: For @FT_GLYPH_FORMAT_OUTLINE renderers only.    */
+  /*                       This is a pointer to its raster's class.        */
+  /*                                                                       */
+  typedef struct  FT_Renderer_Class_
+  {
+    FT_Module_Class            root;
+
+    FT_Glyph_Format            glyph_format;
+
+    FT_Renderer_RenderFunc     render_glyph;
+    FT_Renderer_TransformFunc  transform_glyph;
+    FT_Renderer_GetCBoxFunc    get_glyph_cbox;
+    FT_Renderer_SetModeFunc    set_mode;
+
+    FT_Raster_Funcs*           raster_class;
+
+  } FT_Renderer_Class;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Renderer                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the current renderer for a given glyph format.            */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library :: A handle to the library object.                         */
+  /*                                                                       */
+  /*    format  :: The glyph format.                                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    A renderer handle.  0~if none found.                               */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    An error will be returned if a module already exists by that name, */
+  /*    or if the module requires a version of FreeType that is too great. */
+  /*                                                                       */
+  /*    To add a new renderer, simply use @FT_Add_Module.  To retrieve a   */
+  /*    renderer by its name, use @FT_Get_Module.                          */
+  /*                                                                       */
+  FT_EXPORT( FT_Renderer )
+  FT_Get_Renderer( FT_Library       library,
+                   FT_Glyph_Format  format );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Set_Renderer                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Set the current renderer to use, and set additional mode.          */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    library    :: A handle to the library object.                      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    renderer   :: A handle to the renderer object.                     */
+  /*                                                                       */
+  /*    num_params :: The number of additional parameters.                 */
+  /*                                                                       */
+  /*    parameters :: Additional parameters.                               */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    In case of success, the renderer will be used to convert glyph     */
+  /*    images in the renderer's known format into bitmaps.                */
+  /*                                                                       */
+  /*    This doesn't change the current renderer for other formats.        */
+  /*                                                                       */
+  /*    Currently, only the B/W renderer, if compiled with                 */
+  /*    FT_RASTER_OPTION_ANTI_ALIASING (providing a 5-levels               */
+  /*    anti-aliasing mode; this option must be set directly in            */
+  /*    `ftraster.c' and is undefined by default) accepts a single tag     */
+  /*    `pal5' to set its gray palette as a character string with          */
+  /*    5~elements.  Consequently, the third and fourth argument are zero  */
+  /*    normally.                                                          */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Set_Renderer( FT_Library     library,
+                   FT_Renderer    renderer,
+                   FT_UInt        num_params,
+                   FT_Parameter*  parameters );
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTRENDER_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftsizes.h b/core/include/thirdparties/freetype/freetype/ftsizes.h
new file mode 100644
index 0000000..a4b449b
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftsizes.h
@@ -0,0 +1,159 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftsizes.h                                                              */
+/*                                                                         */
+/*    FreeType size objects management (specification).                    */
+/*                                                                         */
+/*  Copyright 1996-2001, 2003, 2004, 2006, 2009 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Typical application would normally not need to use these functions.   */
+  /* However, they have been placed in a public API for the rare cases     */
+  /* where they are needed.                                                */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTSIZES_H__
+#define __FTSIZES_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    sizes_management                                                   */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Size Management                                                    */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Managing multiple sizes per face.                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    When creating a new face object (e.g., with @FT_New_Face), an      */
+  /*    @FT_Size object is automatically created and used to store all     */
+  /*    pixel-size dependent information, available in the `face->size'    */
+  /*    field.                                                             */
+  /*                                                                       */
+  /*    It is however possible to create more sizes for a given face,      */
+  /*    mostly in order to manage several character pixel sizes of the     */
+  /*    same font family and style.  See @FT_New_Size and @FT_Done_Size.   */
+  /*                                                                       */
+  /*    Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only           */
+  /*    modify the contents of the current `active' size; you thus need    */
+  /*    to use @FT_Activate_Size to change it.                             */
+  /*                                                                       */
+  /*    99% of applications won't need the functions provided here,        */
+  /*    especially if they use the caching sub-system, so be cautious      */
+  /*    when using these.                                                  */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_New_Size                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Create a new size object from a given face object.                 */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face :: A handle to a parent face object.                          */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    asize :: A handle to a new size object.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    You need to call @FT_Activate_Size in order to select the new size */
+  /*    for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size,      */
+  /*    @FT_Load_Glyph, @FT_Load_Char, etc.                                */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_New_Size( FT_Face   face,
+               FT_Size*  size );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Done_Size                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Discard a given size object.  Note that @FT_Done_Face              */
+  /*    automatically discards all size objects allocated with             */
+  /*    @FT_New_Size.                                                      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    size :: A handle to a target size object.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Done_Size( FT_Size  size );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Activate_Size                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Even though it is possible to create several size objects for a    */
+  /*    given face (see @FT_New_Size for details), functions like          */
+  /*    @FT_Load_Glyph or @FT_Load_Char only use the one which has been    */
+  /*    activated last to determine the `current character pixel size'.    */
+  /*                                                                       */
+  /*    This function can be used to `activate' a previously created size  */
+  /*    object.                                                            */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    size :: A handle to a target size object.                          */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    If `face' is the size's parent face object, this function changes  */
+  /*    the value of `face->size' to the input size handle.                */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Activate_Size( FT_Size  size );
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTSIZES_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftsnames.h b/core/include/thirdparties/freetype/freetype/ftsnames.h
new file mode 100644
index 0000000..a13db81
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftsnames.h
@@ -0,0 +1,200 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftsnames.h                                                             */
+/*                                                                         */
+/*    Simple interface to access SFNT name tables (which are used          */
+/*    to hold font names, copyright info, notices, etc.) (specification).  */
+/*                                                                         */
+/*    This is _not_ used to retrieve glyph names!                          */
+/*                                                                         */
+/*  Copyright 1996-2001, 2002, 2003, 2006, 2009, 2010 by                   */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FT_SFNT_NAMES_H__
+#define __FT_SFNT_NAMES_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    sfnt_names                                                         */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    SFNT Names                                                         */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Access the names embedded in TrueType and OpenType files.          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The TrueType and OpenType specifications allow the inclusion of    */
+  /*    a special `names table' in font files.  This table contains        */
+  /*    textual (and internationalized) information regarding the font,    */
+  /*    like family name, copyright, version, etc.                         */
+  /*                                                                       */
+  /*    The definitions below are used to access them if available.        */
+  /*                                                                       */
+  /*    Note that this has nothing to do with glyph names!                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_SfntName                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model an SFNT `name' table entry.              */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    platform_id :: The platform ID for `string'.                       */
+  /*                                                                       */
+  /*    encoding_id :: The encoding ID for `string'.                       */
+  /*                                                                       */
+  /*    language_id :: The language ID for `string'.                       */
+  /*                                                                       */
+  /*    name_id     :: An identifier for `string'.                         */
+  /*                                                                       */
+  /*    string      :: The `name' string.  Note that its format differs    */
+  /*                   depending on the (platform,encoding) pair.  It can  */
+  /*                   be a Pascal String, a UTF-16 one, etc.              */
+  /*                                                                       */
+  /*                   Generally speaking, the string is not               */
+  /*                   zero-terminated.  Please refer to the TrueType      */
+  /*                   specification for details.                          */
+  /*                                                                       */
+  /*    string_len  :: The length of `string' in bytes.                    */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Possible values for `platform_id', `encoding_id', `language_id',   */
+  /*    and `name_id' are given in the file `ttnameid.h'.  For details     */
+  /*    please refer to the TrueType or OpenType specification.            */
+  /*                                                                       */
+  /*    See also @TT_PLATFORM_XXX, @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX,       */
+  /*    @TT_ISO_ID_XXX, and @TT_MS_ID_XXX.                                 */
+  /*                                                                       */
+  typedef struct  FT_SfntName_
+  {
+    FT_UShort  platform_id;
+    FT_UShort  encoding_id;
+    FT_UShort  language_id;
+    FT_UShort  name_id;
+
+    FT_Byte*   string;      /* this string is *not* null-terminated! */
+    FT_UInt    string_len;  /* in bytes */
+
+  } FT_SfntName;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Sfnt_Name_Count                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the number of name strings in the SFNT `name' table.      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face :: A handle to the source face.                               */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The number of strings in the `name' table.                         */
+  /*                                                                       */
+  FT_EXPORT( FT_UInt )
+  FT_Get_Sfnt_Name_Count( FT_Face  face );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Sfnt_Name                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve a string of the SFNT `name' table for a given index.      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face  :: A handle to the source face.                              */
+  /*                                                                       */
+  /*    idx   :: The index of the `name' string.                           */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    aname :: The indexed @FT_SfntName structure.                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0~means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The `string' array returned in the `aname' structure is not        */
+  /*    null-terminated.  The application should deallocate it if it is no */
+  /*    longer in use.                                                     */
+  /*                                                                       */
+  /*    Use @FT_Get_Sfnt_Name_Count to get the total number of available   */
+  /*    `name' table entries, then do a loop until you get the right       */
+  /*    platform, encoding, and name ID.                                   */
+  /*                                                                       */
+  FT_EXPORT( FT_Error )
+  FT_Get_Sfnt_Name( FT_Face       face,
+                    FT_UInt       idx,
+                    FT_SfntName  *aname );
+
+
+  /***************************************************************************
+   *
+   * @constant:
+   *   FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY
+   *
+   * @description:
+   *   A constant used as the tag of @FT_Parameter structures to make
+   *   FT_Open_Face() ignore preferred family subfamily names in `name'
+   *   table since OpenType version 1.4.  For backwards compatibility with
+   *   legacy systems which has 4-face-per-family restriction.
+   *
+   */
+#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY  FT_MAKE_TAG( 'i', 'g', 'p', 'f' )
+
+
+  /***************************************************************************
+   *
+   * @constant:
+   *   FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY
+   *
+   * @description:
+   *   A constant used as the tag of @FT_Parameter structures to make
+   *   FT_Open_Face() ignore preferred subfamily names in `name' table since
+   *   OpenType version 1.4.  For backwards compatibility with legacy
+   *   systems which has 4-face-per-family restriction.
+   *
+   */
+#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY  FT_MAKE_TAG( 'i', 'g', 'p', 's' )
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FT_SFNT_NAMES_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftstroke.h b/core/include/thirdparties/freetype/freetype/ftstroke.h
new file mode 100644
index 0000000..05f9a13
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftstroke.h
@@ -0,0 +1,751 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftstroke.h                                                             */
+/*                                                                         */
+/*    FreeType path stroker (specification).                               */
+/*                                                                         */
+/*  Copyright 2002-2006, 2008, 2009, 2011-2012 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FT_STROKE_H__
+#define __FT_STROKE_H__
+
+#include "../ft2build.h"
+#include "ftoutln.h"
+#include "ftglyph.h"
+
+
+FT_BEGIN_HEADER
+
+
+ /************************************************************************
+  *
+  * @section:
+  *    glyph_stroker
+  *
+  * @title:
+  *    Glyph Stroker
+  *
+  * @abstract:
+  *    Generating bordered and stroked glyphs.
+  *
+  * @description:
+  *    This component generates stroked outlines of a given vectorial
+  *    glyph.  It also allows you to retrieve the `outside' and/or the
+  *    `inside' borders of the stroke.
+  *
+  *    This can be useful to generate `bordered' glyph, i.e., glyphs
+  *    displayed with a coloured (and anti-aliased) border around their
+  *    shape.
+  */
+
+
+ /**************************************************************
+  *
+  * @type:
+  *   FT_Stroker
+  *
+  * @description:
+  *   Opaque handler to a path stroker object.
+  */
+  typedef struct FT_StrokerRec_*  FT_Stroker;
+
+
+  /**************************************************************
+   *
+   * @enum:
+   *   FT_Stroker_LineJoin
+   *
+   * @description:
+   *   These values determine how two joining lines are rendered
+   *   in a stroker.
+   *
+   * @values:
+   *   FT_STROKER_LINEJOIN_ROUND ::
+   *     Used to render rounded line joins.  Circular arcs are used
+   *     to join two lines smoothly.
+   *
+   *   FT_STROKER_LINEJOIN_BEVEL ::
+   *     Used to render beveled line joins.  The outer corner of
+   *     the joined lines is filled by enclosing the triangular
+   *     region of the corner with a straight line between the
+   *     outer corners of each stroke.
+   *
+   *   FT_STROKER_LINEJOIN_MITER_FIXED ::
+   *     Used to render mitered line joins, with fixed bevels if the
+   *     miter limit is exceeded.  The outer edges of the strokes
+   *     for the two segments are extended until they meet at an
+   *     angle.  If the segments meet at too sharp an angle (such
+   *     that the miter would extend from the intersection of the
+   *     segments a distance greater than the product of the miter
+   *     limit value and the border radius), then a bevel join (see
+   *     above) is used instead.  This prevents long spikes being
+   *     created.  FT_STROKER_LINEJOIN_MITER_FIXED generates a miter
+   *     line join as used in PostScript and PDF.
+   *
+   *   FT_STROKER_LINEJOIN_MITER_VARIABLE ::
+   *   FT_STROKER_LINEJOIN_MITER ::
+   *     Used to render mitered line joins, with variable bevels if
+   *     the miter limit is exceeded.  The intersection of the
+   *     strokes is clipped at a line perpendicular to the bisector
+   *     of the angle between the strokes, at the distance from the
+   *     intersection of the segments equal to the product of the
+   *     miter limit value and the border radius.  This prevents
+   *     long spikes being created.
+   *     FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line
+   *     join as used in XPS.  FT_STROKER_LINEJOIN_MITER is an alias
+   *     for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for
+   *     backwards compatibility.
+   */
+  typedef enum  FT_Stroker_LineJoin_
+  {
+    FT_STROKER_LINEJOIN_ROUND          = 0,
+    FT_STROKER_LINEJOIN_BEVEL          = 1,
+    FT_STROKER_LINEJOIN_MITER_VARIABLE = 2,
+    FT_STROKER_LINEJOIN_MITER          = FT_STROKER_LINEJOIN_MITER_VARIABLE,
+    FT_STROKER_LINEJOIN_MITER_FIXED    = 3
+
+  } FT_Stroker_LineJoin;
+
+
+  /**************************************************************
+   *
+   * @enum:
+   *   FT_Stroker_LineCap
+   *
+   * @description:
+   *   These values determine how the end of opened sub-paths are
+   *   rendered in a stroke.
+   *
+   * @values:
+   *   FT_STROKER_LINECAP_BUTT ::
+   *     The end of lines is rendered as a full stop on the last
+   *     point itself.
+   *
+   *   FT_STROKER_LINECAP_ROUND ::
+   *     The end of lines is rendered as a half-circle around the
+   *     last point.
+   *
+   *   FT_STROKER_LINECAP_SQUARE ::
+   *     The end of lines is rendered as a square around the
+   *     last point.
+   */
+  typedef enum  FT_Stroker_LineCap_
+  {
+    FT_STROKER_LINECAP_BUTT = 0,
+    FT_STROKER_LINECAP_ROUND,
+    FT_STROKER_LINECAP_SQUARE
+
+  } FT_Stroker_LineCap;
+
+
+  /**************************************************************
+   *
+   * @enum:
+   *   FT_StrokerBorder
+   *
+   * @description:
+   *   These values are used to select a given stroke border
+   *   in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
+   *
+   * @values:
+   *   FT_STROKER_BORDER_LEFT ::
+   *     Select the left border, relative to the drawing direction.
+   *
+   *   FT_STROKER_BORDER_RIGHT ::
+   *     Select the right border, relative to the drawing direction.
+   *
+   * @note:
+   *   Applications are generally interested in the `inside' and `outside'
+   *   borders.  However, there is no direct mapping between these and the
+   *   `left' and `right' ones, since this really depends on the glyph's
+   *   drawing orientation, which varies between font formats.
+   *
+   *   You can however use @FT_Outline_GetInsideBorder and
+   *   @FT_Outline_GetOutsideBorder to get these.
+   */
+  typedef enum  FT_StrokerBorder_
+  {
+    FT_STROKER_BORDER_LEFT = 0,
+    FT_STROKER_BORDER_RIGHT
+
+  } FT_StrokerBorder;
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Outline_GetInsideBorder
+   *
+   * @description:
+   *   Retrieve the @FT_StrokerBorder value corresponding to the
+   *   `inside' borders of a given outline.
+   *
+   * @input:
+   *   outline ::
+   *     The source outline handle.
+   *
+   * @return:
+   *   The border index.  @FT_STROKER_BORDER_RIGHT for empty or invalid
+   *   outlines.
+   */
+  FT_EXPORT( FT_StrokerBorder )
+  FT_Outline_GetInsideBorder( FT_Outline*  outline );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Outline_GetOutsideBorder
+   *
+   * @description:
+   *   Retrieve the @FT_StrokerBorder value corresponding to the
+   *   `outside' borders of a given outline.
+   *
+   * @input:
+   *   outline ::
+   *     The source outline handle.
+   *
+   * @return:
+   *   The border index.  @FT_STROKER_BORDER_LEFT for empty or invalid
+   *   outlines.
+   */
+  FT_EXPORT( FT_StrokerBorder )
+  FT_Outline_GetOutsideBorder( FT_Outline*  outline );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_New
+   *
+   * @description:
+   *   Create a new stroker object.
+   *
+   * @input:
+   *   library ::
+   *     FreeType library handle.
+   *
+   * @output:
+   *   astroker ::
+   *     A new stroker object handle.  NULL in case of error.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_New( FT_Library   library,
+                  FT_Stroker  *astroker );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_Set
+   *
+   * @description:
+   *   Reset a stroker object's attributes.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   radius ::
+   *     The border radius.
+   *
+   *   line_cap ::
+   *     The line cap style.
+   *
+   *   line_join ::
+   *     The line join style.
+   *
+   *   miter_limit ::
+   *     The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and
+   *     FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles,
+   *     expressed as 16.16 fixed-point value.
+   *
+   * @note:
+   *   The radius is expressed in the same units as the outline
+   *   coordinates.
+   */
+  FT_EXPORT( void )
+  FT_Stroker_Set( FT_Stroker           stroker,
+                  FT_Fixed             radius,
+                  FT_Stroker_LineCap   line_cap,
+                  FT_Stroker_LineJoin  line_join,
+                  FT_Fixed             miter_limit );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_Rewind
+   *
+   * @description:
+   *   Reset a stroker object without changing its attributes.
+   *   You should call this function before beginning a new
+   *   series of calls to @FT_Stroker_BeginSubPath or
+   *   @FT_Stroker_EndSubPath.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   */
+  FT_EXPORT( void )
+  FT_Stroker_Rewind( FT_Stroker  stroker );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_ParseOutline
+   *
+   * @description:
+   *   A convenience function used to parse a whole outline with
+   *   the stroker.  The resulting outline(s) can be retrieved
+   *   later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   outline ::
+   *     The source outline.
+   *
+   *   opened ::
+   *     A boolean.  If~1, the outline is treated as an open path instead
+   *     of a closed one.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   If `opened' is~0 (the default), the outline is treated as a closed
+   *   path, and the stroker generates two distinct `border' outlines.
+   *
+   *   If `opened' is~1, the outline is processed as an open path, and the
+   *   stroker generates a single `stroke' outline.
+   *
+   *   This function calls @FT_Stroker_Rewind automatically.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_ParseOutline( FT_Stroker   stroker,
+                           FT_Outline*  outline,
+                           FT_Bool      opened );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_BeginSubPath
+   *
+   * @description:
+   *   Start a new sub-path in the stroker.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   to ::
+   *     A pointer to the start vector.
+   *
+   *   open ::
+   *     A boolean.  If~1, the sub-path is treated as an open one.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   This function is useful when you need to stroke a path that is
+   *   not stored as an @FT_Outline object.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_BeginSubPath( FT_Stroker  stroker,
+                           FT_Vector*  to,
+                           FT_Bool     open );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_EndSubPath
+   *
+   * @description:
+   *   Close the current sub-path in the stroker.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   You should call this function after @FT_Stroker_BeginSubPath.
+   *   If the subpath was not `opened', this function `draws' a
+   *   single line segment to the start position when needed.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_EndSubPath( FT_Stroker  stroker );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_LineTo
+   *
+   * @description:
+   *   `Draw' a single line segment in the stroker's current sub-path,
+   *   from the last position.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   to ::
+   *     A pointer to the destination point.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   You should call this function between @FT_Stroker_BeginSubPath and
+   *   @FT_Stroker_EndSubPath.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_LineTo( FT_Stroker  stroker,
+                     FT_Vector*  to );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_ConicTo
+   *
+   * @description:
+   *   `Draw' a single quadratic Bézier in the stroker's current sub-path,
+   *   from the last position.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   control ::
+   *     A pointer to a Bézier control point.
+   *
+   *   to ::
+   *     A pointer to the destination point.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   You should call this function between @FT_Stroker_BeginSubPath and
+   *   @FT_Stroker_EndSubPath.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_ConicTo( FT_Stroker  stroker,
+                      FT_Vector*  control,
+                      FT_Vector*  to );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_CubicTo
+   *
+   * @description:
+   *   `Draw' a single cubic Bézier in the stroker's current sub-path,
+   *   from the last position.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   control1 ::
+   *     A pointer to the first Bézier control point.
+   *
+   *   control2 ::
+   *     A pointer to second Bézier control point.
+   *
+   *   to ::
+   *     A pointer to the destination point.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   You should call this function between @FT_Stroker_BeginSubPath and
+   *   @FT_Stroker_EndSubPath.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_CubicTo( FT_Stroker  stroker,
+                      FT_Vector*  control1,
+                      FT_Vector*  control2,
+                      FT_Vector*  to );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_GetBorderCounts
+   *
+   * @description:
+   *   Call this function once you have finished parsing your paths
+   *   with the stroker.  It returns the number of points and
+   *   contours necessary to export one of the `border' or `stroke'
+   *   outlines generated by the stroker.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   border ::
+   *     The border index.
+   *
+   * @output:
+   *   anum_points ::
+   *     The number of points.
+   *
+   *   anum_contours ::
+   *     The number of contours.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   When an outline, or a sub-path, is `closed', the stroker generates
+   *   two independent `border' outlines, named `left' and `right'.
+   *
+   *   When the outline, or a sub-path, is `opened', the stroker merges
+   *   the `border' outlines with caps.  The `left' border receives all
+   *   points, while the `right' border becomes empty.
+   *
+   *   Use the function @FT_Stroker_GetCounts instead if you want to
+   *   retrieve the counts associated to both borders.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_GetBorderCounts( FT_Stroker        stroker,
+                              FT_StrokerBorder  border,
+                              FT_UInt          *anum_points,
+                              FT_UInt          *anum_contours );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_ExportBorder
+   *
+   * @description:
+   *   Call this function after @FT_Stroker_GetBorderCounts to
+   *   export the corresponding border to your own @FT_Outline
+   *   structure.
+   *
+   *   Note that this function appends the border points and
+   *   contours to your outline, but does not try to resize its
+   *   arrays.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   border ::
+   *     The border index.
+   *
+   *   outline ::
+   *     The target outline handle.
+   *
+   * @note:
+   *   Always call this function after @FT_Stroker_GetBorderCounts to
+   *   get sure that there is enough room in your @FT_Outline object to
+   *   receive all new data.
+   *
+   *   When an outline, or a sub-path, is `closed', the stroker generates
+   *   two independent `border' outlines, named `left' and `right'
+   *
+   *   When the outline, or a sub-path, is `opened', the stroker merges
+   *   the `border' outlines with caps. The `left' border receives all
+   *   points, while the `right' border becomes empty.
+   *
+   *   Use the function @FT_Stroker_Export instead if you want to
+   *   retrieve all borders at once.
+   */
+  FT_EXPORT( void )
+  FT_Stroker_ExportBorder( FT_Stroker        stroker,
+                           FT_StrokerBorder  border,
+                           FT_Outline*       outline );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_GetCounts
+   *
+   * @description:
+   *   Call this function once you have finished parsing your paths
+   *   with the stroker.  It returns the number of points and
+   *   contours necessary to export all points/borders from the stroked
+   *   outline/path.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   * @output:
+   *   anum_points ::
+   *     The number of points.
+   *
+   *   anum_contours ::
+   *     The number of contours.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Stroker_GetCounts( FT_Stroker  stroker,
+                        FT_UInt    *anum_points,
+                        FT_UInt    *anum_contours );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_Export
+   *
+   * @description:
+   *   Call this function after @FT_Stroker_GetBorderCounts to
+   *   export all borders to your own @FT_Outline structure.
+   *
+   *   Note that this function appends the border points and
+   *   contours to your outline, but does not try to resize its
+   *   arrays.
+   *
+   * @input:
+   *   stroker ::
+   *     The target stroker handle.
+   *
+   *   outline ::
+   *     The target outline handle.
+   */
+  FT_EXPORT( void )
+  FT_Stroker_Export( FT_Stroker   stroker,
+                     FT_Outline*  outline );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Stroker_Done
+   *
+   * @description:
+   *   Destroy a stroker object.
+   *
+   * @input:
+   *   stroker ::
+   *     A stroker handle.  Can be NULL.
+   */
+  FT_EXPORT( void )
+  FT_Stroker_Done( FT_Stroker  stroker );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Glyph_Stroke
+   *
+   * @description:
+   *   Stroke a given outline glyph object with a given stroker.
+   *
+   * @inout:
+   *   pglyph ::
+   *     Source glyph handle on input, new glyph handle on output.
+   *
+   * @input:
+   *   stroker ::
+   *     A stroker handle.
+   *
+   *   destroy ::
+   *     A Boolean.  If~1, the source glyph object is destroyed
+   *     on success.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   *
+   * @note:
+   *   The source glyph is untouched in case of error.
+   *
+   *   Adding stroke may yield a significantly wider and taller glyph
+   *   depending on how large of a radius was used to stroke the glyph.  You
+   *   may need to manually adjust horizontal and vertical advance amounts
+   *   to account for this added size.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Glyph_Stroke( FT_Glyph    *pglyph,
+                   FT_Stroker   stroker,
+                   FT_Bool      destroy );
+
+
+  /**************************************************************
+   *
+   * @function:
+   *   FT_Glyph_StrokeBorder
+   *
+   * @description:
+   *   Stroke a given outline glyph object with a given stroker, but
+   *   only return either its inside or outside border.
+   *
+   * @inout:
+   *   pglyph ::
+   *     Source glyph handle on input, new glyph handle on output.
+   *
+   * @input:
+   *   stroker ::
+   *     A stroker handle.
+   *
+   *   inside ::
+   *     A Boolean.  If~1, return the inside border, otherwise
+   *     the outside border.
+   *
+   *   destroy ::
+   *     A Boolean.  If~1, the source glyph object is destroyed
+   *     on success.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   *
+   * @note:
+   *   The source glyph is untouched in case of error.
+   *
+   *   Adding stroke may yield a significantly wider and taller glyph
+   *   depending on how large of a radius was used to stroke the glyph.  You
+   *   may need to manually adjust horizontal and vertical advance amounts
+   *   to account for this added size.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Glyph_StrokeBorder( FT_Glyph    *pglyph,
+                         FT_Stroker   stroker,
+                         FT_Bool      inside,
+                         FT_Bool      destroy );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FT_STROKE_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8    */
+/* End:             */
diff --git a/core/include/thirdparties/freetype/freetype/ftsynth.h b/core/include/thirdparties/freetype/freetype/ftsynth.h
new file mode 100644
index 0000000..55f32d6
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftsynth.h
@@ -0,0 +1,81 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftsynth.h                                                              */
+/*                                                                         */
+/*    FreeType synthesizing code for emboldening and slanting              */
+/*    (specification).                                                     */
+/*                                                                         */
+/*  Copyright 2000-2001, 2003, 2006, 2008, 2012 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*********                                                       *********/
+  /*********        WARNING, THIS IS ALPHA CODE!  THIS API         *********/
+  /*********    IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE    *********/
+  /*********            FREETYPE DEVELOPMENT TEAM                  *********/
+  /*********                                                       *********/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /* Main reason for not lifting the functions in this module to a  */
+  /* `standard' API is that the used parameters for emboldening and */
+  /* slanting are not configurable.  Consider the functions as a    */
+  /* code resource which should be copied into the application and  */
+  /* adapted to the particular needs.                               */
+
+
+#ifndef __FTSYNTH_H__
+#define __FTSYNTH_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+  /* Embolden a glyph by a `reasonable' value (which is highly a matter of */
+  /* taste).  This function is actually a convenience function, providing  */
+  /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden.           */
+  /*                                                                       */
+  /* For emboldened outlines the height, width, and advance metrics are    */
+  /* increased by the strength of the emboldening.  You can also call      */
+  /* @FT_Outline_Get_CBox to get precise values.                           */
+  FT_EXPORT( void )
+  FT_GlyphSlot_Embolden( FT_GlyphSlot  slot );
+
+  /* Slant an outline glyph to the right by about 12 degrees. */
+  FT_EXPORT( void )
+  FT_GlyphSlot_Oblique( FT_GlyphSlot  slot );
+
+  /* */
+
+FT_END_HEADER
+
+#endif /* __FTSYNTH_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftsystem.h b/core/include/thirdparties/freetype/freetype/ftsystem.h
new file mode 100644
index 0000000..6b41320
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftsystem.h
@@ -0,0 +1,354 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftsystem.h                                                             */
+/*                                                                         */
+/*    FreeType low-level system interface definition (specification).      */
+/*                                                                         */
+/*  Copyright 1996-2001, 2002, 2005, 2010 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTSYSTEM_H__
+#define __FTSYSTEM_H__
+
+
+#include "../ft2build.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*   system_interface                                                    */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*   System Interface                                                    */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*   How FreeType manages memory and i/o.                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*   This section contains various definitions related to memory         */
+  /*   management and i/o access.  You need to understand this             */
+  /*   information if you want to use a custom memory manager or you own   */
+  /*   i/o streams.                                                        */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                  M E M O R Y   M A N A G E M E N T                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************
+   *
+   * @type:
+   *   FT_Memory
+   *
+   * @description:
+   *   A handle to a given memory manager object, defined with an
+   *   @FT_MemoryRec structure.
+   *
+   */
+  typedef struct FT_MemoryRec_*  FT_Memory;
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   FT_Alloc_Func
+   *
+   * @description:
+   *   A function used to allocate `size' bytes from `memory'.
+   *
+   * @input:
+   *   memory ::
+   *     A handle to the source memory manager.
+   *
+   *   size ::
+   *     The size in bytes to allocate.
+   *
+   * @return:
+   *   Address of new memory block.  0~in case of failure.
+   *
+   */
+  typedef void*
+  (*FT_Alloc_Func)( FT_Memory  memory,
+                    long       size );
+
+  /* Sunliang.Liu 20100915 sync 221's revison. */

+  typedef void*

+	  (*FT_AllocDebug_Func)( FT_Memory  memory,

+	  long       size, const char* filename,  int line);

+
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   FT_Free_Func
+   *
+   * @description:
+   *   A function used to release a given block of memory.
+   *
+   * @input:
+   *   memory ::
+   *     A handle to the source memory manager.
+   *
+   *   block ::
+   *     The address of the target memory block.
+   *
+   */
+  typedef void
+  (*FT_Free_Func)( FT_Memory  memory,
+                   void*      block );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   FT_Realloc_Func
+   *
+   * @description:
+   *   A function used to re-allocate a given block of memory.
+   *
+   * @input:
+   *   memory ::
+   *     A handle to the source memory manager.
+   *
+   *   cur_size ::
+   *     The block's current size in bytes.
+   *
+   *   new_size ::
+   *     The block's requested new size.
+   *
+   *   block ::
+   *     The block's current address.
+   *
+   * @return:
+   *   New block address.  0~in case of memory shortage.
+   *
+   * @note:
+   *   In case of error, the old block must still be available.
+   *
+   */
+  typedef void*
+  (*FT_Realloc_Func)( FT_Memory  memory,
+                      long       cur_size,
+                      long       new_size,
+                      void*      block );
+
+
+  /*************************************************************************
+   *
+   * @struct:
+   *   FT_MemoryRec
+   *
+   * @description:
+   *   A structure used to describe a given memory manager to FreeType~2.
+   *
+   * @fields:
+   *   user ::
+   *     A generic typeless pointer for user data.
+   *
+   *   alloc ::
+   *     A pointer type to an allocation function.
+   *
+   *   free ::
+   *     A pointer type to an memory freeing function.
+   *
+   *   realloc ::
+   *     A pointer type to a reallocation function.
+   *
+   */
+  struct  FT_MemoryRec_
+  {
+    void*            user;
+    FT_Alloc_Func    alloc;
+	FT_AllocDebug_Func allocdebug;	/* Sunliang.Liu 20100915 sync 221's revison. */
+    FT_Free_Func     free;
+    FT_Realloc_Func  realloc;
+  };
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                       I / O   M A N A G E M E N T                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************
+   *
+   * @type:
+   *   FT_Stream
+   *
+   * @description:
+   *   A handle to an input stream.
+   *
+   */
+  typedef struct FT_StreamRec_*  FT_Stream;
+
+
+  /*************************************************************************
+   *
+   * @struct:
+   *   FT_StreamDesc
+   *
+   * @description:
+   *   A union type used to store either a long or a pointer.  This is used
+   *   to store a file descriptor or a `FILE*' in an input stream.
+   *
+   */
+  typedef union  FT_StreamDesc_
+  {
+    long   value;
+    void*  pointer;
+
+  } FT_StreamDesc;
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   FT_Stream_IoFunc
+   *
+   * @description:
+   *   A function used to seek and read data from a given input stream.
+   *
+   * @input:
+   *   stream ::
+   *     A handle to the source stream.
+   *
+   *   offset ::
+   *     The offset of read in stream (always from start).
+   *
+   *   buffer ::
+   *     The address of the read buffer.
+   *
+   *   count ::
+   *     The number of bytes to read from the stream.
+   *
+   * @return:
+   *   The number of bytes effectively read by the stream.
+   *
+   * @note:
+   *   This function might be called to perform a seek or skip operation
+   *   with a `count' of~0.  A non-zero return value then indicates an
+   *   error.
+   *
+   */
+  typedef unsigned long
+  (*FT_Stream_IoFunc)( FT_Stream       stream,
+                       unsigned long   offset,
+                       unsigned char*  buffer,
+                       unsigned long   count );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   FT_Stream_CloseFunc
+   *
+   * @description:
+   *   A function used to close a given input stream.
+   *
+   * @input:
+   *  stream ::
+   *     A handle to the target stream.
+   *
+   */
+  typedef void
+  (*FT_Stream_CloseFunc)( FT_Stream  stream );
+
+
+  /*************************************************************************
+   *
+   * @struct:
+   *   FT_StreamRec
+   *
+   * @description:
+   *   A structure used to describe an input stream.
+   *
+   * @input:
+   *   base ::
+   *     For memory-based streams, this is the address of the first stream
+   *     byte in memory.  This field should always be set to NULL for
+   *     disk-based streams.
+   *
+   *   size ::
+   *     The stream size in bytes.
+   *
+   *   pos ::
+   *     The current position within the stream.
+   *
+   *   descriptor ::
+   *     This field is a union that can hold an integer or a pointer.  It is
+   *     used by stream implementations to store file descriptors or `FILE*'
+   *     pointers.
+   *
+   *   pathname ::
+   *     This field is completely ignored by FreeType.  However, it is often
+   *     useful during debugging to use it to store the stream's filename
+   *     (where available).
+   *
+   *   read ::
+   *     The stream's input function.
+   *
+   *   close ::
+   *     The stream's close function.
+   *
+   *   memory ::
+   *     The memory manager to use to preload frames.  This is set
+   *     internally by FreeType and shouldn't be touched by stream
+   *     implementations.
+   *
+   *   cursor ::
+   *     This field is set and used internally by FreeType when parsing
+   *     frames.
+   *
+   *   limit ::
+   *     This field is set and used internally by FreeType when parsing
+   *     frames.
+   *
+   */
+  typedef struct  FT_StreamRec_
+  {
+    unsigned char*       base;
+    unsigned long        size;
+    unsigned long        pos;
+
+    FT_StreamDesc        descriptor;
+    FT_StreamDesc        pathname;
+    FT_Stream_IoFunc     read;
+    FT_Stream_CloseFunc  close;
+
+    FT_Memory            memory;
+    unsigned char*       cursor;
+    unsigned char*       limit;
+
+  } FT_StreamRec;
+
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTSYSTEM_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/fttrigon.h b/core/include/thirdparties/freetype/freetype/fttrigon.h
new file mode 100644
index 0000000..111c63e
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/fttrigon.h
@@ -0,0 +1,350 @@
+/***************************************************************************/
+/*                                                                         */
+/*  fttrigon.h                                                             */
+/*                                                                         */
+/*    FreeType trigonometric functions (specification).                    */
+/*                                                                         */
+/*  Copyright 2001, 2003, 2005, 2007, 2013 by                              */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTTRIGON_H__
+#define __FTTRIGON_H__
+
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*   computations                                                        */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************
+   *
+   * @type:
+   *   FT_Angle
+   *
+   * @description:
+   *   This type is used to model angle values in FreeType.  Note that the
+   *   angle is a 16.16 fixed-point value expressed in degrees.
+   *
+   */
+  typedef FT_Fixed  FT_Angle;
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_ANGLE_PI
+   *
+   * @description:
+   *   The angle pi expressed in @FT_Angle units.
+   *
+   */
+#define FT_ANGLE_PI  ( 180L << 16 )
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_ANGLE_2PI
+   *
+   * @description:
+   *   The angle 2*pi expressed in @FT_Angle units.
+   *
+   */
+#define FT_ANGLE_2PI  ( FT_ANGLE_PI * 2 )
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_ANGLE_PI2
+   *
+   * @description:
+   *   The angle pi/2 expressed in @FT_Angle units.
+   *
+   */
+#define FT_ANGLE_PI2  ( FT_ANGLE_PI / 2 )
+
+
+  /*************************************************************************
+   *
+   * @macro:
+   *   FT_ANGLE_PI4
+   *
+   * @description:
+   *   The angle pi/4 expressed in @FT_Angle units.
+   *
+   */
+#define FT_ANGLE_PI4  ( FT_ANGLE_PI / 4 )
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Sin
+   *
+   * @description:
+   *   Return the sinus of a given angle in fixed-point format.
+   *
+   * @input:
+   *   angle ::
+   *     The input angle.
+   *
+   * @return:
+   *   The sinus value.
+   *
+   * @note:
+   *   If you need both the sinus and cosinus for a given angle, use the
+   *   function @FT_Vector_Unit.
+   *
+   */
+  FT_EXPORT( FT_Fixed )
+  FT_Sin( FT_Angle  angle );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Cos
+   *
+   * @description:
+   *   Return the cosinus of a given angle in fixed-point format.
+   *
+   * @input:
+   *   angle ::
+   *     The input angle.
+   *
+   * @return:
+   *   The cosinus value.
+   *
+   * @note:
+   *   If you need both the sinus and cosinus for a given angle, use the
+   *   function @FT_Vector_Unit.
+   *
+   */
+  FT_EXPORT( FT_Fixed )
+  FT_Cos( FT_Angle  angle );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Tan
+   *
+   * @description:
+   *   Return the tangent of a given angle in fixed-point format.
+   *
+   * @input:
+   *   angle ::
+   *     The input angle.
+   *
+   * @return:
+   *   The tangent value.
+   *
+   */
+  FT_EXPORT( FT_Fixed )
+  FT_Tan( FT_Angle  angle );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Atan2
+   *
+   * @description:
+   *   Return the arc-tangent corresponding to a given vector (x,y) in
+   *   the 2d plane.
+   *
+   * @input:
+   *   x ::
+   *     The horizontal vector coordinate.
+   *
+   *   y ::
+   *     The vertical vector coordinate.
+   *
+   * @return:
+   *   The arc-tangent value (i.e. angle).
+   *
+   */
+  FT_EXPORT( FT_Angle )
+  FT_Atan2( FT_Fixed  x,
+            FT_Fixed  y );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Angle_Diff
+   *
+   * @description:
+   *   Return the difference between two angles.  The result is always
+   *   constrained to the ]-PI..PI] interval.
+   *
+   * @input:
+   *   angle1 ::
+   *     First angle.
+   *
+   *   angle2 ::
+   *     Second angle.
+   *
+   * @return:
+   *   Constrained value of `value2-value1'.
+   *
+   */
+  FT_EXPORT( FT_Angle )
+  FT_Angle_Diff( FT_Angle  angle1,
+                 FT_Angle  angle2 );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Vector_Unit
+   *
+   * @description:
+   *   Return the unit vector corresponding to a given angle.  After the
+   *   call, the value of `vec.x' will be `sin(angle)', and the value of
+   *   `vec.y' will be `cos(angle)'.
+   *
+   *   This function is useful to retrieve both the sinus and cosinus of a
+   *   given angle quickly.
+   *
+   * @output:
+   *   vec ::
+   *     The address of target vector.
+   *
+   * @input:
+   *   angle ::
+   *     The address of angle.
+   *
+   */
+  FT_EXPORT( void )
+  FT_Vector_Unit( FT_Vector*  vec,
+                  FT_Angle    angle );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Vector_Rotate
+   *
+   * @description:
+   *   Rotate a vector by a given angle.
+   *
+   * @inout:
+   *   vec ::
+   *     The address of target vector.
+   *
+   * @input:
+   *   angle ::
+   *     The address of angle.
+   *
+   */
+  FT_EXPORT( void )
+  FT_Vector_Rotate( FT_Vector*  vec,
+                    FT_Angle    angle );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Vector_Length
+   *
+   * @description:
+   *   Return the length of a given vector.
+   *
+   * @input:
+   *   vec ::
+   *     The address of target vector.
+   *
+   * @return:
+   *   The vector length, expressed in the same units that the original
+   *   vector coordinates.
+   *
+   */
+  FT_EXPORT( FT_Fixed )
+  FT_Vector_Length( FT_Vector*  vec );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Vector_Polarize
+   *
+   * @description:
+   *   Compute both the length and angle of a given vector.
+   *
+   * @input:
+   *   vec ::
+   *     The address of source vector.
+   *
+   * @output:
+   *   length ::
+   *     The vector length.
+   *
+   *   angle ::
+   *     The vector angle.
+   *
+   */
+  FT_EXPORT( void )
+  FT_Vector_Polarize( FT_Vector*  vec,
+                      FT_Fixed   *length,
+                      FT_Angle   *angle );
+
+
+  /*************************************************************************
+   *
+   * @function:
+   *   FT_Vector_From_Polar
+   *
+   * @description:
+   *   Compute vector coordinates from a length and angle.
+   *
+   * @output:
+   *   vec ::
+   *     The address of source vector.
+   *
+   * @input:
+   *   length ::
+   *     The vector length.
+   *
+   *   angle ::
+   *     The vector angle.
+   *
+   */
+  FT_EXPORT( void )
+  FT_Vector_From_Polar( FT_Vector*  vec,
+                        FT_Fixed    length,
+                        FT_Angle    angle );
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTTRIGON_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftttdrv.h b/core/include/thirdparties/freetype/freetype/ftttdrv.h
new file mode 100644
index 0000000..01b25a4
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftttdrv.h
@@ -0,0 +1,150 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftttdrv.h                                                              */
+/*                                                                         */
+/*    FreeType API for controlling the TrueType driver                     */
+/*    (specification only).                                                */
+/*                                                                         */
+/*  Copyright 2013 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTTTDRV_H__
+#define __FTTTDRV_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @section:
+   *   tt_driver
+   *
+   * @title:
+   *   The TrueType driver
+   *
+   * @abstract:
+   *   Controlling the TrueType driver module.
+   *
+   * @description:
+   *   While FreeType's TrueType driver doesn't expose API functions by
+   *   itself, it is possible to control its behaviour with @FT_Property_Set
+   *   and @FT_Property_Get.  The following lists the available properties
+   *   together with the necessary macros and structures.
+   *
+   *   The TrueType driver's module name is `truetype'.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @property:
+   *   interpreter-version
+   *
+   * @description:
+   *   Currently, two versions are available which represent the bytecode
+   *   interpreter with and without subpixel hinting support,
+   *   respectively.  The default is subpixel support if
+   *   TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel
+   *   support otherwise (since it isn't available then).
+   *
+   *   If subpixel hinting is on, many TrueType bytecode instructions
+   *   behave differently compared to B/W or grayscale rendering.  The
+   *   main idea is to render at a much increased horizontal resolution,
+   *   then sampling down the created output to subpixel precision.
+   *   However, many older fonts are not suited to this and must be
+   *   specially taken care of by applying (hardcoded) font-specific
+   *   tweaks.
+   *
+   *   Details on subpixel hinting and some of the necessary tweaks can be
+   *   found in Greg Hitchcock's whitepaper at
+   *   `http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
+   *
+   *   The following example code demonstrates how to activate subpixel
+   *   hinting (omitting the error handling).
+   *
+   *   {
+   *     FT_Library  library;
+   *     FT_Face     face;
+   *     FT_UInt     interpreter_version = TT_INTERPRETER_VERSION_38;
+   *
+   *
+   *     FT_Init_FreeType( &library );
+   *
+   *     FT_Property_Set( library, "truetype",
+   *                               "interpreter-version",
+   *                               &interpreter_version );
+   *   }
+   *
+   * @note:
+   *   This property can be used with @FT_Property_Get also.
+   *
+   */
+
+
+  /**************************************************************************
+   *
+   * @enum:
+   *   TT_INTERPRETER_VERSION_XXX
+   *
+   * @description:
+   *   A list of constants used for the @interpreter-version property to
+   *   select the hinting engine for Truetype fonts.
+   *
+   *   The numeric value in the constant names represents the version
+   *   number as returned by the `GETINFO' bytecode instruction.
+   *
+   * @values:
+   *   TT_INTERPRETER_VERSION_35 ::
+   *     Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
+   *     Windows~98; only grayscale and B/W rasterizing is supported.
+   *
+   *   TT_INTERPRETER_VERSION_38 ::
+   *     Version~38 corresponds to MS rasterizer v.1.9; it is roughly
+   *     equivalent to the hinting provided by DirectWrite ClearType (as
+   *     can be found, for example, in the Internet Explorer~9 running on
+   *     Windows~7).
+   *
+   * @note:
+   *   This property controls the behaviour of the bytecode interpreter
+   *   and thus how outlines get hinted.  It does *not* control how glyph
+   *   get rasterized!  In particular, it does not control subpixel color
+   *   filtering.
+   *
+   *   If FreeType has not been compiled with configuration option
+   *   FT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 causes an
+   *   `FT_Err_Unimplemented_Feature' error.
+   *
+   */
+#define TT_INTERPRETER_VERSION_35  35
+#define TT_INTERPRETER_VERSION_38  38
+
+
+ /* */
+
+FT_END_HEADER
+
+
+#endif /* __FTTTDRV_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/fttypes.h b/core/include/thirdparties/freetype/freetype/fttypes.h
new file mode 100644
index 0000000..4d11bed
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/fttypes.h
@@ -0,0 +1,598 @@
+/***************************************************************************/
+/*                                                                         */
+/*  fttypes.h                                                              */
+/*                                                                         */
+/*    FreeType simple types definitions (specification only).              */
+/*                                                                         */
+/*  Copyright 1996-2002, 2004, 2006-2009, 2012, 2013 by                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTTYPES_H__
+#define __FTTYPES_H__
+
+
+#include "../ft2build.h"
+#include "config/ftconfig.h"
+#include "ftsystem.h"
+#include "ftimage.h"
+
+#include <stddef.h>
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    basic_types                                                        */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Basic Data Types                                                   */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    The basic data types defined by the library.                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the basic data types defined by FreeType~2,  */
+  /*    ranging from simple scalar types to bitmap descriptors.  More      */
+  /*    font-specific structures are defined in a different section.       */
+  /*                                                                       */
+  /* <Order>                                                               */
+  /*    FT_Byte                                                            */
+  /*    FT_Bytes                                                           */
+  /*    FT_Char                                                            */
+  /*    FT_Int                                                             */
+  /*    FT_UInt                                                            */
+  /*    FT_Int16                                                           */
+  /*    FT_UInt16                                                          */
+  /*    FT_Int32                                                           */
+  /*    FT_UInt32                                                          */
+  /*    FT_Short                                                           */
+  /*    FT_UShort                                                          */
+  /*    FT_Long                                                            */
+  /*    FT_ULong                                                           */
+  /*    FT_Bool                                                            */
+  /*    FT_Offset                                                          */
+  /*    FT_PtrDist                                                         */
+  /*    FT_String                                                          */
+  /*    FT_Tag                                                             */
+  /*    FT_Error                                                           */
+  /*    FT_Fixed                                                           */
+  /*    FT_Pointer                                                         */
+  /*    FT_Pos                                                             */
+  /*    FT_Vector                                                          */
+  /*    FT_BBox                                                            */
+  /*    FT_Matrix                                                          */
+  /*    FT_FWord                                                           */
+  /*    FT_UFWord                                                          */
+  /*    FT_F2Dot14                                                         */
+  /*    FT_UnitVector                                                      */
+  /*    FT_F26Dot6                                                         */
+  /*                                                                       */
+  /*                                                                       */
+  /*    FT_Generic                                                         */
+  /*    FT_Generic_Finalizer                                               */
+  /*                                                                       */
+  /*    FT_Bitmap                                                          */
+  /*    FT_Pixel_Mode                                                      */
+  /*    FT_Palette_Mode                                                    */
+  /*    FT_Glyph_Format                                                    */
+  /*    FT_IMAGE_TAG                                                       */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Bool                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef of unsigned char, used for simple booleans.  As usual,   */
+  /*    values 1 and~0 represent true and false, respectively.             */
+  /*                                                                       */
+  typedef unsigned char  FT_Bool;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_FWord                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A signed 16-bit integer used to store a distance in original font  */
+  /*    units.                                                             */
+  /*                                                                       */
+  typedef signed short  FT_FWord;   /* distance in FUnits */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_UFWord                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An unsigned 16-bit integer used to store a distance in original    */
+  /*    font units.                                                        */
+  /*                                                                       */
+  typedef unsigned short  FT_UFWord;  /* unsigned distance */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Char                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple typedef for the _signed_ char type.                       */
+  /*                                                                       */
+  typedef signed char  FT_Char;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Byte                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple typedef for the _unsigned_ char type.                     */
+  /*                                                                       */
+  typedef unsigned char  FT_Byte;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Bytes                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for constant memory areas.                               */
+  /*                                                                       */
+  typedef const FT_Byte*  FT_Bytes;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Tag                                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for 32-bit tags (as used in the SFNT format).            */
+  /*                                                                       */
+  typedef FT_UInt32  FT_Tag;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_String                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple typedef for the char type, usually used for strings.      */
+  /*                                                                       */
+  typedef char  FT_String;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Short                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for signed short.                                        */
+  /*                                                                       */
+  typedef signed short  FT_Short;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_UShort                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for unsigned short.                                      */
+  /*                                                                       */
+  typedef unsigned short  FT_UShort;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Int                                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for the int type.                                        */
+  /*                                                                       */
+  typedef signed int  FT_Int;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_UInt                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for the unsigned int type.                               */
+  /*                                                                       */
+  typedef unsigned int  FT_UInt;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Long                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for signed long.                                         */
+  /*                                                                       */
+  typedef signed long  FT_Long;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_ULong                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A typedef for unsigned long.                                       */
+  /*                                                                       */
+  typedef unsigned long  FT_ULong;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_F2Dot14                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A signed 2.14 fixed-point type used for unit vectors.              */
+  /*                                                                       */
+  typedef signed short  FT_F2Dot14;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_F26Dot6                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A signed 26.6 fixed-point type used for vectorial pixel            */
+  /*    coordinates.                                                       */
+  /*                                                                       */
+  typedef signed long  FT_F26Dot6;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Fixed                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This type is used to store 16.16 fixed-point values, like scaling  */
+  /*    values or matrix coefficients.                                     */
+  /*                                                                       */
+  typedef signed long  FT_Fixed;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Error                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The FreeType error code type.  A value of~0 is always interpreted  */
+  /*    as a successful operation.                                         */
+  /*                                                                       */
+  typedef int  FT_Error;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Pointer                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple typedef for a typeless pointer.                           */
+  /*                                                                       */
+  typedef void*  FT_Pointer;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_Offset                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This is equivalent to the ANSI~C `size_t' type, i.e., the largest  */
+  /*    _unsigned_ integer type used to express a file size or position,   */
+  /*    or a memory block size.                                            */
+  /*                                                                       */
+  typedef size_t  FT_Offset;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_PtrDist                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the       */
+  /*    largest _signed_ integer type used to express the distance         */
+  /*    between two pointers.                                              */
+  /*                                                                       */
+  typedef ft_ptrdiff_t  FT_PtrDist;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_UnitVector                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple structure used to store a 2D vector unit vector.  Uses    */
+  /*    FT_F2Dot14 types.                                                  */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    x :: Horizontal coordinate.                                        */
+  /*                                                                       */
+  /*    y :: Vertical coordinate.                                          */
+  /*                                                                       */
+  typedef struct  FT_UnitVector_
+  {
+    FT_F2Dot14  x;
+    FT_F2Dot14  y;
+
+  } FT_UnitVector;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Matrix                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple structure used to store a 2x2 matrix.  Coefficients are   */
+  /*    in 16.16 fixed-point format.  The computation performed is:        */
+  /*                                                                       */
+  /*       {                                                               */
+  /*          x' = x*xx + y*xy                                             */
+  /*          y' = x*yx + y*yy                                             */
+  /*       }                                                               */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    xx :: Matrix coefficient.                                          */
+  /*                                                                       */
+  /*    xy :: Matrix coefficient.                                          */
+  /*                                                                       */
+  /*    yx :: Matrix coefficient.                                          */
+  /*                                                                       */
+  /*    yy :: Matrix coefficient.                                          */
+  /*                                                                       */
+  typedef struct  FT_Matrix_
+  {
+    FT_Fixed  xx, xy;
+    FT_Fixed  yx, yy;
+
+  } FT_Matrix;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Data                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Read-only binary data represented as a pointer and a length.       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    pointer :: The data.                                               */
+  /*                                                                       */
+  /*    length  :: The length of the data in bytes.                        */
+  /*                                                                       */
+  typedef struct  FT_Data_
+  {
+    const FT_Byte*  pointer;
+    FT_Int          length;
+
+  } FT_Data;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Generic_Finalizer                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Describe a function used to destroy the `client' data of any       */
+  /*    FreeType object.  See the description of the @FT_Generic type for  */
+  /*    details of usage.                                                  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    The address of the FreeType object which is under finalization.    */
+  /*    Its client data is accessed through its `generic' field.           */
+  /*                                                                       */
+  typedef void  (*FT_Generic_Finalizer)(void*  object);
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Generic                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Client applications often need to associate their own data to a    */
+  /*    variety of FreeType core objects.  For example, a text layout API  */
+  /*    might want to associate a glyph cache to a given size object.      */
+  /*                                                                       */
+  /*    Some FreeType object contains a `generic' field, of type           */
+  /*    FT_Generic, which usage is left to client applications and font    */
+  /*    servers.                                                           */
+  /*                                                                       */
+  /*    It can be used to store a pointer to client-specific data, as well */
+  /*    as the address of a `finalizer' function, which will be called by  */
+  /*    FreeType when the object is destroyed (for example, the previous   */
+  /*    client example would put the address of the glyph cache destructor */
+  /*    in the `finalizer' field).                                         */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    data      :: A typeless pointer to any client-specified data. This */
+  /*                 field is completely ignored by the FreeType library.  */
+  /*                                                                       */
+  /*    finalizer :: A pointer to a `generic finalizer' function, which    */
+  /*                 will be called when the object is destroyed.  If this */
+  /*                 field is set to NULL, no code will be called.         */
+  /*                                                                       */
+  typedef struct  FT_Generic_
+  {
+    void*                 data;
+    FT_Generic_Finalizer  finalizer;
+
+  } FT_Generic;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_MAKE_TAG                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This macro converts four-letter tags which are used to label       */
+  /*    TrueType tables into an unsigned long to be used within FreeType.  */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The produced values *must* be 32-bit integers.  Don't redefine     */
+  /*    this macro.                                                        */
+  /*                                                                       */
+#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
+          (FT_Tag)                        \
+          ( ( (FT_ULong)_x1 << 24 ) |     \
+            ( (FT_ULong)_x2 << 16 ) |     \
+            ( (FT_ULong)_x3 <<  8 ) |     \
+              (FT_ULong)_x4         )
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*                                                                       */
+  /*                    L I S T   M A N A G E M E N T                      */
+  /*                                                                       */
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    list_processing                                                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_ListNode                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*     Many elements and objects in FreeType are listed through an       */
+  /*     @FT_List record (see @FT_ListRec).  As its name suggests, an      */
+  /*     FT_ListNode is a handle to a single list element.                 */
+  /*                                                                       */
+  typedef struct FT_ListNodeRec_*  FT_ListNode;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    FT_List                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a list record (see @FT_ListRec).                       */
+  /*                                                                       */
+  typedef struct FT_ListRec_*  FT_List;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_ListNodeRec                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to hold a single list element.                    */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    prev :: The previous element in the list.  NULL if first.          */
+  /*                                                                       */
+  /*    next :: The next element in the list.  NULL if last.               */
+  /*                                                                       */
+  /*    data :: A typeless pointer to the listed object.                   */
+  /*                                                                       */
+  typedef struct  FT_ListNodeRec_
+  {
+    FT_ListNode  prev;
+    FT_ListNode  next;
+    void*        data;
+
+  } FT_ListNodeRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_ListRec                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to hold a simple doubly-linked list.  These are   */
+  /*    used in many parts of FreeType.                                    */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    head :: The head (first element) of doubly-linked list.            */
+  /*                                                                       */
+  /*    tail :: The tail (last element) of doubly-linked list.             */
+  /*                                                                       */
+  typedef struct  FT_ListRec_
+  {
+    FT_ListNode  head;
+    FT_ListNode  tail;
+
+  } FT_ListRec;
+
+
+  /* */
+
+#define FT_IS_EMPTY( list )  ( (list).head == 0 )
+#define FT_BOOL( x )  ( (FT_Bool)( x ) )
+
+  /* concatenate C tokens */
+#define FT_ERR_XCAT( x, y )  x ## y
+#define FT_ERR_CAT( x, y )   FT_ERR_XCAT( x, y )
+
+  /* see `ftmoderr.h' for descriptions of the following macros */
+
+#define FT_ERR( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
+
+#define FT_ERROR_BASE( x )    ( (x) & 0xFF )
+#define FT_ERROR_MODULE( x )  ( (x) & 0xFF00U )
+
+#define FT_ERR_EQ( x, e )                                        \
+          ( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) )
+#define FT_ERR_NEQ( x, e )                                       \
+          ( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) )
+
+
+FT_END_HEADER
+
+#endif /* __FTTYPES_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ftwinfnt.h b/core/include/thirdparties/freetype/freetype/ftwinfnt.h
new file mode 100644
index 0000000..af4334e
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftwinfnt.h
@@ -0,0 +1,274 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftwinfnt.h                                                             */
+/*                                                                         */
+/*    FreeType API for accessing Windows fnt-specific data.                */
+/*                                                                         */
+/*  Copyright 2003, 2004, 2008 by                                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTWINFNT_H__
+#define __FTWINFNT_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    winfnt_fonts                                                       */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Window FNT Files                                                   */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Windows FNT specific API.                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the declaration of Windows FNT specific      */
+  /*    functions.                                                         */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************
+   *
+   * @enum:
+   *   FT_WinFNT_ID_XXX
+   *
+   * @description:
+   *   A list of valid values for the `charset' byte in
+   *   @FT_WinFNT_HeaderRec.  Exact mapping tables for the various cpXXXX
+   *   encodings (except for cp1361) can be found at ftp://ftp.unicode.org
+   *   in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory.  cp1361 is
+   *   roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
+   *
+   * @values:
+   *   FT_WinFNT_ID_DEFAULT ::
+   *     This is used for font enumeration and font creation as a
+   *     `don't care' value.  Valid font files don't contain this value.
+   *     When querying for information about the character set of the font
+   *     that is currently selected into a specified device context, this
+   *     return value (of the related Windows API) simply denotes failure.
+   *
+   *   FT_WinFNT_ID_SYMBOL ::
+   *     There is no known mapping table available.
+   *
+   *   FT_WinFNT_ID_MAC ::
+   *     Mac Roman encoding.
+   *
+   *   FT_WinFNT_ID_OEM ::
+   *     From Michael Pöttgen <michael@poettgen.de>:
+   *
+   *       The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
+   *       is used for the charset of vector fonts, like `modern.fon',
+   *       `roman.fon', and `script.fon' on Windows.
+   *
+   *       The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value
+   *       specifies a character set that is operating-system dependent.
+   *
+   *       The `IFIMETRICS' documentation from the `Windows Driver
+   *       Development Kit' says: This font supports an OEM-specific
+   *       character set.  The OEM character set is system dependent.
+   *
+   *       In general OEM, as opposed to ANSI (i.e., cp1252), denotes the
+   *       second default codepage that most international versions of
+   *       Windows have.  It is one of the OEM codepages from
+   *
+   *         http://www.microsoft.com/globaldev/reference/cphome.mspx,
+   *
+   *       and is used for the `DOS boxes', to support legacy applications.
+   *       A German Windows version for example usually uses ANSI codepage
+   *       1252 and OEM codepage 850.
+   *
+   *   FT_WinFNT_ID_CP874 ::
+   *     A superset of Thai TIS 620 and ISO 8859-11.
+   *
+   *   FT_WinFNT_ID_CP932 ::
+   *     A superset of Japanese Shift-JIS (with minor deviations).
+   *
+   *   FT_WinFNT_ID_CP936 ::
+   *     A superset of simplified Chinese GB 2312-1980 (with different
+   *     ordering and minor deviations).
+   *
+   *   FT_WinFNT_ID_CP949 ::
+   *     A superset of Korean Hangul KS~C 5601-1987 (with different
+   *     ordering and minor deviations).
+   *
+   *   FT_WinFNT_ID_CP950 ::
+   *     A superset of traditional Chinese Big~5 ETen (with different
+   *     ordering and minor deviations).
+   *
+   *   FT_WinFNT_ID_CP1250 ::
+   *     A superset of East European ISO 8859-2 (with slightly different
+   *     ordering).
+   *
+   *   FT_WinFNT_ID_CP1251 ::
+   *     A superset of Russian ISO 8859-5 (with different ordering).
+   *
+   *   FT_WinFNT_ID_CP1252 ::
+   *     ANSI encoding.  A superset of ISO 8859-1.
+   *
+   *   FT_WinFNT_ID_CP1253 ::
+   *     A superset of Greek ISO 8859-7 (with minor modifications).
+   *
+   *   FT_WinFNT_ID_CP1254 ::
+   *     A superset of Turkish ISO 8859-9.
+   *
+   *   FT_WinFNT_ID_CP1255 ::
+   *     A superset of Hebrew ISO 8859-8 (with some modifications).
+   *
+   *   FT_WinFNT_ID_CP1256 ::
+   *     A superset of Arabic ISO 8859-6 (with different ordering).
+   *
+   *   FT_WinFNT_ID_CP1257 ::
+   *     A superset of Baltic ISO 8859-13 (with some deviations).
+   *
+   *   FT_WinFNT_ID_CP1258 ::
+   *     For Vietnamese.  This encoding doesn't cover all necessary
+   *     characters.
+   *
+   *   FT_WinFNT_ID_CP1361 ::
+   *     Korean (Johab).
+   */
+
+#define FT_WinFNT_ID_CP1252    0
+#define FT_WinFNT_ID_DEFAULT   1
+#define FT_WinFNT_ID_SYMBOL    2
+#define FT_WinFNT_ID_MAC      77
+#define FT_WinFNT_ID_CP932   128
+#define FT_WinFNT_ID_CP949   129
+#define FT_WinFNT_ID_CP1361  130
+#define FT_WinFNT_ID_CP936   134
+#define FT_WinFNT_ID_CP950   136
+#define FT_WinFNT_ID_CP1253  161
+#define FT_WinFNT_ID_CP1254  162
+#define FT_WinFNT_ID_CP1258  163
+#define FT_WinFNT_ID_CP1255  177
+#define FT_WinFNT_ID_CP1256  178
+#define FT_WinFNT_ID_CP1257  186
+#define FT_WinFNT_ID_CP1251  204
+#define FT_WinFNT_ID_CP874   222
+#define FT_WinFNT_ID_CP1250  238
+#define FT_WinFNT_ID_OEM     255
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_WinFNT_HeaderRec                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Windows FNT Header info.                                           */
+  /*                                                                       */
+  typedef struct  FT_WinFNT_HeaderRec_
+  {
+    FT_UShort  version;
+    FT_ULong   file_size;
+    FT_Byte    copyright[60];
+    FT_UShort  file_type;
+    FT_UShort  nominal_point_size;
+    FT_UShort  vertical_resolution;
+    FT_UShort  horizontal_resolution;
+    FT_UShort  ascent;
+    FT_UShort  internal_leading;
+    FT_UShort  external_leading;
+    FT_Byte    italic;
+    FT_Byte    underline;
+    FT_Byte    strike_out;
+    FT_UShort  weight;
+    FT_Byte    charset;
+    FT_UShort  pixel_width;
+    FT_UShort  pixel_height;
+    FT_Byte    pitch_and_family;
+    FT_UShort  avg_width;
+    FT_UShort  max_width;
+    FT_Byte    first_char;
+    FT_Byte    last_char;
+    FT_Byte    default_char;
+    FT_Byte    break_char;
+    FT_UShort  bytes_per_row;
+    FT_ULong   device_offset;
+    FT_ULong   face_name_offset;
+    FT_ULong   bits_pointer;
+    FT_ULong   bits_offset;
+    FT_Byte    reserved;
+    FT_ULong   flags;
+    FT_UShort  A_space;
+    FT_UShort  B_space;
+    FT_UShort  C_space;
+    FT_UShort  color_table_offset;
+    FT_ULong   reserved1[4];
+
+  } FT_WinFNT_HeaderRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_WinFNT_Header                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to an @FT_WinFNT_HeaderRec structure.                     */
+  /*                                                                       */
+  typedef struct FT_WinFNT_HeaderRec_*  FT_WinFNT_Header;
+
+
+  /**********************************************************************
+   *
+   * @function:
+   *    FT_Get_WinFNT_Header
+   *
+   * @description:
+   *    Retrieve a Windows FNT font info header.
+   *
+   * @input:
+   *    face    :: A handle to the input face.
+   *
+   * @output:
+   *    aheader :: The WinFNT header.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   This function only works with Windows FNT faces, returning an error
+   *   otherwise.
+   */
+  FT_EXPORT( FT_Error )
+  FT_Get_WinFNT_Header( FT_Face               face,
+                        FT_WinFNT_HeaderRec  *aheader );
+
+
+  /* */
+
+FT_END_HEADER
+
+#endif /* __FTWINFNT_H__ */
+
+
+/* END */
+
+
+/* Local Variables: */
+/* coding: utf-8    */
+/* End:             */
diff --git a/core/include/thirdparties/freetype/freetype/ftxf86.h b/core/include/thirdparties/freetype/freetype/ftxf86.h
new file mode 100644
index 0000000..d7e2dab
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ftxf86.h
@@ -0,0 +1,83 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftxf86.h                                                               */
+/*                                                                         */
+/*    Support functions for X11.                                           */
+/*                                                                         */
+/*  Copyright 2002, 2003, 2004, 2006, 2007 by                              */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTXF86_H__
+#define __FTXF86_H__
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*   font_formats                                                        */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*   Font Formats                                                        */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*   Getting the font format.                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*   The single function in this section can be used to get the font     */
+  /*   format.  Note that this information is not needed normally;         */
+  /*   however, there are special cases (like in PDF devices) where it is  */
+  /*   important to differentiate, in spite of FreeType's uniform API.     */
+  /*                                                                       */
+  /*   This function is in the X11/xf86 namespace for historical reasons   */
+  /*   and in no way depends on that windowing system.                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*   FT_Get_X11_Font_Format                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*   Return a string describing the format of a given face, using values */
+  /*   which can be used as an X11 FONT_PROPERTY.  Possible values are     */
+  /*   `TrueType', `Type~1', `BDF', `PCF', `Type~42', `CID~Type~1', `CFF', */
+  /*   `PFR', and `Windows~FNT'.                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*   face ::                                                             */
+  /*     Input face handle.                                                */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*   Font format string.  NULL in case of error.                         */
+  /*                                                                       */
+  FT_EXPORT( const char* )
+  FT_Get_X11_Font_Format( FT_Face  face );
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTXF86_H__ */
diff --git a/core/include/thirdparties/freetype/freetype/internal/autohint.h b/core/include/thirdparties/freetype/freetype/internal/autohint.h
new file mode 100644
index 0000000..f07646d
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/autohint.h
@@ -0,0 +1,244 @@
+/***************************************************************************/
+/*                                                                         */
+/*  autohint.h                                                             */
+/*                                                                         */
+/*    High-level `autohint' module-specific interface (specification).     */
+/*                                                                         */
+/*  Copyright 1996-2002, 2007, 2009, 2012 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The auto-hinter is used to load and automatically hint glyphs if a    */
+  /* format-specific hinter isn't available.                               */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __AUTOHINT_H__
+#define __AUTOHINT_H__
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* A small technical note regarding automatic hinting in order to        */
+  /* clarify this module interface.                                        */
+  /*                                                                       */
+  /* An automatic hinter might compute two kinds of data for a given face: */
+  /*                                                                       */
+  /* - global hints: Usually some metrics that describe global properties  */
+  /*                 of the face.  It is computed by scanning more or less */
+  /*                 aggressively the glyphs in the face, and thus can be  */
+  /*                 very slow to compute (even if the size of global      */
+  /*                 hints is really small).                               */
+  /*                                                                       */
+  /* - glyph hints:  These describe some important features of the glyph   */
+  /*                 outline, as well as how to align them.  They are      */
+  /*                 generally much faster to compute than global hints.   */
+  /*                                                                       */
+  /* The current FreeType auto-hinter does a pretty good job while         */
+  /* performing fast computations for both global and glyph hints.         */
+  /* However, we might be interested in introducing more complex and       */
+  /* powerful algorithms in the future, like the one described in the John */
+  /* D. Hobby paper, which unfortunately requires a lot more horsepower.   */
+  /*                                                                       */
+  /* Because a sufficiently sophisticated font management system would     */
+  /* typically implement an LRU cache of opened face objects to reduce     */
+  /* memory usage, it is a good idea to be able to avoid recomputing       */
+  /* global hints every time the same face is re-opened.                   */
+  /*                                                                       */
+  /* We thus provide the ability to cache global hints outside of the face */
+  /* object, in order to speed up font re-opening time.  Of course, this   */
+  /* feature is purely optional, so most client programs won't even notice */
+  /* it.                                                                   */
+  /*                                                                       */
+  /* I initially thought that it would be a good idea to cache the glyph   */
+  /* hints too.  However, my general idea now is that if you really need   */
+  /* to cache these too, you are simply in need of a new font format,      */
+  /* where all this information could be stored within the font file and   */
+  /* decoded on the fly.                                                   */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#include "../../ft2build.h"
+#include "../freetype.h"
+
+
+FT_BEGIN_HEADER
+
+
+  typedef struct FT_AutoHinterRec_  *FT_AutoHinter;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_AutoHinter_GlobalGetFunc                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Retrieve the global hints computed for a given face object.  The   */
+  /*    resulting data is dissociated from the face and will survive a     */
+  /*    call to FT_Done_Face().  It must be discarded through the API      */
+  /*    FT_AutoHinter_GlobalDoneFunc().                                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    hinter       :: A handle to the source auto-hinter.                */
+  /*                                                                       */
+  /*    face         :: A handle to the source face object.                */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    global_hints :: A typeless pointer to the global hints.            */
+  /*                                                                       */
+  /*    global_len   :: The size in bytes of the global hints.             */
+  /*                                                                       */
+  typedef void
+  (*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter  hinter,
+                                  FT_Face        face,
+                                  void**         global_hints,
+                                  long*          global_len );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_AutoHinter_GlobalDoneFunc                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Discard the global hints retrieved through                         */
+  /*    FT_AutoHinter_GlobalGetFunc().  This is the only way these hints   */
+  /*    are freed from memory.                                             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    hinter :: A handle to the auto-hinter module.                      */
+  /*                                                                       */
+  /*    global :: A pointer to retrieved global hints to discard.          */
+  /*                                                                       */
+  typedef void
+  (*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter  hinter,
+                                   void*          global );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_AutoHinter_GlobalResetFunc                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This function is used to recompute the global metrics in a given   */
+  /*    font.  This is useful when global font data changes (e.g. Multiple */
+  /*    Masters fonts where blend coordinates change).                     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    hinter :: A handle to the source auto-hinter.                      */
+  /*                                                                       */
+  /*    face   :: A handle to the face.                                    */
+  /*                                                                       */
+  typedef void
+  (*FT_AutoHinter_GlobalResetFunc)( FT_AutoHinter  hinter,
+                                    FT_Face        face );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_AutoHinter_GlyphLoadFunc                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This function is used to load, scale, and automatically hint a     */
+  /*    glyph from a given face.                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face        :: A handle to the face.                               */
+  /*                                                                       */
+  /*    glyph_index :: The glyph index.                                    */
+  /*                                                                       */
+  /*    load_flags  :: The load flags.                                     */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function is capable of loading composite glyphs by hinting    */
+  /*    each sub-glyph independently (which improves quality).             */
+  /*                                                                       */
+  /*    It will call the font driver with @FT_Load_Glyph, with             */
+  /*    @FT_LOAD_NO_SCALE set.                                             */
+  /*                                                                       */
+  typedef FT_Error
+  (*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter  hinter,
+                                  FT_GlyphSlot   slot,
+                                  FT_Size        size,
+                                  FT_UInt        glyph_index,
+                                  FT_Int32       load_flags );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_AutoHinter_InterfaceRec                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The auto-hinter module's interface.                                */
+  /*                                                                       */
+  typedef struct  FT_AutoHinter_InterfaceRec_
+  {
+    FT_AutoHinter_GlobalResetFunc  reset_face;
+    FT_AutoHinter_GlobalGetFunc    get_global_hints;
+    FT_AutoHinter_GlobalDoneFunc   done_global_hints;
+    FT_AutoHinter_GlyphLoadFunc    load_glyph;
+
+  } FT_AutoHinter_InterfaceRec, *FT_AutoHinter_Interface;
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_AUTOHINTER_INTERFACE(       \
+          class_,                             \
+          reset_face_,                        \
+          get_global_hints_,                  \
+          done_global_hints_,                 \
+          load_glyph_ )                       \
+  FT_CALLBACK_TABLE_DEF                       \
+  const FT_AutoHinter_InterfaceRec  class_ =  \
+  {                                           \
+    reset_face_,                              \
+    get_global_hints_,                        \
+    done_global_hints_,                       \
+    load_glyph_                               \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_AUTOHINTER_INTERFACE(                            \
+          class_,                                                  \
+          reset_face_,                                             \
+          get_global_hints_,                                       \
+          done_global_hints_,                                      \
+          load_glyph_ )                                            \
+  void                                                             \
+  FT_Init_Class_ ## class_( FT_Library                   library,  \
+                            FT_AutoHinter_InterfaceRec*  clazz )   \
+  {                                                                \
+    FT_UNUSED( library );                                          \
+                                                                   \
+    clazz->reset_face        = reset_face_;                        \
+    clazz->get_global_hints  = get_global_hints_;                  \
+    clazz->done_global_hints = done_global_hints_;                 \
+    clazz->load_glyph        = load_glyph_;                        \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+FT_END_HEADER
+
+#endif /* __AUTOHINT_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftcalc.h b/core/include/thirdparties/freetype/freetype/internal/ftcalc.h
new file mode 100644
index 0000000..1f2462d
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftcalc.h
@@ -0,0 +1,167 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcalc.h                                                               */
+/*                                                                         */
+/*    Arithmetic computations (specification).                             */
+/*                                                                         */
+/*  Copyright 1996-2006, 2008, 2009, 2012-2013 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTCALC_H__
+#define __FTCALC_H__
+
+
+#include "../../ft2build.h"
+#include "../freetype.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_FixedSqrt                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Computes the square root of a 16.16 fixed-point value.             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    x :: The value to compute the root for.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The result of `sqrt(x)'.                                           */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function is not very fast.                                    */
+  /*                                                                       */
+  FT_BASE( FT_Int32 )
+  FT_SqrtFixed( FT_Int32  x );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* FT_MulDiv() and FT_MulFix() are declared in freetype.h.               */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_MulDiv_No_Round                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A very simple function used to perform the computation `(a*b)/c'   */
+  /*    (without rounding) with maximum accuracy (it uses a 64-bit         */
+  /*    intermediate integer whenever necessary).                          */
+  /*                                                                       */
+  /*    This function isn't necessarily as fast as some processor specific */
+  /*    operations, but is at least completely portable.                   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    a :: The first multiplier.                                         */
+  /*    b :: The second multiplier.                                        */
+  /*    c :: The divisor.                                                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The result of `(a*b)/c'.  This function never traps when trying to */
+  /*    divide by zero; it simply returns `MaxInt' or `MinInt' depending   */
+  /*    on the signs of `a' and `b'.                                       */
+  /*                                                                       */
+  FT_BASE( FT_Long )
+  FT_MulDiv_No_Round( FT_Long  a,
+                      FT_Long  b,
+                      FT_Long  c );
+
+
+  /*
+   *  A variant of FT_Matrix_Multiply which scales its result afterwards.
+   *  The idea is that both `a' and `b' are scaled by factors of 10 so that
+   *  the values are as precise as possible to get a correct result during
+   *  the 64bit multiplication.  Let `sa' and `sb' be the scaling factors of
+   *  `a' and `b', respectively, then the scaling factor of the result is
+   *  `sa*sb'.
+   */
+  FT_BASE( void )
+  FT_Matrix_Multiply_Scaled( const FT_Matrix*  a,
+                             FT_Matrix        *b,
+                             FT_Long           scaling );
+
+
+  /*
+   *  A variant of FT_Vector_Transform.  See comments for
+   *  FT_Matrix_Multiply_Scaled.
+   */
+  FT_BASE( void )
+  FT_Vector_Transform_Scaled( FT_Vector*        vector,
+                              const FT_Matrix*  matrix,
+                              FT_Long           scaling );
+
+
+  /*
+   *  Return -1, 0, or +1, depending on the orientation of a given corner.
+   *  We use the Cartesian coordinate system, with positive vertical values
+   *  going upwards.  The function returns +1 if the corner turns to the
+   *  left, -1 to the right, and 0 for undecidable cases.
+   */
+  FT_BASE( FT_Int )
+  ft_corner_orientation( FT_Pos  in_x,
+                         FT_Pos  in_y,
+                         FT_Pos  out_x,
+                         FT_Pos  out_y );
+
+  /*
+   *  Return TRUE if a corner is flat or nearly flat.  This is equivalent to
+   *  saying that the angle difference between the `in' and `out' vectors is
+   *  very small.
+   */
+  FT_BASE( FT_Int )
+  ft_corner_is_flat( FT_Pos  in_x,
+                     FT_Pos  in_y,
+                     FT_Pos  out_x,
+                     FT_Pos  out_y );
+
+
+  /*
+   *  Return the most significant bit index.
+   */
+  FT_BASE( FT_Int )
+  FT_MSB( FT_UInt32  z );
+
+
+  /*
+   *  Return sqrt(x*x+y*y), which is the same as `FT_Vector_Length' but uses
+   *  two fixed-point arguments instead.
+   */
+  FT_BASE( FT_Fixed )
+  FT_Hypot( FT_Fixed  x,
+            FT_Fixed  y );
+
+
+#define INT_TO_F26DOT6( x )    ( (FT_Long)(x) << 6  )
+#define INT_TO_F2DOT14( x )    ( (FT_Long)(x) << 14 )
+#define INT_TO_FIXED( x )      ( (FT_Long)(x) << 16 )
+#define F2DOT14_TO_FIXED( x )  ( (FT_Long)(x) << 2  )
+#define FLOAT_TO_FIXED( x )    ( (FT_Long)( x * 65536.0 ) )
+#define FIXED_TO_INT( x )      ( FT_RoundFix( x ) >> 16 )
+
+#define ROUND_F26DOT6( x )     ( x >= 0 ? (    ( (x) + 32 ) & -64 )     \
+                                        : ( -( ( 32 - (x) ) & -64 ) ) )
+
+
+FT_END_HEADER
+
+#endif /* __FTCALC_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftdebug.h b/core/include/thirdparties/freetype/freetype/internal/ftdebug.h
new file mode 100644
index 0000000..e7b1419
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftdebug.h
@@ -0,0 +1,255 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftdebug.h                                                              */
+/*                                                                         */
+/*    Debugging and logging component (specification).                     */
+/*                                                                         */
+/*  Copyright 1996-2002, 2004, 2006-2009, 2013 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/*                                                                         */
+/*  IMPORTANT: A description of FreeType's debugging support can be        */
+/*             found in `docs/DEBUG.TXT'.  Read it if you need to use or   */
+/*             understand this code.                                       */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTDEBUG_H__
+#define __FTDEBUG_H__
+
+
+#include "../../ft2build.h"
+#include "../config/ftconfig.h"
+#include "../freetype.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /* force the definition of FT_DEBUG_LEVEL_ERROR if FT_DEBUG_LEVEL_TRACE */
+  /* is already defined; this simplifies the following #ifdefs            */
+  /*                                                                      */
+#ifdef FT_DEBUG_LEVEL_TRACE
+#undef  FT_DEBUG_LEVEL_ERROR
+#define FT_DEBUG_LEVEL_ERROR
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define the trace enums as well as the trace levels array when they    */
+  /* are needed.                                                           */
+  /*                                                                       */
+  /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+#define FT_TRACE_DEF( x )  trace_ ## x ,
+
+  /* defining the enumeration */
+  typedef enum  FT_Trace_
+  {
+#include "fttrace.h"
+    trace_count
+
+  } FT_Trace;
+
+
+  /* defining the array of trace levels, provided by `src/base/ftdebug.c' */
+  extern int  ft_trace_levels[trace_count];
+
+#undef FT_TRACE_DEF
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define the FT_TRACE macro                                             */
+  /*                                                                       */
+  /* IMPORTANT!                                                            */
+  /*                                                                       */
+  /* Each component must define the macro FT_COMPONENT to a valid FT_Trace */
+  /* value before using any TRACE macro.                                   */
+  /*                                                                       */
+  /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_TRACE
+
+#define FT_TRACE( level, varformat )                      \
+          do                                              \
+          {                                               \
+            if ( ft_trace_levels[FT_COMPONENT] >= level ) \
+              FT_Message varformat;                       \
+          } while ( 0 )
+
+#else /* !FT_DEBUG_LEVEL_TRACE */
+
+#define FT_TRACE( level, varformat )  do { } while ( 0 )      /* nothing */
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Trace_Get_Count                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return the number of available trace components.                   */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The number of trace components.  0 if FreeType 2 is not built with */
+  /*    FT_DEBUG_LEVEL_TRACE definition.                                   */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function may be useful if you want to access elements of      */
+  /*    the internal `ft_trace_levels' array by an index.                  */
+  /*                                                                       */
+  FT_BASE( FT_Int )
+  FT_Trace_Get_Count( void );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Trace_Get_Name                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return the name of a trace component.                              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    The index of the trace component.                                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The name of the trace component.  This is a statically allocated   */
+  /*    C string, so do not free it after use.  NULL if FreeType 2 is not  */
+  /*    built with FT_DEBUG_LEVEL_TRACE definition.                        */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Use @FT_Trace_Get_Count to get the number of available trace       */
+  /*    components.                                                        */
+  /*                                                                       */
+  /*    This function may be useful if you want to control FreeType 2's    */
+  /*    debug level in your application.                                   */
+  /*                                                                       */
+  FT_BASE( const char * )
+  FT_Trace_Get_Name( FT_Int  idx );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* You need two opening and closing parentheses!                         */
+  /*                                                                       */
+  /* Example: FT_TRACE0(( "Value is %i", foo ))                            */
+  /*                                                                       */
+  /* Output of the FT_TRACEX macros is sent to stderr.                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+#define FT_TRACE0( varformat )  FT_TRACE( 0, varformat )
+#define FT_TRACE1( varformat )  FT_TRACE( 1, varformat )
+#define FT_TRACE2( varformat )  FT_TRACE( 2, varformat )
+#define FT_TRACE3( varformat )  FT_TRACE( 3, varformat )
+#define FT_TRACE4( varformat )  FT_TRACE( 4, varformat )
+#define FT_TRACE5( varformat )  FT_TRACE( 5, varformat )
+#define FT_TRACE6( varformat )  FT_TRACE( 6, varformat )
+#define FT_TRACE7( varformat )  FT_TRACE( 7, varformat )
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define the FT_ERROR macro.                                            */
+  /*                                                                       */
+  /* Output of this macro is sent to stderr.                               */
+  /*                                                                       */
+  /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+#define FT_ERROR( varformat )  FT_Message  varformat
+
+#else  /* !FT_DEBUG_LEVEL_ERROR */
+
+#define FT_ERROR( varformat )  do { } while ( 0 )      /* nothing */
+
+#endif /* !FT_DEBUG_LEVEL_ERROR */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define the FT_ASSERT and FT_THROW macros.  The call to `FT_Throw'     */
+  /* makes it possible to easily set a breakpoint at this function.        */
+  /*                                                                       */
+  /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+#define FT_ASSERT( condition )                                      \
+          do                                                        \
+          {                                                         \
+            if ( !( condition ) )                                   \
+              FT_Panic( "assertion failed on line %d of file %s\n", \
+                        __LINE__, __FILE__ );                       \
+          } while ( 0 )
+
+#define FT_THROW( e )                                   \
+          ( FT_Throw( FT_ERR_CAT( FT_ERR_PREFIX, e ),   \
+                      __LINE__,                         \
+                      __FILE__ )                      | \
+            FT_ERR_CAT( FT_ERR_PREFIX, e )            )
+
+#else /* !FT_DEBUG_LEVEL_ERROR */
+
+#define FT_ASSERT( condition )  do { } while ( 0 )
+
+#define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
+
+#endif /* !FT_DEBUG_LEVEL_ERROR */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Define `FT_Message' and `FT_Panic' when needed.                       */
+  /*                                                                       */
+  /*************************************************************************/
+
+#ifdef FT_DEBUG_LEVEL_ERROR
+
+#include "stdio.h"  /* for vfprintf() */
+
+  /* print a message */
+  FT_BASE( void )
+  FT_Message( const char*  fmt,
+              ... );
+
+  /* print a message and exit */
+  FT_BASE( void )
+  FT_Panic( const char*  fmt,
+            ... );
+
+  /* report file name and line number of an error */
+  FT_BASE( int )
+  FT_Throw( FT_Error     error,
+            int          line,
+            const char*  file );
+
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
+
+  FT_BASE( void )
+  ft_debug_init( void );
+
+FT_END_HEADER
+
+#endif /* __FTDEBUG_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftdriver.h b/core/include/thirdparties/freetype/freetype/internal/ftdriver.h
new file mode 100644
index 0000000..5b0e863
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftdriver.h
@@ -0,0 +1,409 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftdriver.h                                                             */
+/*                                                                         */
+/*    FreeType font driver interface (specification).                      */
+/*                                                                         */
+/*  Copyright 1996-2003, 2006, 2008, 2011-2013 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTDRIVER_H__
+#define __FTDRIVER_H__
+
+
+#include "../../ft2build.h"
+#include "../ftmodapi.h"
+
+
+FT_BEGIN_HEADER
+
+
+  typedef FT_Error
+  (*FT_Face_InitFunc)( FT_Stream      stream,
+                       FT_Face        face,
+                       FT_Int         typeface_index,
+                       FT_Int         num_params,
+                       FT_Parameter*  parameters );
+
+  typedef void
+  (*FT_Face_DoneFunc)( FT_Face  face );
+
+
+  typedef FT_Error
+  (*FT_Size_InitFunc)( FT_Size  size );
+
+  typedef void
+  (*FT_Size_DoneFunc)( FT_Size  size );
+
+
+  typedef FT_Error
+  (*FT_Slot_InitFunc)( FT_GlyphSlot  slot );
+
+  typedef void
+  (*FT_Slot_DoneFunc)( FT_GlyphSlot  slot );
+
+
+  typedef FT_Error
+  (*FT_Size_RequestFunc)( FT_Size          size,
+                          FT_Size_Request  req );
+
+  typedef FT_Error
+  (*FT_Size_SelectFunc)( FT_Size   size,
+                         FT_ULong  size_index );
+
+  typedef FT_Error
+  (*FT_Slot_LoadFunc)( FT_GlyphSlot  slot,
+                       FT_Size       size,
+                       FT_UInt       glyph_index,
+                       FT_Int32      load_flags );
+
+
+  typedef FT_UInt
+  (*FT_CharMap_CharIndexFunc)( FT_CharMap  charmap,
+                               FT_Long     charcode );
+
+  typedef FT_Long
+  (*FT_CharMap_CharNextFunc)( FT_CharMap  charmap,
+                              FT_Long     charcode );
+
+
+  typedef FT_Error
+  (*FT_Face_GetKerningFunc)( FT_Face     face,
+                             FT_UInt     left_glyph,
+                             FT_UInt     right_glyph,
+                             FT_Vector*  kerning );
+
+
+  typedef FT_Error
+  (*FT_Face_AttachFunc)( FT_Face    face,
+                         FT_Stream  stream );
+
+
+  typedef FT_Error
+  (*FT_Face_GetAdvancesFunc)( FT_Face    face,
+                              FT_UInt    first,
+                              FT_UInt    count,
+                              FT_Int32   flags,
+                              FT_Fixed*  advances );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Driver_ClassRec                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The font driver class.  This structure mostly contains pointers to */
+  /*    driver methods.                                                    */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    root             :: The parent module.                             */
+  /*                                                                       */
+  /*    face_object_size :: The size of a face object in bytes.            */
+  /*                                                                       */
+  /*    size_object_size :: The size of a size object in bytes.            */
+  /*                                                                       */
+  /*    slot_object_size :: The size of a glyph object in bytes.           */
+  /*                                                                       */
+  /*    init_face        :: The format-specific face constructor.          */
+  /*                                                                       */
+  /*    done_face        :: The format-specific face destructor.           */
+  /*                                                                       */
+  /*    init_size        :: The format-specific size constructor.          */
+  /*                                                                       */
+  /*    done_size        :: The format-specific size destructor.           */
+  /*                                                                       */
+  /*    init_slot        :: The format-specific slot constructor.          */
+  /*                                                                       */
+  /*    done_slot        :: The format-specific slot destructor.           */
+  /*                                                                       */
+  /*                                                                       */
+  /*    load_glyph       :: A function handle to load a glyph to a slot.   */
+  /*                        This field is mandatory!                       */
+  /*                                                                       */
+  /*    get_kerning      :: A function handle to return the unscaled       */
+  /*                        kerning for a given pair of glyphs.  Can be    */
+  /*                        set to 0 if the format doesn't support         */
+  /*                        kerning.                                       */
+  /*                                                                       */
+  /*    attach_file      :: This function handle is used to read           */
+  /*                        additional data for a face from another        */
+  /*                        file/stream.  For example, this can be used to */
+  /*                        add data from AFM or PFM files on a Type 1     */
+  /*                        face, or a CIDMap on a CID-keyed face.         */
+  /*                                                                       */
+  /*    get_advances     :: A function handle used to return advance       */
+  /*                        widths of `count' glyphs (in font units),      */
+  /*                        starting at `first'.  The `vertical' flag must */
+  /*                        be set to get vertical advance heights.  The   */
+  /*                        `advances' buffer is caller-allocated.         */
+  /*                        The idea of this function is to be able to     */
+  /*                        perform device-independent text layout without */
+  /*                        loading a single glyph image.                  */
+  /*                                                                       */
+  /*    request_size     :: A handle to a function used to request the new */
+  /*                        character size.  Can be set to 0 if the        */
+  /*                        scaling done in the base layer suffices.       */
+  /*                                                                       */
+  /*    select_size      :: A handle to a function used to select a new    */
+  /*                        fixed size.  It is used only if                */
+  /*                        @FT_FACE_FLAG_FIXED_SIZES is set.  Can be set  */
+  /*                        to 0 if the scaling done in the base layer     */
+  /*                        suffices.                                      */
+  /* <Note>                                                                */
+  /*    Most function pointers, with the exception of `load_glyph', can be */
+  /*    set to 0 to indicate a default behaviour.                          */
+  /*                                                                       */
+  typedef struct  FT_Driver_ClassRec_
+  {
+    FT_Module_Class          root;
+
+    FT_Long                  face_object_size;
+    FT_Long                  size_object_size;
+    FT_Long                  slot_object_size;
+
+    FT_Face_InitFunc         init_face;
+    FT_Face_DoneFunc         done_face;
+
+    FT_Size_InitFunc         init_size;
+    FT_Size_DoneFunc         done_size;
+
+    FT_Slot_InitFunc         init_slot;
+    FT_Slot_DoneFunc         done_slot;
+
+    FT_Slot_LoadFunc         load_glyph;
+
+    FT_Face_GetKerningFunc   get_kerning;
+    FT_Face_AttachFunc       attach_file;
+    FT_Face_GetAdvancesFunc  get_advances;
+
+    /* since version 2.2 */
+    FT_Size_RequestFunc      request_size;
+    FT_Size_SelectFunc       select_size;
+
+  } FT_Driver_ClassRec, *FT_Driver_Class;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DECLARE_DRIVER                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to create a forward declaration of an FT_Driver_ClassRec      */
+  /*    struct instance.                                                   */
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_DRIVER                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an instance of FT_Driver_ClassRec struct.       */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is defined a `create' function has to be */
+  /*    called with a pointer where the allocated structure is returned.   */
+  /*    And when it is no longer needed a `destroy' function needs to be   */
+  /*    called to release that allocation.                                 */
+  /*                                                                       */
+  /*    `fcinit.c' (ft_create_default_module_classes) already contains a   */
+  /*    mechanism to call these functions for the default modules          */
+  /*    described in `ftmodule.h'.                                         */
+  /*                                                                       */
+  /*    Notice that the created `create' and `destroy' functions call      */
+  /*    `pic_init' and `pic_free' to allow you to manually allocate and    */
+  /*    initialize any additional global data, like a module specific      */
+  /*    interface, and put them in the global pic container defined in     */
+  /*    `ftpic.h'.  If you don't need them just implement the functions as */
+  /*    empty to resolve the link error.  Also the `pic_init' and          */
+  /*    `pic_free' functions should be declared in `pic.h', to be referred */
+  /*    by driver definition calling `FT_DEFINE_DRIVER' in following.      */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
+  /*    allocated in the global scope (or the scope where the macro is     */
+  /*    used).                                                             */
+  /*                                                                       */
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DECLARE_DRIVER( class_ )  \
+  FT_CALLBACK_TABLE                  \
+  const FT_Driver_ClassRec  class_;
+
+#define FT_DEFINE_DRIVER(                    \
+          class_,                            \
+          flags_,                            \
+          size_,                             \
+          name_,                             \
+          version_,                          \
+          requires_,                         \
+          interface_,                        \
+          init_,                             \
+          done_,                             \
+          get_interface_,                    \
+          face_object_size_,                 \
+          size_object_size_,                 \
+          slot_object_size_,                 \
+          init_face_,                        \
+          done_face_,                        \
+          init_size_,                        \
+          done_size_,                        \
+          init_slot_,                        \
+          done_slot_,                        \
+          load_glyph_,                       \
+          get_kerning_,                      \
+          attach_file_,                      \
+          get_advances_,                     \
+          request_size_,                     \
+          select_size_ )                     \
+  FT_CALLBACK_TABLE_DEF                      \
+  const FT_Driver_ClassRec  class_ =         \
+  {                                          \
+    FT_DEFINE_ROOT_MODULE( flags_,           \
+                           size_,            \
+                           name_,            \
+                           version_,         \
+                           requires_,        \
+                           interface_,       \
+                           init_,            \
+                           done_,            \
+                           get_interface_ )  \
+                                             \
+    face_object_size_,                       \
+    size_object_size_,                       \
+    slot_object_size_,                       \
+                                             \
+    init_face_,                              \
+    done_face_,                              \
+                                             \
+    init_size_,                              \
+    done_size_,                              \
+                                             \
+    init_slot_,                              \
+    done_slot_,                              \
+                                             \
+    load_glyph_,                             \
+                                             \
+    get_kerning_,                            \
+    attach_file_,                            \
+    get_advances_,                           \
+                                             \
+    request_size_,                           \
+    select_size_                             \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DECLARE_DRIVER( class_ )  FT_DECLARE_MODULE( class_ )
+
+#define FT_DEFINE_DRIVER(                                        \
+          class_,                                                \
+          flags_,                                                \
+          size_,                                                 \
+          name_,                                                 \
+          version_,                                              \
+          requires_,                                             \
+          interface_,                                            \
+          init_,                                                 \
+          done_,                                                 \
+          get_interface_,                                        \
+          face_object_size_,                                     \
+          size_object_size_,                                     \
+          slot_object_size_,                                     \
+          init_face_,                                            \
+          done_face_,                                            \
+          init_size_,                                            \
+          done_size_,                                            \
+          init_slot_,                                            \
+          done_slot_,                                            \
+          load_glyph_,                                           \
+          get_kerning_,                                          \
+          attach_file_,                                          \
+          get_advances_,                                         \
+          request_size_,                                         \
+          select_size_ )                                         \
+  void                                                           \
+  FT_Destroy_Class_ ## class_( FT_Library        library,        \
+                               FT_Module_Class*  clazz )         \
+  {                                                              \
+    FT_Memory        memory = library->memory;                   \
+    FT_Driver_Class  dclazz = (FT_Driver_Class)clazz;            \
+                                                                 \
+                                                                 \
+    class_ ## _pic_free( library );                              \
+    if ( dclazz )                                                \
+      FT_FREE( dclazz );                                         \
+  }                                                              \
+                                                                 \
+                                                                 \
+  FT_Error                                                       \
+  FT_Create_Class_ ## class_( FT_Library         library,        \
+                              FT_Module_Class**  output_class )  \
+  {                                                              \
+    FT_Driver_Class  clazz  = NULL;                              \
+    FT_Error         error;                                      \
+    FT_Memory        memory = library->memory;                   \
+                                                                 \
+                                                                 \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) )                  \
+      return error;                                              \
+                                                                 \
+    error = class_ ## _pic_init( library );                      \
+    if ( error )                                                 \
+    {                                                            \
+      FT_FREE( clazz );                                          \
+      return error;                                              \
+    }                                                            \
+                                                                 \
+    FT_DEFINE_ROOT_MODULE( flags_,                               \
+                           size_,                                \
+                           name_,                                \
+                           version_,                             \
+                           requires_,                            \
+                           interface_,                           \
+                           init_,                                \
+                           done_,                                \
+                           get_interface_ )                      \
+                                                                 \
+    clazz->face_object_size = face_object_size_;                 \
+    clazz->size_object_size = size_object_size_;                 \
+    clazz->slot_object_size = slot_object_size_;                 \
+                                                                 \
+    clazz->init_face        = init_face_;                        \
+    clazz->done_face        = done_face_;                        \
+                                                                 \
+    clazz->init_size        = init_size_;                        \
+    clazz->done_size        = done_size_;                        \
+                                                                 \
+    clazz->init_slot        = init_slot_;                        \
+    clazz->done_slot        = done_slot_;                        \
+                                                                 \
+    clazz->load_glyph       = load_glyph_;                       \
+                                                                 \
+    clazz->get_kerning      = get_kerning_;                      \
+    clazz->attach_file      = attach_file_;                      \
+    clazz->get_advances     = get_advances_;                     \
+                                                                 \
+    clazz->request_size     = request_size_;                     \
+    clazz->select_size      = select_size_;                      \
+                                                                 \
+    *output_class = (FT_Module_Class*)clazz;                     \
+                                                                 \
+    return FT_Err_Ok;                                            \
+  }
+
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+FT_END_HEADER
+
+#endif /* __FTDRIVER_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftgloadr.h b/core/include/thirdparties/freetype/freetype/internal/ftgloadr.h
new file mode 100644
index 0000000..76e5a7e
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftgloadr.h
@@ -0,0 +1,168 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftgloadr.h                                                             */
+/*                                                                         */
+/*    The FreeType glyph loader (specification).                           */
+/*                                                                         */
+/*  Copyright 2002, 2003, 2005, 2006 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg                       */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTGLOADR_H__
+#define __FTGLOADR_H__
+
+
+#include "../../ft2build.h"
+#include "../freetype.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_GlyphLoader                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The glyph loader is an internal object used to load several glyphs */
+  /*    together (for example, in the case of composites).                 */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The glyph loader implementation is not part of the high-level API, */
+  /*    hence the forward structure declaration.                           */
+  /*                                                                       */
+  typedef struct FT_GlyphLoaderRec_*  FT_GlyphLoader ;
+
+
+#if 0  /* moved to freetype.h in version 2.2 */
+#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS          1
+#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES      2
+#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID        4
+#define FT_SUBGLYPH_FLAG_SCALE                   8
+#define FT_SUBGLYPH_FLAG_XY_SCALE             0x40
+#define FT_SUBGLYPH_FLAG_2X2                  0x80
+#define FT_SUBGLYPH_FLAG_USE_MY_METRICS      0x200
+#endif
+
+
+  typedef struct  FT_SubGlyphRec_
+  {
+    FT_Int     index;
+    FT_UShort  flags;
+    FT_Int     arg1;
+    FT_Int     arg2;
+    FT_Matrix  transform;
+
+  } FT_SubGlyphRec;
+
+
+  typedef struct  FT_GlyphLoadRec_
+  {
+    FT_Outline   outline;       /* outline                   */
+    FT_Vector*   extra_points;  /* extra points table        */
+    FT_Vector*   extra_points2; /* second extra points table */
+    FT_UInt      num_subglyphs; /* number of subglyphs       */
+    FT_SubGlyph  subglyphs;     /* subglyphs                 */
+
+  } FT_GlyphLoadRec, *FT_GlyphLoad;
+
+
+  typedef struct  FT_GlyphLoaderRec_
+  {
+    FT_Memory        memory;
+    FT_UInt          max_points;
+    FT_UInt          max_contours;
+    FT_UInt          max_subglyphs;
+    FT_Bool          use_extra;
+
+    FT_GlyphLoadRec  base;
+    FT_GlyphLoadRec  current;
+
+    void*            other;            /* for possible future extension? */
+
+  } FT_GlyphLoaderRec;
+
+
+  /* create new empty glyph loader */
+  FT_BASE( FT_Error )
+  FT_GlyphLoader_New( FT_Memory        memory,
+                      FT_GlyphLoader  *aloader );
+
+  /* add an extra points table to a glyph loader */
+  FT_BASE( FT_Error )
+  FT_GlyphLoader_CreateExtra( FT_GlyphLoader  loader );
+
+  /* destroy a glyph loader */
+  FT_BASE( void )
+  FT_GlyphLoader_Done( FT_GlyphLoader  loader );
+
+  /* reset a glyph loader (frees everything int it) */
+  FT_BASE( void )
+  FT_GlyphLoader_Reset( FT_GlyphLoader  loader );
+
+  /* rewind a glyph loader */
+  FT_BASE( void )
+  FT_GlyphLoader_Rewind( FT_GlyphLoader  loader );
+
+  /* check that there is enough space to add `n_points' and `n_contours' */
+  /* to the glyph loader                                                 */
+  FT_BASE( FT_Error )
+  FT_GlyphLoader_CheckPoints( FT_GlyphLoader  loader,
+                              FT_UInt         n_points,
+                              FT_UInt         n_contours );
+
+
+#define FT_GLYPHLOADER_CHECK_P( _loader, _count )                         \
+   ( (_count) == 0 || ((_loader)->base.outline.n_points    +              \
+                       (_loader)->current.outline.n_points +              \
+                       (unsigned long)(_count)) <= (_loader)->max_points )
+
+#define FT_GLYPHLOADER_CHECK_C( _loader, _count )                          \
+  ( (_count) == 0 || ((_loader)->base.outline.n_contours    +              \
+                      (_loader)->current.outline.n_contours +              \
+                      (unsigned long)(_count)) <= (_loader)->max_contours )
+
+#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours )      \
+  ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points )   &&                  \
+      FT_GLYPHLOADER_CHECK_C( _loader, _contours ) )                   \
+    ? 0                                                                \
+    : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) )
+
+
+  /* check that there is enough space to add `n_subs' sub-glyphs to */
+  /* a glyph loader                                                 */
+  FT_BASE( FT_Error )
+  FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader  loader,
+                                 FT_UInt         n_subs );
+
+  /* prepare a glyph loader, i.e. empty the current glyph */
+  FT_BASE( void )
+  FT_GlyphLoader_Prepare( FT_GlyphLoader  loader );
+
+  /* add the current glyph to the base glyph */
+  FT_BASE( void )
+  FT_GlyphLoader_Add( FT_GlyphLoader  loader );
+
+  /* copy points from one glyph loader to another */
+  FT_BASE( FT_Error )
+  FT_GlyphLoader_CopyPoints( FT_GlyphLoader  target,
+                             FT_GlyphLoader  source );
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTGLOADR_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftmemory.h b/core/include/thirdparties/freetype/freetype/internal/ftmemory.h
new file mode 100644
index 0000000..67cbf43
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftmemory.h
@@ -0,0 +1,459 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftmemory.h                                                             */
+/*                                                                         */
+/*    The FreeType memory management macros (specification).               */
+/*                                                                         */
+/*  Copyright 1996-2002, 2004-2007, 2010, 2013 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg                       */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTMEMORY_H__
+#define __FTMEMORY_H__
+
+
+#include "../../ft2build.h"
+#include "../config/ftconfig.h"
+#include "../fttypes.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_SET_ERROR                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This macro is used to set an implicit `error' variable to a given  */
+  /*    expression's value (usually a function call), and convert it to a  */
+  /*    boolean which is set whenever the value is != 0.                   */
+  /*                                                                       */
+#undef  FT_SET_ERROR
+#define FT_SET_ERROR( expression ) \
+          ( ( error = (expression) ) != 0 )
+
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                           M E M O R Y                           ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*
+   *  C++ refuses to handle statements like p = (void*)anything, with `p' a
+   *  typed pointer.  Since we don't have a `typeof' operator in standard
+   *  C++, we have to use a template to emulate it.
+   */
+
+#ifdef __cplusplus
+
+  extern "C++"
+  template <typename T> inline T*
+  cplusplus_typeof(        T*,
+                    void  *v )
+  {
+    return static_cast <T*> ( v );
+  }
+
+#define FT_ASSIGNP( p, val )  (p) = cplusplus_typeof( (p), (val) )
+
+#else
+
+#define FT_ASSIGNP( p, val )  (p) = (val)
+
+#endif
+
+
+
+#ifdef FT_DEBUG_MEMORY
+
+  FT_BASE( const char* )  _ft_debug_file;
+  FT_BASE( long )         _ft_debug_lineno;
+
+#define FT_DEBUG_INNER( exp )  ( _ft_debug_file   = __FILE__, \
+                                 _ft_debug_lineno = __LINE__, \
+                                 (exp) )
+
+#define FT_ASSIGNP_INNER( p, exp )  ( _ft_debug_file   = __FILE__, \
+                                      _ft_debug_lineno = __LINE__, \
+                                      FT_ASSIGNP( p, exp ) )
+
+#else /* !FT_DEBUG_MEMORY */
+
+#define FT_DEBUG_INNER( exp )       (exp)
+#define FT_ASSIGNP_INNER( p, exp )  FT_ASSIGNP( p, exp )
+
+#endif /* !FT_DEBUG_MEMORY */
+
+
+  /*
+   *  The allocation functions return a pointer, and the error code
+   *  is written to through the `p_error' parameter.  See below for
+   *  for documentation.
+   */
+
+  FT_BASE( FT_Pointer )
+  ft_mem_alloc( FT_Memory  memory,
+                FT_Long    size,
+                FT_Error  *p_error );
+
+  FT_BASE( FT_Pointer )
+  ft_mem_qalloc( FT_Memory  memory,
+                 FT_Long    size,
+                 FT_Error  *p_error );
+
+  FT_BASE( FT_Pointer )
+  ft_mem_realloc( FT_Memory  memory,
+                  FT_Long    item_size,
+                  FT_Long    cur_count,
+                  FT_Long    new_count,
+                  void*      block,
+                  FT_Error  *p_error );
+
+  FT_BASE( FT_Pointer )
+  ft_mem_qrealloc( FT_Memory  memory,
+                   FT_Long    item_size,
+                   FT_Long    cur_count,
+                   FT_Long    new_count,
+                   void*      block,
+                   FT_Error  *p_error );
+#ifdef _DEBUG

+//#define _XYQ_MEM_DEBUG

+#endif

+  

+#ifdef _XYQ_MEM_DEBUG		/* XYQ */

+  FT_BASE( FT_Pointer )

+	  ft_mem_allocdebug( FT_Memory  memory,

+	  FT_Long    size, const char* filename, int line,

+	  FT_Error  *p_error );

+  

+  FT_BASE( FT_Pointer )

+	  ft_mem_qallocdebug( FT_Memory  memory,

+	  FT_Long    size, const char* filename, int line,

+	  FT_Error  *p_error );

+  

+  FT_BASE( FT_Pointer )

+	  ft_mem_reallocdebug( FT_Memory  memory,

+	  FT_Long    item_size,

+	  FT_Long    cur_count,

+	  FT_Long    new_count,

+	  void*      block, const char* filename, int line,

+	  FT_Error  *p_error );

+  

+  FT_BASE( FT_Pointer )

+	  ft_mem_qreallocdebug( FT_Memory  memory,

+	  FT_Long    item_size,

+	  FT_Long    cur_count,

+	  FT_Long    new_count,

+	  void*      block, const char* filename, int line,

+	  FT_Error  *p_error );

+#endif

+
+
+  FT_BASE( void )
+  ft_mem_free( FT_Memory    memory,
+               const void*  P );
+
+
+#define FT_MEM_FREE( ptr )                \
+          FT_BEGIN_STMNT                  \
+            ft_mem_free( memory, (ptr) ); \
+            (ptr) = NULL;                 \
+          FT_END_STMNT
+#ifndef _XYQ_MEM_DEBUG

+#define FT_MEM_ALLOC( ptr, size )                                         \

+		  FT_ASSIGNP_INNER( ptr, ft_mem_alloc( memory, (size), &error ) )
+
+
+#define FT_MEM_REALLOC( ptr, cursz, newsz )                        \
+          FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory,           \
+                                                 1,                \
+                                                 (FT_Long)(cursz), \
+                                                 (FT_Long)(newsz), \
+                                                 (ptr),            \
+                                                 &error ) )
+
+#define FT_MEM_QALLOC( ptr, size )                               \
+          FT_ASSIGNP_INNER( ptr, ft_mem_qalloc( memory,          \
+                                                (FT_Long)(size), \
+                                                &error ) )
+
+#define FT_MEM_QREALLOC( ptr, cursz, newsz )                        \
+          FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory,           \
+                                                  1,                \
+                                                  (FT_Long)(cursz), \
+                                                  (FT_Long)(newsz), \
+                                                  (ptr),            \
+                                                  &error ) )
+
+#define FT_MEM_ALLOC_MULT( ptr, count, item_size )                     \
+          FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory,               \
+                                                 (FT_Long)(item_size), \
+                                                 0,                    \
+                                                 (FT_Long)(count),     \
+                                                 NULL,                 \
+                                                 &error ) )
+
+#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz )           \
+          FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory,            \
+                                                 (FT_Long)(itmsz),  \
+                                                 (FT_Long)(oldcnt), \
+                                                 (FT_Long)(newcnt), \
+                                                 (ptr),             \
+                                                 &error ) )
+
+#define FT_MEM_QALLOC_MULT( ptr, count, item_size )                     \
+          FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory,               \
+                                                  (FT_Long)(item_size), \
+                                                  0,                    \
+                                                  (FT_Long)(count),     \
+                                                  NULL,                 \
+                                                  &error ) )
+
+#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz)            \
+          FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory,            \
+                                                  (FT_Long)(itmsz),  \
+                                                  (FT_Long)(oldcnt), \
+                                                  (FT_Long)(newcnt), \
+                                                  (ptr),             \
+                                                  &error ) )
+#define FT_MEM_NEW_ARRAY( ptr, count )                                      \

+          FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, sizeof ( *(ptr) ), \

+                                                 0, (count),                \

+                                                 NULL, &error ) )

+

+#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz )                             \

+          FT_ASSIGNP_INNER( ptr, ft_mem_realloc( memory, sizeof ( *(ptr) ), \

+                                                 (cursz), (newsz),          \

+                                                 (ptr), &error ) )

+

+#define FT_MEM_QNEW_ARRAY( ptr, count )                                      \

+          FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \

+                                                  0, (count),                \

+                                                  NULL, &error ) )

+

+#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz )                             \

+	FT_ASSIGNP_INNER( ptr, ft_mem_qrealloc( memory, sizeof ( *(ptr) ), \

+	(cursz), (newsz),          \

+  (ptr), &error ) )

+  

+#else

+#define FT_MEM_ALLOC( ptr, size )                                         \

+  FT_ASSIGNP_INNER( ptr, ft_mem_allocdebug( memory, (size), __FILE__, __LINE__, &error ) )

+  

+#define FT_MEM_REALLOC( ptr, cursz, newsz )                        \

+	FT_ASSIGNP_INNER( ptr, ft_mem_reallocdebug( memory, 1,        \

+                                                  (cursz), (newsz),          \

+                                                 (ptr), __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_QALLOC( ptr, size )                                         \

+          FT_ASSIGNP_INNER( ptr, ft_mem_qallocdebug( memory, (size), __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_QREALLOC( ptr, cursz, newsz )                         \

+          FT_ASSIGNP_INNER( ptr, ft_mem_qreallocdebug( memory, 1,        \

+                                                  (cursz), (newsz), \

+                                                  (ptr), __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_ALLOC_MULT( ptr, count, item_size )                    \

+          FT_ASSIGNP_INNER( ptr, ft_mem_reallocdebug( memory, (item_size), \

+                                                 0, (count),          \

+                                                 NULL, __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz )            \

+          FT_ASSIGNP_INNER( ptr, ft_mem_reallocdebug( memory, (itmsz),    \

+                                                 (oldcnt), (newcnt), \

+                                                 (ptr), __FILE__, __LINE__, &error ) )
+
+#define FT_MEM_QALLOC_MULT( ptr, count, item_size )                    \

+          FT_ASSIGNP_INNER( ptr, ft_mem_qreallocdebug( memory, (item_size), \

+                                                  0, (count),          \

+                                                  NULL, __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz)             \

+          FT_ASSIGNP_INNER( ptr, ft_mem_qreallocdebug( memory, (itmsz),    \

+                                                  (oldcnt), (newcnt), \

+                                                  (ptr), __FILE__, __LINE__, &error ) )

+  /*************************************************************************/

+  /*                                                                       */

+  /* The following functions macros expect that their pointer argument is  */

+  /* _typed_ in order to automatically compute array element sizes.        */

+  /*                                                                       */

+

+#define FT_MEM_NEW_ARRAY( ptr, count )                                      \

+          FT_ASSIGNP_INNER( ptr, ft_mem_reallocdebug( memory, sizeof ( *(ptr) ), \

+                                                 0, (count),                \

+                                                 NULL, __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_RENEW_ARRAY( ptr, cursz, newsz )                             \

+          FT_ASSIGNP_INNER( ptr, ft_mem_reallocdebug( memory, sizeof ( *(ptr) ), \

+                                                 (cursz), (newsz),          \

+                                                 (ptr), __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_QNEW_ARRAY( ptr, count )                                      \

+          FT_ASSIGNP_INNER( ptr, ft_mem_qreallocdebug( memory, sizeof ( *(ptr) ), \

+                                                  0, (count),                \

+                                                  NULL, __FILE__, __LINE__, &error ) )

+

+#define FT_MEM_QRENEW_ARRAY( ptr, cursz, newsz )                             \

+          FT_ASSIGNP_INNER( ptr, ft_mem_qreallocdebug( memory, sizeof ( *(ptr) ), \

+                                                  (cursz), (newsz),          \

+                                                  (ptr), __FILE__, __LINE__, &error ) )

+

+#endif

+

+#define FT_MEM_NEW( ptr )                        \

+          FT_MEM_ALLOC( ptr, sizeof ( *(ptr) ) )

+

+#define FT_MEM_QNEW( ptr )                        \

+          FT_MEM_QALLOC( ptr, sizeof ( *(ptr) ) )
+
+#define FT_MEM_SET_ERROR( cond )  ( (cond), error != 0 )
+
+
+#define FT_MEM_SET( dest, byte, count )     ft_memset( dest, byte, count )
+
+#define FT_MEM_COPY( dest, source, count )  ft_memcpy( dest, source, count )
+
+#define FT_MEM_MOVE( dest, source, count )  ft_memmove( dest, source, count )
+
+
+#define FT_MEM_ZERO( dest, count )  FT_MEM_SET( dest, 0, count )
+
+#define FT_ZERO( p )                FT_MEM_ZERO( p, sizeof ( *(p) ) )
+
+
+#define FT_ARRAY_ZERO( dest, count )                        \
+          FT_MEM_ZERO( dest, (count) * sizeof ( *(dest) ) )
+
+#define FT_ARRAY_COPY( dest, source, count )                        \
+          FT_MEM_COPY( dest, source, (count) * sizeof ( *(dest) ) )
+
+#define FT_ARRAY_MOVE( dest, source, count )                        \
+          FT_MEM_MOVE( dest, source, (count) * sizeof ( *(dest) ) )
+
+
+  /*
+   *  Return the maximum number of addressable elements in an array.
+   *  We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
+   *  any problems.
+   */
+#define FT_ARRAY_MAX( ptr )           ( FT_INT_MAX / sizeof ( *(ptr) ) )
+
+#define FT_ARRAY_CHECK( ptr, count )  ( (count) <= FT_ARRAY_MAX( ptr ) )
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The following functions macros expect that their pointer argument is  */
+  /* _typed_ in order to automatically compute array element sizes.        */
+  /*                                                                       */
+
+#define FT_ALLOC( ptr, size )                           \
+          FT_MEM_SET_ERROR( FT_MEM_ALLOC( ptr, size ) )
+
+#define FT_REALLOC( ptr, cursz, newsz )                           \
+          FT_MEM_SET_ERROR( FT_MEM_REALLOC( ptr, cursz, newsz ) )
+
+#define FT_ALLOC_MULT( ptr, count, item_size )                           \
+          FT_MEM_SET_ERROR( FT_MEM_ALLOC_MULT( ptr, count, item_size ) )
+
+#define FT_REALLOC_MULT( ptr, oldcnt, newcnt, itmsz )              \
+          FT_MEM_SET_ERROR( FT_MEM_REALLOC_MULT( ptr, oldcnt,      \
+                                                 newcnt, itmsz ) )
+
+#define FT_QALLOC( ptr, size )                           \
+          FT_MEM_SET_ERROR( FT_MEM_QALLOC( ptr, size ) )
+
+#define FT_QREALLOC( ptr, cursz, newsz )                           \
+          FT_MEM_SET_ERROR( FT_MEM_QREALLOC( ptr, cursz, newsz ) )
+
+#define FT_QALLOC_MULT( ptr, count, item_size )                           \
+          FT_MEM_SET_ERROR( FT_MEM_QALLOC_MULT( ptr, count, item_size ) )
+
+#define FT_QREALLOC_MULT( ptr, oldcnt, newcnt, itmsz )              \
+          FT_MEM_SET_ERROR( FT_MEM_QREALLOC_MULT( ptr, oldcnt,      \
+                                                  newcnt, itmsz ) )
+
+#define FT_FREE( ptr )  FT_MEM_FREE( ptr )
+
+#define FT_NEW( ptr )  FT_MEM_SET_ERROR( FT_MEM_NEW( ptr ) )
+
+#define FT_NEW_ARRAY( ptr, count )                           \
+          FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) )
+
+#define FT_RENEW_ARRAY( ptr, curcnt, newcnt )                           \
+          FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
+
+#define FT_QNEW( ptr )                           \
+          FT_MEM_SET_ERROR( FT_MEM_QNEW( ptr ) )
+
+#define FT_QNEW_ARRAY( ptr, count )                          \
+          FT_MEM_SET_ERROR( FT_MEM_NEW_ARRAY( ptr, count ) )
+
+#define FT_QRENEW_ARRAY( ptr, curcnt, newcnt )                          \
+          FT_MEM_SET_ERROR( FT_MEM_RENEW_ARRAY( ptr, curcnt, newcnt ) )
+
+
+  FT_BASE( FT_Pointer )
+  ft_mem_strdup( FT_Memory    memory,
+                 const char*  str,
+                 FT_Error    *p_error );
+
+  FT_BASE( FT_Pointer )
+  ft_mem_dup( FT_Memory    memory,
+              const void*  address,
+              FT_ULong     size,
+              FT_Error    *p_error );
+
+
+#define FT_MEM_STRDUP( dst, str )                                            \
+          (dst) = (char*)ft_mem_strdup( memory, (const char*)(str), &error )
+
+#define FT_STRDUP( dst, str )                           \
+          FT_MEM_SET_ERROR( FT_MEM_STRDUP( dst, str ) )
+
+#define FT_MEM_DUP( dst, address, size )                                    \
+          (dst) = ft_mem_dup( memory, (address), (FT_ULong)(size), &error )
+
+#define FT_DUP( dst, address, size )                           \
+          FT_MEM_SET_ERROR( FT_MEM_DUP( dst, address, size ) )
+
+
+  /* Return >= 1 if a truncation occurs.            */
+  /* Return 0 if the source string fits the buffer. */
+  /* This is *not* the same as strlcpy().           */
+  FT_BASE( FT_Int )
+  ft_mem_strcpyn( char*        dst,
+                  const char*  src,
+                  FT_ULong     size );
+
+#define FT_STRCPYN( dst, src, size )                                         \
+          ft_mem_strcpyn( (char*)dst, (const char*)(src), (FT_ULong)(size) )
+
+ /* */
+
+
+FT_END_HEADER
+
+#endif /* __FTMEMORY_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftobjs.h b/core/include/thirdparties/freetype/freetype/internal/ftobjs.h
new file mode 100644
index 0000000..d6f7de3
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftobjs.h
@@ -0,0 +1,1569 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftobjs.h                                                               */
+/*                                                                         */
+/*    The FreeType private base classes (specification).                   */
+/*                                                                         */
+/*  Copyright 1996-2006, 2008, 2010, 2012-2013 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*  This file contains the definition of all internal FreeType classes.  */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTOBJS_H__
+#define __FTOBJS_H__
+
+#include "../../ft2build.h"
+#include "../ftrender.h"
+#include "../ftsizes.h"
+#include "../ftlcdfil.h"
+#include "ftmemory.h"
+#include "ftgloadr.h"
+#include "ftdriver.h"
+#include "autohint.h"
+#include "ftserv.h"
+#include "ftpic.h"
+
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+#include "../ftincrem.h"
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Some generic definitions.                                             */
+  /*                                                                       */
+#ifndef TRUE
+#define TRUE  1
+#endif
+
+#ifndef FALSE
+#define FALSE  0
+#endif
+
+#ifndef NULL
+#define NULL  (void*)0
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The min and max functions missing in C.  As usual, be careful not to  */
+  /* write things like FT_MIN( a++, b++ ) to avoid side effects.           */
+  /*                                                                       */
+#define FT_MIN( a, b )  ( (a) < (b) ? (a) : (b) )
+#define FT_MAX( a, b )  ( (a) > (b) ? (a) : (b) )
+
+#define FT_ABS( a )     ( (a) < 0 ? -(a) : (a) )
+
+
+#define FT_PAD_FLOOR( x, n )  ( (x) & ~((n)-1) )
+#define FT_PAD_ROUND( x, n )  FT_PAD_FLOOR( (x) + ((n)/2), n )
+#define FT_PAD_CEIL( x, n )   FT_PAD_FLOOR( (x) + ((n)-1), n )
+
+#define FT_PIX_FLOOR( x )     ( (x) & ~63 )
+#define FT_PIX_ROUND( x )     FT_PIX_FLOOR( (x) + 32 )
+#define FT_PIX_CEIL( x )      FT_PIX_FLOOR( (x) + 63 )
+
+
+  /*
+   *  Return the highest power of 2 that is <= value; this correspond to
+   *  the highest bit in a given 32-bit value.
+   */
+  FT_BASE( FT_UInt32 )
+  ft_highpow2( FT_UInt32  value );
+
+
+  /*
+   *  character classification functions -- since these are used to parse
+   *  font files, we must not use those in <ctypes.h> which are
+   *  locale-dependent
+   */
+#define  ft_isdigit( x )   ( ( (unsigned)(x) - '0' ) < 10U )
+
+#define  ft_isxdigit( x )  ( ( (unsigned)(x) - '0' ) < 10U || \
+                             ( (unsigned)(x) - 'a' ) < 6U  || \
+                             ( (unsigned)(x) - 'A' ) < 6U  )
+
+  /* the next two macros assume ASCII representation */
+#define  ft_isupper( x )  ( ( (unsigned)(x) - 'A' ) < 26U )
+#define  ft_islower( x )  ( ( (unsigned)(x) - 'a' ) < 26U )
+
+#define  ft_isalpha( x )  ( ft_isupper( x ) || ft_islower( x ) )
+#define  ft_isalnum( x )  ( ft_isdigit( x ) || ft_isalpha( x ) )
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                       C H A R M A P S                           ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* handle to internal charmap object */
+  typedef struct FT_CMapRec_*              FT_CMap;
+
+  /* handle to charmap class structure */
+  typedef const struct FT_CMap_ClassRec_*  FT_CMap_Class;
+
+  /* internal charmap object structure */
+  typedef struct  FT_CMapRec_
+  {
+    FT_CharMapRec  charmap;
+    FT_CMap_Class  clazz;
+
+  } FT_CMapRec;
+
+  /* typecase any pointer to a charmap handle */
+#define FT_CMAP( x )              ((FT_CMap)( x ))
+
+  /* obvious macros */
+#define FT_CMAP_PLATFORM_ID( x )  FT_CMAP( x )->charmap.platform_id
+#define FT_CMAP_ENCODING_ID( x )  FT_CMAP( x )->charmap.encoding_id
+#define FT_CMAP_ENCODING( x )     FT_CMAP( x )->charmap.encoding
+#define FT_CMAP_FACE( x )         FT_CMAP( x )->charmap.face
+
+
+  /* class method definitions */
+  typedef FT_Error
+  (*FT_CMap_InitFunc)( FT_CMap     cmap,
+                       FT_Pointer  init_data );
+
+  typedef void
+  (*FT_CMap_DoneFunc)( FT_CMap  cmap );
+
+  typedef FT_UInt
+  (*FT_CMap_CharIndexFunc)( FT_CMap    cmap,
+                            FT_UInt32  char_code );
+
+  typedef FT_UInt
+  (*FT_CMap_CharNextFunc)( FT_CMap     cmap,
+                           FT_UInt32  *achar_code );
+
+  typedef FT_UInt
+  (*FT_CMap_CharVarIndexFunc)( FT_CMap    cmap,
+                               FT_CMap    unicode_cmap,
+                               FT_UInt32  char_code,
+                               FT_UInt32  variant_selector );
+
+  typedef FT_Bool
+  (*FT_CMap_CharVarIsDefaultFunc)( FT_CMap    cmap,
+                                   FT_UInt32  char_code,
+                                   FT_UInt32  variant_selector );
+
+  typedef FT_UInt32 *
+  (*FT_CMap_VariantListFunc)( FT_CMap    cmap,
+                              FT_Memory  mem );
+
+  typedef FT_UInt32 *
+  (*FT_CMap_CharVariantListFunc)( FT_CMap    cmap,
+                                  FT_Memory  mem,
+                                  FT_UInt32  char_code );
+
+  typedef FT_UInt32 *
+  (*FT_CMap_VariantCharListFunc)( FT_CMap    cmap,
+                                  FT_Memory  mem,
+                                  FT_UInt32  variant_selector );
+
+
+  typedef struct  FT_CMap_ClassRec_
+  {
+    FT_ULong               size;
+    FT_CMap_InitFunc       init;
+    FT_CMap_DoneFunc       done;
+    FT_CMap_CharIndexFunc  char_index;
+    FT_CMap_CharNextFunc   char_next;
+
+    /* Subsequent entries are special ones for format 14 -- the variant */
+    /* selector subtable which behaves like no other                    */
+
+    FT_CMap_CharVarIndexFunc      char_var_index;
+    FT_CMap_CharVarIsDefaultFunc  char_var_default;
+    FT_CMap_VariantListFunc       variant_list;
+    FT_CMap_CharVariantListFunc   charvariant_list;
+    FT_CMap_VariantCharListFunc   variantchar_list;
+
+  } FT_CMap_ClassRec;
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DECLARE_CMAP_CLASS( class_ )              \
+  FT_CALLBACK_TABLE const  FT_CMap_ClassRec class_;
+
+#define FT_DEFINE_CMAP_CLASS(       \
+          class_,                   \
+          size_,                    \
+          init_,                    \
+          done_,                    \
+          char_index_,              \
+          char_next_,               \
+          char_var_index_,          \
+          char_var_default_,        \
+          variant_list_,            \
+          charvariant_list_,        \
+          variantchar_list_ )       \
+  FT_CALLBACK_TABLE_DEF             \
+  const FT_CMap_ClassRec  class_ =  \
+  {                                 \
+    size_,                          \
+    init_,                          \
+    done_,                          \
+    char_index_,                    \
+    char_next_,                     \
+    char_var_index_,                \
+    char_var_default_,              \
+    variant_list_,                  \
+    charvariant_list_,              \
+    variantchar_list_               \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DECLARE_CMAP_CLASS( class_ )                  \
+  void                                                   \
+  FT_Init_Class_ ## class_( FT_Library         library,  \
+                            FT_CMap_ClassRec*  clazz );
+
+#define FT_DEFINE_CMAP_CLASS(                            \
+          class_,                                        \
+          size_,                                         \
+          init_,                                         \
+          done_,                                         \
+          char_index_,                                   \
+          char_next_,                                    \
+          char_var_index_,                               \
+          char_var_default_,                             \
+          variant_list_,                                 \
+          charvariant_list_,                             \
+          variantchar_list_ )                            \
+  void                                                   \
+  FT_Init_Class_ ## class_( FT_Library         library,  \
+                            FT_CMap_ClassRec*  clazz )   \
+  {                                                      \
+    FT_UNUSED( library );                                \
+                                                         \
+    clazz->size             = size_;                     \
+    clazz->init             = init_;                     \
+    clazz->done             = done_;                     \
+    clazz->char_index       = char_index_;               \
+    clazz->char_next        = char_next_;                \
+    clazz->char_var_index   = char_var_index_;           \
+    clazz->char_var_default = char_var_default_;         \
+    clazz->variant_list     = variant_list_;             \
+    clazz->charvariant_list = charvariant_list_;         \
+    clazz->variantchar_list = variantchar_list_;         \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+  /* create a new charmap and add it to charmap->face */
+  FT_BASE( FT_Error )
+  FT_CMap_New( FT_CMap_Class  clazz,
+               FT_Pointer     init_data,
+               FT_CharMap     charmap,
+               FT_CMap       *acmap );
+
+  /* destroy a charmap and remove it from face's list */
+  FT_BASE( void )
+  FT_CMap_Done( FT_CMap  cmap );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Face_InternalRec                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This structure contains the internal fields of each FT_Face        */
+  /*    object.  These fields may change between different releases of     */
+  /*    FreeType.                                                          */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    max_points ::                                                      */
+  /*      The maximum number of points used to store the vectorial outline */
+  /*      of any glyph in this face.  If this value cannot be known in     */
+  /*      advance, or if the face isn't scalable, this should be set to 0. */
+  /*      Only relevant for scalable formats.                              */
+  /*                                                                       */
+  /*    max_contours ::                                                    */
+  /*      The maximum number of contours used to store the vectorial       */
+  /*      outline of any glyph in this face.  If this value cannot be      */
+  /*      known in advance, or if the face isn't scalable, this should be  */
+  /*      set to 0.  Only relevant for scalable formats.                   */
+  /*                                                                       */
+  /*    transform_matrix ::                                                */
+  /*      A 2x2 matrix of 16.16 coefficients used to transform glyph       */
+  /*      outlines after they are loaded from the font.  Only used by the  */
+  /*      convenience functions.                                           */
+  /*                                                                       */
+  /*    transform_delta ::                                                 */
+  /*      A translation vector used to transform glyph outlines after they */
+  /*      are loaded from the font.  Only used by the convenience          */
+  /*      functions.                                                       */
+  /*                                                                       */
+  /*    transform_flags ::                                                 */
+  /*      Some flags used to classify the transform.  Only used by the     */
+  /*      convenience functions.                                           */
+  /*                                                                       */
+  /*    services ::                                                        */
+  /*      A cache for frequently used services.  It should be only         */
+  /*      accessed with the macro `FT_FACE_LOOKUP_SERVICE'.                */
+  /*                                                                       */
+  /*    incremental_interface ::                                           */
+  /*      If non-null, the interface through which glyph data and metrics  */
+  /*      are loaded incrementally for faces that do not provide all of    */
+  /*      this data when first opened.  This field exists only if          */
+  /*      @FT_CONFIG_OPTION_INCREMENTAL is defined.                        */
+  /*                                                                       */
+  /*    ignore_unpatented_hinter ::                                        */
+  /*      This boolean flag instructs the glyph loader to ignore the       */
+  /*      native font hinter, if one is found.  This is exclusively used   */
+  /*      in the case when the unpatented hinter is compiled within the    */
+  /*      library.                                                         */
+  /*                                                                       */
+  /*    refcount ::                                                        */
+  /*      A counter initialized to~1 at the time an @FT_Face structure is  */
+  /*      created.  @FT_Reference_Face increments this counter, and        */
+  /*      @FT_Done_Face only destroys a face if the counter is~1,          */
+  /*      otherwise it simply decrements it.                               */
+  /*                                                                       */
+  typedef struct  FT_Face_InternalRec_
+  {
+    FT_Matrix           transform_matrix;
+    FT_Vector           transform_delta;
+    FT_Int              transform_flags;
+
+    FT_ServiceCacheRec  services;
+
+#ifdef FT_CONFIG_OPTION_INCREMENTAL
+    FT_Incremental_InterfaceRec*  incremental_interface;
+#endif
+
+    FT_Bool             ignore_unpatented_hinter;
+    FT_Int              refcount;
+
+  } FT_Face_InternalRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Slot_InternalRec                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This structure contains the internal fields of each FT_GlyphSlot   */
+  /*    object.  These fields may change between different releases of     */
+  /*    FreeType.                                                          */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    loader            :: The glyph loader object used to load outlines */
+  /*                         into the glyph slot.                          */
+  /*                                                                       */
+  /*    flags             :: Possible values are zero or                   */
+  /*                         FT_GLYPH_OWN_BITMAP.  The latter indicates    */
+  /*                         that the FT_GlyphSlot structure owns the      */
+  /*                         bitmap buffer.                                */
+  /*                                                                       */
+  /*    glyph_transformed :: Boolean.  Set to TRUE when the loaded glyph   */
+  /*                         must be transformed through a specific        */
+  /*                         font transformation.  This is _not_ the same  */
+  /*                         as the face transform set through             */
+  /*                         FT_Set_Transform().                           */
+  /*                                                                       */
+  /*    glyph_matrix      :: The 2x2 matrix corresponding to the glyph     */
+  /*                         transformation, if necessary.                 */
+  /*                                                                       */
+  /*    glyph_delta       :: The 2d translation vector corresponding to    */
+  /*                         the glyph transformation, if necessary.       */
+  /*                                                                       */
+  /*    glyph_hints       :: Format-specific glyph hints management.       */
+  /*                                                                       */
+
+#define FT_GLYPH_OWN_BITMAP  0x1
+
+  typedef struct  FT_Slot_InternalRec_
+  {
+    FT_GlyphLoader  loader;
+    FT_UInt         flags;
+    FT_Bool         glyph_transformed;
+    FT_Matrix       glyph_matrix;
+    FT_Vector       glyph_delta;
+    void*           glyph_hints;
+
+  } FT_GlyphSlot_InternalRec;
+
+
+#if 0
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_Size_InternalRec                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This structure contains the internal fields of each FT_Size        */
+  /*    object.  Currently, it's empty.                                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+  typedef struct  FT_Size_InternalRec_
+  {
+    /* empty */
+
+  } FT_Size_InternalRec;
+
+#endif
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                         M O D U L E S                           ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_ModuleRec                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A module object instance.                                          */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    clazz   :: A pointer to the module's class.                        */
+  /*                                                                       */
+  /*    library :: A handle to the parent library object.                  */
+  /*                                                                       */
+  /*    memory  :: A handle to the memory manager.                         */
+  /*                                                                       */
+  typedef struct  FT_ModuleRec_
+  {
+    FT_Module_Class*  clazz;
+    FT_Library        library;
+    FT_Memory         memory;
+
+  } FT_ModuleRec;
+
+
+  /* typecast an object to an FT_Module */
+#define FT_MODULE( x )          ((FT_Module)( x ))
+#define FT_MODULE_CLASS( x )    FT_MODULE( x )->clazz
+#define FT_MODULE_LIBRARY( x )  FT_MODULE( x )->library
+#define FT_MODULE_MEMORY( x )   FT_MODULE( x )->memory
+
+
+#define FT_MODULE_IS_DRIVER( x )  ( FT_MODULE_CLASS( x )->module_flags & \
+                                    FT_MODULE_FONT_DRIVER )
+
+#define FT_MODULE_IS_RENDERER( x )  ( FT_MODULE_CLASS( x )->module_flags & \
+                                      FT_MODULE_RENDERER )
+
+#define FT_MODULE_IS_HINTER( x )  ( FT_MODULE_CLASS( x )->module_flags & \
+                                    FT_MODULE_HINTER )
+
+#define FT_MODULE_IS_STYLER( x )  ( FT_MODULE_CLASS( x )->module_flags & \
+                                    FT_MODULE_STYLER )
+
+#define FT_DRIVER_IS_SCALABLE( x )  ( FT_MODULE_CLASS( x )->module_flags & \
+                                      FT_MODULE_DRIVER_SCALABLE )
+
+#define FT_DRIVER_USES_OUTLINES( x )  !( FT_MODULE_CLASS( x )->module_flags & \
+                                         FT_MODULE_DRIVER_NO_OUTLINES )
+
+#define FT_DRIVER_HAS_HINTER( x )  ( FT_MODULE_CLASS( x )->module_flags & \
+                                     FT_MODULE_DRIVER_HAS_HINTER )
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Module_Interface                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Finds a module and returns its specific interface as a typeless    */
+  /*    pointer.                                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library     :: A handle to the library object.                     */
+  /*                                                                       */
+  /*    module_name :: The module's name (as an ASCII string).             */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    A module-specific interface if available, 0 otherwise.             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    You should better be familiar with FreeType internals to know      */
+  /*    which module to look for, and what its interface is :-)            */
+  /*                                                                       */
+  FT_BASE( const void* )
+  FT_Get_Module_Interface( FT_Library   library,
+                           const char*  mod_name );
+
+  FT_BASE( FT_Pointer )
+  ft_module_get_service( FT_Module    module,
+                         const char*  service_id );
+
+  /* */
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****   F A C E,   S I Z E   &   G L Y P H   S L O T   O B J E C T S  ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* a few macros used to perform easy typecasts with minimal brain damage */
+
+#define FT_FACE( x )          ((FT_Face)(x))
+#define FT_SIZE( x )          ((FT_Size)(x))
+#define FT_SLOT( x )          ((FT_GlyphSlot)(x))
+
+#define FT_FACE_DRIVER( x )   FT_FACE( x )->driver
+#define FT_FACE_LIBRARY( x )  FT_FACE_DRIVER( x )->root.library
+#define FT_FACE_MEMORY( x )   FT_FACE( x )->memory
+#define FT_FACE_STREAM( x )   FT_FACE( x )->stream
+
+#define FT_SIZE_FACE( x )     FT_SIZE( x )->face
+#define FT_SLOT_FACE( x )     FT_SLOT( x )->face
+
+#define FT_FACE_SLOT( x )     FT_FACE( x )->glyph
+#define FT_FACE_SIZE( x )     FT_FACE( x )->size
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_New_GlyphSlot                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    It is sometimes useful to have more than one glyph slot for a      */
+  /*    given face object.  This function is used to create additional     */
+  /*    slots.  All of them are automatically discarded when the face is   */
+  /*    destroyed.                                                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face  :: A handle to a parent face object.                         */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    aslot :: A handle to a new glyph slot object.                      */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  FT_BASE( FT_Error )
+  FT_New_GlyphSlot( FT_Face        face,
+                    FT_GlyphSlot  *aslot );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Done_GlyphSlot                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Destroys a given glyph slot.  Remember however that all slots are  */
+  /*    automatically destroyed with its parent.  Using this function is   */
+  /*    not always mandatory.                                              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    slot :: A handle to a target glyph slot.                           */
+  /*                                                                       */
+  FT_BASE( void )
+  FT_Done_GlyphSlot( FT_GlyphSlot  slot );
+
+ /* */
+
+#define FT_REQUEST_WIDTH( req )                                            \
+          ( (req)->horiResolution                                          \
+              ? (FT_Pos)( (req)->width * (req)->horiResolution + 36 ) / 72 \
+              : (req)->width )
+
+#define FT_REQUEST_HEIGHT( req )                                            \
+          ( (req)->vertResolution                                           \
+              ? (FT_Pos)( (req)->height * (req)->vertResolution + 36 ) / 72 \
+              : (req)->height )
+
+
+  /* Set the metrics according to a bitmap strike. */
+  FT_BASE( void )
+  FT_Select_Metrics( FT_Face   face,
+                     FT_ULong  strike_index );
+
+
+  /* Set the metrics according to a size request. */
+  FT_BASE( void )
+  FT_Request_Metrics( FT_Face          face,
+                      FT_Size_Request  req );
+
+
+  /* Match a size request against `available_sizes'. */
+  FT_BASE( FT_Error )
+  FT_Match_Size( FT_Face          face,
+                 FT_Size_Request  req,
+                 FT_Bool          ignore_width,
+                 FT_ULong*        size_index );
+
+
+  /* Use the horizontal metrics to synthesize the vertical metrics. */
+  /* If `advance' is zero, it is also synthesized.                  */
+  FT_BASE( void )
+  ft_synthesize_vertical_metrics( FT_Glyph_Metrics*  metrics,
+                                  FT_Pos             advance );
+
+
+  /* Free the bitmap of a given glyphslot when needed (i.e., only when it */
+  /* was allocated with ft_glyphslot_alloc_bitmap).                       */
+  FT_BASE( void )
+  ft_glyphslot_free_bitmap( FT_GlyphSlot  slot );
+
+
+  /* Allocate a new bitmap buffer in a glyph slot. */
+  FT_BASE( FT_Error )
+  ft_glyphslot_alloc_bitmap( FT_GlyphSlot  slot,
+                             FT_ULong      size );
+
+
+  /* Set the bitmap buffer in a glyph slot to a given pointer.  The buffer */
+  /* will not be freed by a later call to ft_glyphslot_free_bitmap.        */
+  FT_BASE( void )
+  ft_glyphslot_set_bitmap( FT_GlyphSlot  slot,
+                           FT_Byte*      buffer );
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                        R E N D E R E R S                        ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+#define FT_RENDERER( x )      ((FT_Renderer)( x ))
+#define FT_GLYPH( x )         ((FT_Glyph)( x ))
+#define FT_BITMAP_GLYPH( x )  ((FT_BitmapGlyph)( x ))
+#define FT_OUTLINE_GLYPH( x ) ((FT_OutlineGlyph)( x ))
+
+
+  typedef struct  FT_RendererRec_
+  {
+    FT_ModuleRec            root;
+    FT_Renderer_Class*      clazz;
+    FT_Glyph_Format         glyph_format;
+    FT_Glyph_Class          glyph_class;
+
+    FT_Raster               raster;
+    FT_Raster_Render_Func   raster_render;
+    FT_Renderer_RenderFunc  render;
+
+  } FT_RendererRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                    F O N T   D R I V E R S                      ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /* typecast a module into a driver easily */
+#define FT_DRIVER( x )        ((FT_Driver)(x))
+
+  /* typecast a module as a driver, and get its driver class */
+#define FT_DRIVER_CLASS( x )  FT_DRIVER( x )->clazz
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_DriverRec                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The root font driver class.  A font driver is responsible for      */
+  /*    managing and loading font files of a given format.                 */
+  /*                                                                       */
+  /*  <Fields>                                                             */
+  /*     root         :: Contains the fields of the root module class.     */
+  /*                                                                       */
+  /*     clazz        :: A pointer to the font driver's class.  Note that  */
+  /*                     this is NOT root.clazz.  `class' wasn't used      */
+  /*                     as it is a reserved word in C++.                  */
+  /*                                                                       */
+  /*     faces_list   :: The list of faces currently opened by this        */
+  /*                     driver.                                           */
+  /*                                                                       */
+  /*     glyph_loader :: The glyph loader for all faces managed by this    */
+  /*                     driver.  This object isn't defined for unscalable */
+  /*                     formats.                                          */
+  /*                                                                       */
+  typedef struct  FT_DriverRec_
+  {
+    FT_ModuleRec     root;
+    FT_Driver_Class  clazz;
+    FT_ListRec       faces_list;
+    FT_GlyphLoader   glyph_loader;
+
+  } FT_DriverRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                       L I B R A R I E S                         ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /* This hook is used by the TrueType debugger.  It must be set to an */
+  /* alternate truetype bytecode interpreter function.                 */
+#define FT_DEBUG_HOOK_TRUETYPE            0
+
+
+  /* Set this debug hook to a non-null pointer to force unpatented hinting */
+  /* for all faces when both TT_USE_BYTECODE_INTERPRETER and               */
+  /* TT_CONFIG_OPTION_UNPATENTED_HINTING are defined.  This is only used   */
+  /* during debugging.                                                     */
+#define FT_DEBUG_HOOK_UNPATENTED_HINTING  1
+
+
+  typedef void  (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap*      bitmap,
+                                            FT_Render_Mode  render_mode,
+                                            FT_Library      library );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    FT_LibraryRec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The FreeType library class.  This is the root of all FreeType      */
+  /*    data.  Use FT_New_Library() to create a library object, and        */
+  /*    FT_Done_Library() to discard it and all child objects.             */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    memory           :: The library's memory object.  Manages memory   */
+  /*                        allocation.                                    */
+  /*                                                                       */
+  /*    version_major    :: The major version number of the library.       */
+  /*                                                                       */
+  /*    version_minor    :: The minor version number of the library.       */
+  /*                                                                       */
+  /*    version_patch    :: The current patch level of the library.        */
+  /*                                                                       */
+  /*    num_modules      :: The number of modules currently registered     */
+  /*                        within this library.  This is set to 0 for new */
+  /*                        libraries.  New modules are added through the  */
+  /*                        FT_Add_Module() API function.                  */
+  /*                                                                       */
+  /*    modules          :: A table used to store handles to the currently */
+  /*                        registered modules. Note that each font driver */
+  /*                        contains a list of its opened faces.           */
+  /*                                                                       */
+  /*    renderers        :: The list of renderers currently registered     */
+  /*                        within the library.                            */
+  /*                                                                       */
+  /*    cur_renderer     :: The current outline renderer.  This is a       */
+  /*                        shortcut used to avoid parsing the list on     */
+  /*                        each call to FT_Outline_Render().  It is a     */
+  /*                        handle to the current renderer for the         */
+  /*                        FT_GLYPH_FORMAT_OUTLINE format.                */
+  /*                                                                       */
+  /*    auto_hinter      :: XXX                                            */
+  /*                                                                       */
+  /*    raster_pool      :: The raster object's render pool.  This can     */
+  /*                        ideally be changed dynamically at run-time.    */
+  /*                                                                       */
+  /*    raster_pool_size :: The size of the render pool in bytes.          */
+  /*                                                                       */
+  /*    debug_hooks      :: XXX                                            */
+  /*                                                                       */
+  /*    lcd_filter       :: If subpixel rendering is activated, the        */
+  /*                        selected LCD filter mode.                      */
+  /*                                                                       */
+  /*    lcd_extra        :: If subpixel rendering is activated, the number */
+  /*                        of extra pixels needed for the LCD filter.     */
+  /*                                                                       */
+  /*    lcd_weights      :: If subpixel rendering is activated, the LCD    */
+  /*                        filter weights, if any.                        */
+  /*                                                                       */
+  /*    lcd_filter_func  :: If subpixel rendering is activated, the LCD    */
+  /*                        filtering callback function.                   */
+  /*                                                                       */
+  /*    pic_container    :: Contains global structs and tables, instead    */
+  /*                        of defining them globallly.                    */
+  /*                                                                       */
+  /*    refcount         :: A counter initialized to~1 at the time an      */
+  /*                        @FT_Library structure is created.              */
+  /*                        @FT_Reference_Library increments this counter, */
+  /*                        and @FT_Done_Library only destroys a library   */
+  /*                        if the counter is~1, otherwise it simply       */
+  /*                        decrements it.                                 */
+  /*                                                                       */
+  typedef struct  FT_LibraryRec_
+  {
+    FT_Memory          memory;           /* library's memory manager */
+
+    FT_Int             version_major;
+    FT_Int             version_minor;
+    FT_Int             version_patch;
+
+    FT_UInt            num_modules;
+    FT_Module          modules[FT_MAX_MODULES];  /* module objects  */
+
+    FT_ListRec         renderers;        /* list of renderers        */
+    FT_Renderer        cur_renderer;     /* current outline renderer */
+    FT_Module          auto_hinter;
+
+    FT_Byte*           raster_pool;      /* scan-line conversion */
+                                         /* render pool          */
+    FT_ULong           raster_pool_size; /* size of render pool in bytes */
+
+    FT_DebugHook_Func  debug_hooks[4];
+
+#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
+    FT_LcdFilter             lcd_filter;
+    FT_Int                   lcd_extra;        /* number of extra pixels */
+    FT_Byte                  lcd_weights[7];   /* filter weights, if any */
+    FT_Bitmap_LcdFilterFunc  lcd_filter_func;  /* filtering callback     */
+#endif
+
+#ifdef FT_CONFIG_OPTION_PIC
+    FT_PIC_Container   pic_container;
+#endif
+
+    FT_Int             refcount;
+
+  } FT_LibraryRec;
+
+
+  FT_BASE( FT_Renderer )
+  FT_Lookup_Renderer( FT_Library       library,
+                      FT_Glyph_Format  format,
+                      FT_ListNode*     node );
+
+  FT_BASE( FT_Error )
+  FT_Render_Glyph_Internal( FT_Library      library,
+                            FT_GlyphSlot    slot,
+                            FT_Render_Mode  render_mode );
+
+  typedef const char*
+  (*FT_Face_GetPostscriptNameFunc)( FT_Face  face );
+
+  typedef FT_Error
+  (*FT_Face_GetGlyphNameFunc)( FT_Face     face,
+                               FT_UInt     glyph_index,
+                               FT_Pointer  buffer,
+                               FT_UInt     buffer_max );
+
+  typedef FT_UInt
+  (*FT_Face_GetGlyphNameIndexFunc)( FT_Face     face,
+                                    FT_String*  glyph_name );
+
+
+#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_New_Memory                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Creates a new memory object.                                       */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    A pointer to the new memory object.  0 in case of error.           */
+  /*                                                                       */
+  FT_BASE( FT_Memory )
+  FT_New_Memory( void );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Done_Memory                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Discards memory manager.                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory :: A handle to the memory manager.                          */
+  /*                                                                       */
+  FT_BASE( void )
+  FT_Done_Memory( FT_Memory  memory );
+
+#endif /* !FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */
+
+
+  /* Define default raster's interface.  The default raster is located in  */
+  /* `src/base/ftraster.c'.                                                */
+  /*                                                                       */
+  /* Client applications can register new rasters through the              */
+  /* FT_Set_Raster() API.                                                  */
+
+#ifndef FT_NO_DEFAULT_RASTER
+  FT_EXPORT_VAR( FT_Raster_Funcs )  ft_default_raster;
+#endif
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                      P I C   S U P P O R T                      ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /* PIC support macros for ftimage.h */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_OUTLINE_FUNCS                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an instance of FT_Outline_Funcs struct.         */
+  /*    When FT_CONFIG_OPTION_PIC is defined an init funtion will need to  */
+  /*    be called with a pre-allocated structure to be filled.             */
+  /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
+  /*    allocated in the global scope (or the scope where the macro        */
+  /*    is used).                                                          */
+  /*                                                                       */
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_OUTLINE_FUNCS(           \
+          class_,                          \
+          move_to_,                        \
+          line_to_,                        \
+          conic_to_,                       \
+          cubic_to_,                       \
+          shift_,                          \
+          delta_ )                         \
+  static const  FT_Outline_Funcs class_ =  \
+  {                                        \
+    move_to_,                              \
+    line_to_,                              \
+    conic_to_,                             \
+    cubic_to_,                             \
+    shift_,                                \
+    delta_                                 \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_OUTLINE_FUNCS(                     \
+          class_,                                    \
+          move_to_,                                  \
+          line_to_,                                  \
+          conic_to_,                                 \
+          cubic_to_,                                 \
+          shift_,                                    \
+          delta_ )                                   \
+  static FT_Error                                    \
+  Init_Class_ ## class_( FT_Outline_Funcs*  clazz )  \
+  {                                                  \
+    clazz->move_to  = move_to_;                      \
+    clazz->line_to  = line_to_;                      \
+    clazz->conic_to = conic_to_;                     \
+    clazz->cubic_to = cubic_to_;                     \
+    clazz->shift    = shift_;                        \
+    clazz->delta    = delta_;                        \
+                                                     \
+    return FT_Err_Ok;                                \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_RASTER_FUNCS                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an instance of FT_Raster_Funcs struct.          */
+  /*    When FT_CONFIG_OPTION_PIC is defined an init funtion will need to  */
+  /*    be called with a pre-allocated structure to be filled.             */
+  /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
+  /*    allocated in the global scope (or the scope where the macro        */
+  /*    is used).                                                          */
+  /*                                                                       */
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_RASTER_FUNCS(    \
+          class_,                  \
+          glyph_format_,           \
+          raster_new_,             \
+          raster_reset_,           \
+          raster_set_mode_,        \
+          raster_render_,          \
+          raster_done_ )           \
+  const FT_Raster_Funcs  class_ =  \
+  {                                \
+    glyph_format_,                 \
+    raster_new_,                   \
+    raster_reset_,                 \
+    raster_set_mode_,              \
+    raster_render_,                \
+    raster_done_                   \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_RASTER_FUNCS(                        \
+          class_,                                      \
+          glyph_format_,                               \
+          raster_new_,                                 \
+          raster_reset_,                               \
+          raster_set_mode_,                            \
+          raster_render_,                              \
+          raster_done_ )                               \
+  void                                                 \
+  FT_Init_Class_ ## class_( FT_Raster_Funcs*  clazz )  \
+  {                                                    \
+    clazz->glyph_format    = glyph_format_;            \
+    clazz->raster_new      = raster_new_;              \
+    clazz->raster_reset    = raster_reset_;            \
+    clazz->raster_set_mode = raster_set_mode_;         \
+    clazz->raster_render   = raster_render_;           \
+    clazz->raster_done     = raster_done_;             \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+  /* PIC support macros for ftrender.h */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_GLYPH                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an instance of FT_Glyph_Class struct.           */
+  /*    When FT_CONFIG_OPTION_PIC is defined an init funtion will need to  */
+  /*    be called with a pre-allocated stcture to be filled.               */
+  /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
+  /*    allocated in the global scope (or the scope where the macro        */
+  /*    is used).                                                          */
+  /*                                                                       */
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_GLYPH(          \
+          class_,                 \
+          size_,                  \
+          format_,                \
+          init_,                  \
+          done_,                  \
+          copy_,                  \
+          transform_,             \
+          bbox_,                  \
+          prepare_ )              \
+  FT_CALLBACK_TABLE_DEF           \
+  const FT_Glyph_Class  class_ =  \
+  {                               \
+    size_,                        \
+    format_,                      \
+    init_,                        \
+    done_,                        \
+    copy_,                        \
+    transform_,                   \
+    bbox_,                        \
+    prepare_                      \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_GLYPH(                              \
+          class_,                                     \
+          size_,                                      \
+          format_,                                    \
+          init_,                                      \
+          done_,                                      \
+          copy_,                                      \
+          transform_,                                 \
+          bbox_,                                      \
+          prepare_ )                                  \
+  void                                                \
+  FT_Init_Class_ ## class_( FT_Glyph_Class*  clazz )  \
+  {                                                   \
+    clazz->glyph_size      = size_;                   \
+    clazz->glyph_format    = format_;                 \
+    clazz->glyph_init      = init_;                   \
+    clazz->glyph_done      = done_;                   \
+    clazz->glyph_copy      = copy_;                   \
+    clazz->glyph_transform = transform_;              \
+    clazz->glyph_bbox      = bbox_;                   \
+    clazz->glyph_prepare   = prepare_;                \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DECLARE_RENDERER                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to create a forward declaration of a                          */
+  /*    FT_Renderer_Class struct instance.                                 */
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_RENDERER                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an instance of FT_Renderer_Class struct.        */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is defined a `create' funtion will need  */
+  /*    to be called with a pointer where the allocated structure is       */
+  /*    returned.  And when it is no longer needed a `destroy' function    */
+  /*    needs to be called to release that allocation.                     */
+  /*    `fcinit.c' (ft_create_default_module_classes) already contains     */
+  /*    a mechanism to call these functions for the default modules        */
+  /*    described in `ftmodule.h'.                                         */
+  /*                                                                       */
+  /*    Notice that the created `create' and `destroy' functions call      */
+  /*    `pic_init' and `pic_free' to allow you to manually allocate and    */
+  /*    initialize any additional global data, like a module specific      */
+  /*    interface, and put them in the global pic container defined in     */
+  /*    `ftpic.h'.  If you don't need them just implement the functions as */
+  /*    empty to resolve the link error.  Also the `pic_init' and          */
+  /*    `pic_free' functions should be declared in `pic.h', to be referred */
+  /*    by the renderer definition calling `FT_DEFINE_RENDERER' in the     */
+  /*    following.                                                         */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
+  /*    allocated in the global scope (or the scope where the macro        */
+  /*    is used).                                                          */
+  /*                                                                       */
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DECLARE_RENDERER( class_ )               \
+  FT_EXPORT_VAR( const FT_Renderer_Class ) class_;
+
+#define FT_DEFINE_RENDERER(                  \
+          class_,                            \
+          flags_,                            \
+          size_,                             \
+          name_,                             \
+          version_,                          \
+          requires_,                         \
+          interface_,                        \
+          init_,                             \
+          done_,                             \
+          get_interface_,                    \
+          glyph_format_,                     \
+          render_glyph_,                     \
+          transform_glyph_,                  \
+          get_glyph_cbox_,                   \
+          set_mode_,                         \
+          raster_class_ )                    \
+  FT_CALLBACK_TABLE_DEF                      \
+  const FT_Renderer_Class  class_ =          \
+  {                                          \
+    FT_DEFINE_ROOT_MODULE( flags_,           \
+                           size_,            \
+                           name_,            \
+                           version_,         \
+                           requires_,        \
+                           interface_,       \
+                           init_,            \
+                           done_,            \
+                           get_interface_ )  \
+    glyph_format_,                           \
+                                             \
+    render_glyph_,                           \
+    transform_glyph_,                        \
+    get_glyph_cbox_,                         \
+    set_mode_,                               \
+                                             \
+    raster_class_                            \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DECLARE_RENDERER( class_ )  FT_DECLARE_MODULE( class_ )
+
+#define FT_DEFINE_RENDERER(                                      \
+          class_,                                                \
+          flags_,                                                \
+          size_,                                                 \
+          name_,                                                 \
+          version_,                                              \
+          requires_,                                             \
+          interface_,                                            \
+          init_,                                                 \
+          done_,                                                 \
+          get_interface_,                                        \
+          glyph_format_,                                         \
+          render_glyph_,                                         \
+          transform_glyph_,                                      \
+          get_glyph_cbox_,                                       \
+          set_mode_,                                             \
+          raster_class_ )                                        \
+  void                                                           \
+  FT_Destroy_Class_ ## class_( FT_Library        library,        \
+                               FT_Module_Class*  clazz )         \
+  {                                                              \
+    FT_Renderer_Class*  rclazz = (FT_Renderer_Class*)clazz;      \
+    FT_Memory           memory = library->memory;                \
+                                                                 \
+                                                                 \
+    class_ ## _pic_free( library );                              \
+    if ( rclazz )                                                \
+      FT_FREE( rclazz );                                         \
+  }                                                              \
+                                                                 \
+                                                                 \
+  FT_Error                                                       \
+  FT_Create_Class_ ## class_( FT_Library         library,        \
+                              FT_Module_Class**  output_class )  \
+  {                                                              \
+    FT_Renderer_Class*  clazz = NULL;                            \
+    FT_Error            error;                                   \
+    FT_Memory           memory = library->memory;                \
+                                                                 \
+                                                                 \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) )                  \
+      return error;                                              \
+                                                                 \
+    error = class_ ## _pic_init( library );                      \
+    if ( error )                                                 \
+    {                                                            \
+      FT_FREE( clazz );                                          \
+      return error;                                              \
+    }                                                            \
+                                                                 \
+    FT_DEFINE_ROOT_MODULE( flags_,                               \
+                           size_,                                \
+                           name_,                                \
+                           version_,                             \
+                           requires_,                            \
+                           interface_,                           \
+                           init_,                                \
+                           done_,                                \
+                           get_interface_ )                      \
+                                                                 \
+    clazz->glyph_format    = glyph_format_;                      \
+                                                                 \
+    clazz->render_glyph    = render_glyph_;                      \
+    clazz->transform_glyph = transform_glyph_;                   \
+    clazz->get_glyph_cbox  = get_glyph_cbox_;                    \
+    clazz->set_mode        = set_mode_;                          \
+                                                                 \
+    clazz->raster_class    = raster_class_;                      \
+                                                                 \
+    *output_class = (FT_Module_Class*)clazz;                     \
+                                                                 \
+    return FT_Err_Ok;                                            \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+  /* PIC support macros for ftmodapi.h **/
+
+
+#ifdef FT_CONFIG_OPTION_PIC
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Module_Creator                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to create (allocate) a new module class object.    */
+  /*    The object's members are initialized, but the module itself is     */
+  /*    not.                                                               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory       :: A handle to the memory manager.                    */
+  /*    output_class :: Initialized with the newly allocated class.        */
+  /*                                                                       */
+  typedef FT_Error
+  (*FT_Module_Creator)( FT_Memory          memory,
+                        FT_Module_Class**  output_class );
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    FT_Module_Destroyer                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to destroy (deallocate) a module class object.     */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    memory :: A handle to the memory manager.                          */
+  /*    clazz  :: Module class to destroy.                                 */
+  /*                                                                       */
+  typedef void
+  (*FT_Module_Destroyer)( FT_Memory         memory,
+                          FT_Module_Class*  clazz );
+
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DECLARE_MODULE                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to create a forward declaration of a                          */
+  /*    FT_Module_Class struct instance.                                   */
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_MODULE                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an instance of an FT_Module_Class struct.       */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is defined a `create' funtion needs to   */
+  /*    be called with a pointer where the allocated structure is          */
+  /*    returned.  And when it is no longer needed a `destroy' function    */
+  /*    needs to be called to release that allocation.                     */
+  /*    `fcinit.c' (ft_create_default_module_classes) already contains     */
+  /*    a mechanism to call these functions for the default modules        */
+  /*    described in `ftmodule.h'.                                         */
+  /*                                                                       */
+  /*    Notice that the created `create' and `destroy' functions call      */
+  /*    `pic_init' and `pic_free' to allow you to manually allocate and    */
+  /*    initialize any additional global data, like a module specific      */
+  /*    interface, and put them in the global pic container defined in     */
+  /*    `ftpic.h'.  If you don't need them just implement the functions as */
+  /*    empty to resolve the link error.  Also the `pic_init' and          */
+  /*    `pic_free' functions should be declared in `pic.h', to be referred */
+  /*    by the module definition calling `FT_DEFINE_MODULE' in the         */
+  /*    following.                                                         */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is not defined the struct will be        */
+  /*    allocated in the global scope (or the scope where the macro        */
+  /*    is used).                                                          */
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_ROOT_MODULE                                              */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an instance of an FT_Module_Class struct inside */
+  /*    another struct that contains it or in a function that initializes  */
+  /*    that containing struct.                                            */
+  /*                                                                       */
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DECLARE_MODULE( class_ )  \
+  FT_CALLBACK_TABLE                  \
+  const FT_Module_Class  class_;
+
+#define FT_DEFINE_ROOT_MODULE(  \
+          flags_,               \
+          size_,                \
+          name_,                \
+          version_,             \
+          requires_,            \
+          interface_,           \
+          init_,                \
+          done_,                \
+          get_interface_ )      \
+  {                             \
+    flags_,                     \
+    size_,                      \
+                                \
+    name_,                      \
+    version_,                   \
+    requires_,                  \
+                                \
+    interface_,                 \
+                                \
+    init_,                      \
+    done_,                      \
+    get_interface_,             \
+  },
+
+#define FT_DEFINE_MODULE(         \
+          class_,                 \
+          flags_,                 \
+          size_,                  \
+          name_,                  \
+          version_,               \
+          requires_,              \
+          interface_,             \
+          init_,                  \
+          done_,                  \
+          get_interface_ )        \
+  FT_CALLBACK_TABLE_DEF           \
+  const FT_Module_Class class_ =  \
+  {                               \
+    flags_,                       \
+    size_,                        \
+                                  \
+    name_,                        \
+    version_,                     \
+    requires_,                    \
+                                  \
+    interface_,                   \
+                                  \
+    init_,                        \
+    done_,                        \
+    get_interface_,               \
+  };
+
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DECLARE_MODULE( class_ )                               \
+  FT_Error                                                        \
+  FT_Create_Class_ ## class_( FT_Library         library,         \
+                              FT_Module_Class**  output_class );  \
+  void                                                            \
+  FT_Destroy_Class_ ## class_( FT_Library        library,         \
+                               FT_Module_Class*  clazz );
+
+#define FT_DEFINE_ROOT_MODULE(                      \
+          flags_,                                   \
+          size_,                                    \
+          name_,                                    \
+          version_,                                 \
+          requires_,                                \
+          interface_,                               \
+          init_,                                    \
+          done_,                                    \
+          get_interface_ )                          \
+    clazz->root.module_flags     = flags_;          \
+    clazz->root.module_size      = size_;           \
+    clazz->root.module_name      = name_;           \
+    clazz->root.module_version   = version_;        \
+    clazz->root.module_requires  = requires_;       \
+                                                    \
+    clazz->root.module_interface = interface_;      \
+                                                    \
+    clazz->root.module_init      = init_;           \
+    clazz->root.module_done      = done_;           \
+    clazz->root.get_interface    = get_interface_;
+
+#define FT_DEFINE_MODULE(                                        \
+          class_,                                                \
+          flags_,                                                \
+          size_,                                                 \
+          name_,                                                 \
+          version_,                                              \
+          requires_,                                             \
+          interface_,                                            \
+          init_,                                                 \
+          done_,                                                 \
+          get_interface_ )                                       \
+  void                                                           \
+  FT_Destroy_Class_ ## class_( FT_Library        library,        \
+                               FT_Module_Class*  clazz )         \
+  {                                                              \
+    FT_Memory memory = library->memory;                          \
+                                                                 \
+                                                                 \
+    class_ ## _pic_free( library );                              \
+    if ( clazz )                                                 \
+      FT_FREE( clazz );                                          \
+  }                                                              \
+                                                                 \
+                                                                 \
+  FT_Error                                                       \
+  FT_Create_Class_ ## class_( FT_Library         library,        \
+                              FT_Module_Class**  output_class )  \
+  {                                                              \
+    FT_Memory         memory = library->memory;                  \
+    FT_Module_Class*  clazz  = NULL;                             \
+    FT_Error          error;                                     \
+                                                                 \
+                                                                 \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) ) )                  \
+      return error;                                              \
+    error = class_ ## _pic_init( library );                      \
+    if ( error )                                                 \
+    {                                                            \
+      FT_FREE( clazz );                                          \
+      return error;                                              \
+    }                                                            \
+                                                                 \
+    clazz->module_flags     = flags_;                            \
+    clazz->module_size      = size_;                             \
+    clazz->module_name      = name_;                             \
+    clazz->module_version   = version_;                          \
+    clazz->module_requires  = requires_;                         \
+                                                                 \
+    clazz->module_interface = interface_;                        \
+                                                                 \
+    clazz->module_init      = init_;                             \
+    clazz->module_done      = done_;                             \
+    clazz->get_interface    = get_interface_;                    \
+                                                                 \
+    *output_class = clazz;                                       \
+                                                                 \
+    return FT_Err_Ok;                                            \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+FT_END_HEADER
+
+#endif /* __FTOBJS_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftpic.h b/core/include/thirdparties/freetype/freetype/internal/ftpic.h
new file mode 100644
index 0000000..485ce7a
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftpic.h
@@ -0,0 +1,71 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftpic.h                                                                */
+/*                                                                         */
+/*    The FreeType position independent code services (declaration).       */
+/*                                                                         */
+/*  Copyright 2009, 2012 by                                                */
+/*  Oran Agra and Mickey Gabel.                                            */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*  Modules that ordinarily have const global data that need address     */
+  /*  can instead define pointers here.                                    */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTPIC_H__
+#define __FTPIC_H__
+
+
+FT_BEGIN_HEADER
+
+#ifdef FT_CONFIG_OPTION_PIC
+
+  typedef struct  FT_PIC_Container_
+  {
+    /* pic containers for base */
+    void*  base;
+
+    /* pic containers for modules */
+    void*  autofit;
+    void*  cff;
+    void*  pshinter;
+    void*  psnames;
+    void*  raster;
+    void*  sfnt;
+    void*  smooth;
+    void*  truetype;
+
+  } FT_PIC_Container;
+
+
+  /* Initialize the various function tables, structs, etc. */
+  /* stored in the container.                              */
+  FT_BASE( FT_Error )
+  ft_pic_container_init( FT_Library  library );
+
+
+  /* Destroy the contents of the container. */
+  FT_BASE( void )
+  ft_pic_container_destroy( FT_Library  library );
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTPIC_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftrfork.h b/core/include/thirdparties/freetype/freetype/internal/ftrfork.h
new file mode 100644
index 0000000..061124b
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftrfork.h
@@ -0,0 +1,258 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftrfork.h                                                              */
+/*                                                                         */
+/*    Embedded resource forks accessor (specification).                    */
+/*                                                                         */
+/*  Copyright 2004, 2006, 2007, 2012 by                                    */
+/*  Masatake YAMATO and Redhat K.K.                                        */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+/***************************************************************************/
+/* Development of the code in this file is support of                      */
+/* Information-technology Promotion Agency, Japan.                         */
+/***************************************************************************/
+
+
+#ifndef __FTRFORK_H__
+#define __FTRFORK_H__
+
+
+#include "../../ft2build.h"
+#include "ftobjs.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /* Number of guessing rules supported in `FT_Raccess_Guess'.            */
+  /* Don't forget to increment the number if you add a new guessing rule. */
+#define FT_RACCESS_N_RULES  9
+
+
+  /* A structure to describe a reference in a resource by its resource ID */
+  /* and internal offset.  The `POST' resource expects to be concatenated */
+  /* by the order of resource IDs instead of its appearance in the file.  */
+
+  typedef struct  FT_RFork_Ref_
+  {
+    FT_UShort  res_id;
+    FT_ULong   offset;
+
+  } FT_RFork_Ref;
+
+#ifdef FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
+  typedef FT_Error
+  (*ft_raccess_guess_func)( FT_Library  library,
+                            FT_Stream   stream,
+                            char       *base_file_name,
+                            char      **result_file_name,
+                            FT_Long    *result_offset );
+
+  typedef enum  FT_RFork_Rule_ {
+    FT_RFork_Rule_invalid = -2,
+    FT_RFork_Rule_uknown, /* -1 */
+    FT_RFork_Rule_apple_double,
+    FT_RFork_Rule_apple_single,
+    FT_RFork_Rule_darwin_ufs_export,
+    FT_RFork_Rule_darwin_newvfs,
+    FT_RFork_Rule_darwin_hfsplus,
+    FT_RFork_Rule_vfat,
+    FT_RFork_Rule_linux_cap,
+    FT_RFork_Rule_linux_double,
+    FT_RFork_Rule_linux_netatalk
+  } FT_RFork_Rule;
+
+  /* For fast translation between rule index and rule type,
+   * the macros FT_RFORK_xxx should be kept consistent with
+   * the raccess_guess_funcs table
+   */
+  typedef struct ft_raccess_guess_rec_ {
+    ft_raccess_guess_func  func;
+    FT_RFork_Rule          type;
+  } ft_raccess_guess_rec;
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+  /* this array is a storage in non-PIC mode, so ; is needed in END */
+#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type )  \
+          const type name[] = {
+#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix )  \
+          { raccess_guess_ ## func_suffix,                           \
+            FT_RFork_Rule_ ## type_suffix },
+#define CONST_FT_RFORK_RULE_ARRAY_END  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+  /* this array is a function in PIC mode, so no ; is needed in END */
+#define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type )  \
+          void                                         \
+          FT_Init_ ## name( type*  storage )           \
+          {                                            \
+            type*  local = storage;                    \
+                                                       \
+                                                       \
+            int  i = 0;
+#define CONST_FT_RFORK_RULE_ARRAY_ENTRY( func_suffix, type_suffix )  \
+          local[i].func = raccess_guess_ ## func_suffix;             \
+          local[i].type = FT_RFork_Rule_ ## type_suffix;             \
+          i++;
+#define CONST_FT_RFORK_RULE_ARRAY_END  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+#endif /* FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Raccess_Guess                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Guess a file name and offset where the actual resource fork is     */
+  /*    stored.  The macro FT_RACCESS_N_RULES holds the number of          */
+  /*    guessing rules;  the guessed result for the Nth rule is            */
+  /*    represented as a triplet: a new file name (new_names[N]), a file   */
+  /*    offset (offsets[N]), and an error code (errors[N]).                */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library ::                                                         */
+  /*      A FreeType library instance.                                     */
+  /*                                                                       */
+  /*    stream ::                                                          */
+  /*      A file stream containing the resource fork.                      */
+  /*                                                                       */
+  /*    base_name ::                                                       */
+  /*      The (base) file name of the resource fork used for some          */
+  /*      guessing rules.                                                  */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    new_names ::                                                       */
+  /*      An array of guessed file names in which the resource forks may   */
+  /*      exist.  If `new_names[N]' is NULL, the guessed file name is      */
+  /*      equal to `base_name'.                                            */
+  /*                                                                       */
+  /*    offsets ::                                                         */
+  /*      An array of guessed file offsets.  `offsets[N]' holds the file   */
+  /*      offset of the possible start of the resource fork in file        */
+  /*      `new_names[N]'.                                                  */
+  /*                                                                       */
+  /*    errors ::                                                          */
+  /*      An array of FreeType error codes.  `errors[N]' is the error      */
+  /*      code of Nth guessing rule function.  If `errors[N]' is not       */
+  /*      FT_Err_Ok, `new_names[N]' and `offsets[N]' are meaningless.      */
+  /*                                                                       */
+  FT_BASE( void )
+  FT_Raccess_Guess( FT_Library  library,
+                    FT_Stream   stream,
+                    char*       base_name,
+                    char**      new_names,
+                    FT_Long*    offsets,
+                    FT_Error*   errors );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Raccess_Get_HeaderInfo                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Get the information from the header of resource fork.  The         */
+  /*    information includes the file offset where the resource map        */
+  /*    starts, and the file offset where the resource data starts.        */
+  /*    `FT_Raccess_Get_DataOffsets' requires these two data.              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library ::                                                         */
+  /*      A FreeType library instance.                                     */
+  /*                                                                       */
+  /*    stream ::                                                          */
+  /*      A file stream containing the resource fork.                      */
+  /*                                                                       */
+  /*    rfork_offset ::                                                    */
+  /*      The file offset where the resource fork starts.                  */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    map_offset ::                                                      */
+  /*      The file offset where the resource map starts.                   */
+  /*                                                                       */
+  /*    rdata_pos ::                                                       */
+  /*      The file offset where the resource data starts.                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  FT_Err_Ok means success.                     */
+  /*                                                                       */
+  FT_BASE( FT_Error )
+  FT_Raccess_Get_HeaderInfo( FT_Library  library,
+                             FT_Stream   stream,
+                             FT_Long     rfork_offset,
+                             FT_Long    *map_offset,
+                             FT_Long    *rdata_pos );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Raccess_Get_DataOffsets                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Get the data offsets for a tag in a resource fork.  Offsets are    */
+  /*    stored in an array because, in some cases, resources in a resource */
+  /*    fork have the same tag.                                            */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    library ::                                                         */
+  /*      A FreeType library instance.                                     */
+  /*                                                                       */
+  /*    stream ::                                                          */
+  /*      A file stream containing the resource fork.                      */
+  /*                                                                       */
+  /*    map_offset ::                                                      */
+  /*      The file offset where the resource map starts.                   */
+  /*                                                                       */
+  /*    rdata_pos ::                                                       */
+  /*      The file offset where the resource data starts.                  */
+  /*                                                                       */
+  /*    tag ::                                                             */
+  /*      The resource tag.                                                */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    offsets ::                                                         */
+  /*      The stream offsets for the resource data specified by `tag'.     */
+  /*      This array is allocated by the function, so you have to call     */
+  /*      @ft_mem_free after use.                                          */
+  /*                                                                       */
+  /*    count ::                                                           */
+  /*      The length of offsets array.                                     */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  FT_Err_Ok means success.                     */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Normally you should use `FT_Raccess_Get_HeaderInfo' to get the     */
+  /*    value for `map_offset' and `rdata_pos'.                            */
+  /*                                                                       */
+  FT_BASE( FT_Error )
+  FT_Raccess_Get_DataOffsets( FT_Library  library,
+                              FT_Stream   stream,
+                              FT_Long     map_offset,
+                              FT_Long     rdata_pos,
+                              FT_Long     tag,
+                              FT_Long   **offsets,
+                              FT_Long    *count );
+
+
+FT_END_HEADER
+
+#endif /* __FTRFORK_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftserv.h b/core/include/thirdparties/freetype/freetype/internal/ftserv.h
new file mode 100644
index 0000000..cd5fbd0
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftserv.h
@@ -0,0 +1,763 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftserv.h                                                               */
+/*                                                                         */
+/*    The FreeType services (specification only).                          */
+/*                                                                         */
+/*  Copyright 2003-2007, 2009, 2012, 2013 by                               */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*  Each module can export one or more `services'.  Each service is      */
+  /*  identified by a constant string and modeled by a pointer; the latter */
+  /*  generally corresponds to a structure containing function pointers.   */
+  /*                                                                       */
+  /*  Note that a service's data cannot be a mere function pointer because */
+  /*  in C it is possible that function pointers might be implemented      */
+  /*  differently than data pointers (e.g. 48 bits instead of 32).         */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTSERV_H__
+#define __FTSERV_H__
+
+
+FT_BEGIN_HEADER
+
+  /*
+   * @macro:
+   *   FT_FACE_FIND_SERVICE
+   *
+   * @description:
+   *   This macro is used to look up a service from a face's driver module.
+   *
+   * @input:
+   *   face ::
+   *     The source face handle.
+   *
+   *   id ::
+   *     A string describing the service as defined in the service's
+   *     header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
+   *     `multi-masters').  It is automatically prefixed with
+   *     `FT_SERVICE_ID_'.
+   *
+   * @output:
+   *   ptr ::
+   *     A variable that receives the service pointer.  Will be NULL
+   *     if not found.
+   */
+#ifdef __cplusplus
+
+#define FT_FACE_FIND_SERVICE( face, ptr, id )                               \
+  FT_BEGIN_STMNT                                                            \
+    FT_Module    module = FT_MODULE( FT_FACE( face )->driver );             \
+    FT_Pointer   _tmp_  = NULL;                                             \
+    FT_Pointer*  _pptr_ = (FT_Pointer*)&(ptr);                              \
+                                                                            \
+                                                                            \
+    if ( module->clazz->get_interface )                                     \
+      _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
+    *_pptr_ = _tmp_;                                                        \
+  FT_END_STMNT
+
+#else /* !C++ */
+
+#define FT_FACE_FIND_SERVICE( face, ptr, id )                               \
+  FT_BEGIN_STMNT                                                            \
+    FT_Module   module = FT_MODULE( FT_FACE( face )->driver );              \
+    FT_Pointer  _tmp_  = NULL;                                              \
+                                                                            \
+    if ( module->clazz->get_interface )                                     \
+      _tmp_ = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
+    ptr = _tmp_;                                                            \
+  FT_END_STMNT
+
+#endif /* !C++ */
+
+
+  /*
+   * @macro:
+   *   FT_FACE_FIND_GLOBAL_SERVICE
+   *
+   * @description:
+   *   This macro is used to look up a service from all modules.
+   *
+   * @input:
+   *   face ::
+   *     The source face handle.
+   *
+   *   id ::
+   *     A string describing the service as defined in the service's
+   *     header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
+   *     `multi-masters').  It is automatically prefixed with
+   *     `FT_SERVICE_ID_'.
+   *
+   * @output:
+   *   ptr ::
+   *     A variable that receives the service pointer.  Will be NULL
+   *     if not found.
+   */
+#ifdef __cplusplus
+
+#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id )               \
+  FT_BEGIN_STMNT                                                   \
+    FT_Module    module = FT_MODULE( FT_FACE( face )->driver );    \
+    FT_Pointer   _tmp_;                                            \
+    FT_Pointer*  _pptr_ = (FT_Pointer*)&(ptr);                     \
+                                                                   \
+                                                                   \
+    _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \
+    *_pptr_ = _tmp_;                                               \
+  FT_END_STMNT
+
+#else /* !C++ */
+
+#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id )               \
+  FT_BEGIN_STMNT                                                   \
+    FT_Module   module = FT_MODULE( FT_FACE( face )->driver );     \
+    FT_Pointer  _tmp_;                                             \
+                                                                   \
+                                                                   \
+    _tmp_ = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \
+    ptr   = _tmp_;                                                 \
+  FT_END_STMNT
+
+#endif /* !C++ */
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****         S E R V I C E   D E S C R I P T O R S                 *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /*
+   *  The following structure is used to _describe_ a given service
+   *  to the library.  This is useful to build simple static service lists.
+   */
+  typedef struct  FT_ServiceDescRec_
+  {
+    const char*  serv_id;     /* service name         */
+    const void*  serv_data;   /* service pointer/data */
+
+  } FT_ServiceDescRec;
+
+  typedef const FT_ServiceDescRec*  FT_ServiceDesc;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Macro>                                                               */
+  /*    FT_DEFINE_SERVICEDESCREC1                                          */
+  /*    FT_DEFINE_SERVICEDESCREC2                                          */
+  /*    FT_DEFINE_SERVICEDESCREC3                                          */
+  /*    FT_DEFINE_SERVICEDESCREC4                                          */
+  /*    FT_DEFINE_SERVICEDESCREC5                                          */
+  /*    FT_DEFINE_SERVICEDESCREC6                                          */
+  /*    FT_DEFINE_SERVICEDESCREC7                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Used to initialize an array of FT_ServiceDescRec structures.       */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is defined a `create' function needs to  */
+  /*    be called with a pointer to return an allocated array.  As soon as */
+  /*    it is no longer needed, a `destroy' function needs to be called to */
+  /*    release that allocation.                                           */
+  /*                                                                       */
+  /*    These functions should be manually called from the `pic_init' and  */
+  /*    `pic_free' functions of your module (see FT_DEFINE_MODULE).        */
+  /*                                                                       */
+  /*    When FT_CONFIG_OPTION_PIC is not defined the array will be         */
+  /*    allocated in the global scope (or the scope where the macro is     */
+  /*    used).                                                             */
+  /*                                                                       */
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICEDESCREC1( class_,                                  \
+                                   serv_id_1, serv_data_1 )                 \
+  static const FT_ServiceDescRec  class_[] =                                \
+  {                                                                         \
+    { serv_id_1, serv_data_1 },                                             \
+    { NULL, NULL }                                                          \
+  };
+
+#define FT_DEFINE_SERVICEDESCREC2( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2 )                 \
+  static const FT_ServiceDescRec  class_[] =                                \
+  {                                                                         \
+    { serv_id_1, serv_data_1 },                                             \
+    { serv_id_2, serv_data_2 },                                             \
+    { NULL, NULL }                                                          \
+  };
+
+#define FT_DEFINE_SERVICEDESCREC3( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3 )                 \
+  static const FT_ServiceDescRec  class_[] =                                \
+  {                                                                         \
+    { serv_id_1, serv_data_1 },                                             \
+    { serv_id_2, serv_data_2 },                                             \
+    { serv_id_3, serv_data_3 },                                             \
+    { NULL, NULL }                                                          \
+  };
+
+#define FT_DEFINE_SERVICEDESCREC4( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4 )                 \
+  static const FT_ServiceDescRec  class_[] =                                \
+  {                                                                         \
+    { serv_id_1, serv_data_1 },                                             \
+    { serv_id_2, serv_data_2 },                                             \
+    { serv_id_3, serv_data_3 },                                             \
+    { serv_id_4, serv_data_4 },                                             \
+    { NULL, NULL }                                                          \
+  };
+
+#define FT_DEFINE_SERVICEDESCREC5( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4,                  \
+                                   serv_id_5, serv_data_5 )                 \
+  static const FT_ServiceDescRec  class_[] =                                \
+  {                                                                         \
+    { serv_id_1, serv_data_1 },                                             \
+    { serv_id_2, serv_data_2 },                                             \
+    { serv_id_3, serv_data_3 },                                             \
+    { serv_id_4, serv_data_4 },                                             \
+    { serv_id_5, serv_data_5 },                                             \
+    { NULL, NULL }                                                          \
+  };
+
+#define FT_DEFINE_SERVICEDESCREC6( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4,                  \
+                                   serv_id_5, serv_data_5,                  \
+                                   serv_id_6, serv_data_6 )                 \
+  static const FT_ServiceDescRec  class_[] =                                \
+  {                                                                         \
+    { serv_id_1, serv_data_1 },                                             \
+    { serv_id_2, serv_data_2 },                                             \
+    { serv_id_3, serv_data_3 },                                             \
+    { serv_id_4, serv_data_4 },                                             \
+    { serv_id_5, serv_data_5 },                                             \
+    { serv_id_6, serv_data_6 },                                             \
+    { NULL, NULL }                                                          \
+  };
+
+#define FT_DEFINE_SERVICEDESCREC7( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4,                  \
+                                   serv_id_5, serv_data_5,                  \
+                                   serv_id_6, serv_data_6,                  \
+                                   serv_id_7, serv_data_7 )                 \
+  static const FT_ServiceDescRec  class_[] =                                \
+  {                                                                         \
+    { serv_id_1, serv_data_1 },                                             \
+    { serv_id_2, serv_data_2 },                                             \
+    { serv_id_3, serv_data_3 },                                             \
+    { serv_id_4, serv_data_4 },                                             \
+    { serv_id_5, serv_data_5 },                                             \
+    { serv_id_6, serv_data_6 },                                             \
+    { serv_id_7, serv_data_7 },                                             \
+    { NULL, NULL }                                                          \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICEDESCREC1( class_,                                  \
+                                   serv_id_1, serv_data_1 )                 \
+  void                                                                      \
+  FT_Destroy_Class_ ## class_( FT_Library          library,                 \
+                               FT_ServiceDescRec*  clazz )                  \
+  {                                                                         \
+    FT_Memory  memory = library->memory;                                    \
+                                                                            \
+                                                                            \
+    if ( clazz )                                                            \
+      FT_FREE( clazz );                                                     \
+  }                                                                         \
+                                                                            \
+  FT_Error                                                                  \
+  FT_Create_Class_ ## class_( FT_Library           library,                 \
+                              FT_ServiceDescRec**  output_class )           \
+  {                                                                         \
+    FT_ServiceDescRec*  clazz  = NULL;                                      \
+    FT_Error            error;                                              \
+    FT_Memory           memory = library->memory;                           \
+                                                                            \
+                                                                            \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 2 ) )                         \
+      return error;                                                         \
+                                                                            \
+    clazz[0].serv_id   = serv_id_1;                                         \
+    clazz[0].serv_data = serv_data_1;                                       \
+    clazz[1].serv_id   = NULL;                                              \
+    clazz[1].serv_data = NULL;                                              \
+                                                                            \
+    *output_class = clazz;                                                  \
+                                                                            \
+    return FT_Err_Ok;                                                       \
+  }
+
+#define FT_DEFINE_SERVICEDESCREC2( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2 )                 \
+  void                                                                      \
+  FT_Destroy_Class_ ## class_( FT_Library          library,                 \
+                               FT_ServiceDescRec*  clazz )                  \
+  {                                                                         \
+    FT_Memory  memory = library->memory;                                    \
+                                                                            \
+                                                                            \
+    if ( clazz )                                                            \
+      FT_FREE( clazz );                                                     \
+  }                                                                         \
+                                                                            \
+  FT_Error                                                                  \
+  FT_Create_Class_ ## class_( FT_Library           library,                 \
+                              FT_ServiceDescRec**  output_class )           \
+  {                                                                         \
+    FT_ServiceDescRec*  clazz  = NULL;                                      \
+    FT_Error            error;                                              \
+    FT_Memory           memory = library->memory;                           \
+                                                                            \
+                                                                            \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 3 ) )                         \
+      return error;                                                         \
+                                                                            \
+    clazz[0].serv_id   = serv_id_1;                                         \
+    clazz[0].serv_data = serv_data_1;                                       \
+    clazz[1].serv_id   = serv_id_2;                                         \
+    clazz[1].serv_data = serv_data_2;                                       \
+    clazz[2].serv_id   = NULL;                                              \
+    clazz[2].serv_data = NULL;                                              \
+                                                                            \
+    *output_class = clazz;                                                  \
+                                                                            \
+    return FT_Err_Ok;                                                       \
+  }
+
+#define FT_DEFINE_SERVICEDESCREC3( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3 )                 \
+  void                                                                      \
+  FT_Destroy_Class_ ## class_( FT_Library          library,                 \
+                               FT_ServiceDescRec*  clazz )                  \
+  {                                                                         \
+    FT_Memory  memory = library->memory;                                    \
+                                                                            \
+                                                                            \
+    if ( clazz )                                                            \
+      FT_FREE( clazz );                                                     \
+  }                                                                         \
+                                                                            \
+  FT_Error                                                                  \
+  FT_Create_Class_ ## class_( FT_Library           library,                 \
+                              FT_ServiceDescRec**  output_class )           \
+  {                                                                         \
+    FT_ServiceDescRec*  clazz  = NULL;                                      \
+    FT_Error            error;                                              \
+    FT_Memory           memory = library->memory;                           \
+                                                                            \
+                                                                            \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 4 ) )                         \
+      return error;                                                         \
+                                                                            \
+    clazz[0].serv_id   = serv_id_1;                                         \
+    clazz[0].serv_data = serv_data_1;                                       \
+    clazz[1].serv_id   = serv_id_2;                                         \
+    clazz[1].serv_data = serv_data_2;                                       \
+    clazz[2].serv_id   = serv_id_3;                                         \
+    clazz[2].serv_data = serv_data_3;                                       \
+    clazz[3].serv_id   = NULL;                                              \
+    clazz[3].serv_data = NULL;                                              \
+                                                                            \
+    *output_class = clazz;                                                  \
+                                                                            \
+    return FT_Err_Ok;                                                       \
+  }
+
+#define FT_DEFINE_SERVICEDESCREC4( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4 )                 \
+  void                                                                      \
+  FT_Destroy_Class_ ## class_( FT_Library          library,                 \
+                               FT_ServiceDescRec*  clazz )                  \
+  {                                                                         \
+    FT_Memory  memory = library->memory;                                    \
+                                                                            \
+                                                                            \
+    if ( clazz )                                                            \
+      FT_FREE( clazz );                                                     \
+  }                                                                         \
+                                                                            \
+  FT_Error                                                                  \
+  FT_Create_Class_ ## class_( FT_Library           library,                 \
+                              FT_ServiceDescRec**  output_class )           \
+  {                                                                         \
+    FT_ServiceDescRec*  clazz  = NULL;                                      \
+    FT_Error            error;                                              \
+    FT_Memory           memory = library->memory;                           \
+                                                                            \
+                                                                            \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 5 ) )                         \
+      return error;                                                         \
+                                                                            \
+    clazz[0].serv_id   = serv_id_1;                                         \
+    clazz[0].serv_data = serv_data_1;                                       \
+    clazz[1].serv_id   = serv_id_2;                                         \
+    clazz[1].serv_data = serv_data_2;                                       \
+    clazz[2].serv_id   = serv_id_3;                                         \
+    clazz[2].serv_data = serv_data_3;                                       \
+    clazz[3].serv_id   = serv_id_4;                                         \
+    clazz[3].serv_data = serv_data_4;                                       \
+    clazz[4].serv_id   = NULL;                                              \
+    clazz[4].serv_data = NULL;                                              \
+                                                                            \
+    *output_class = clazz;                                                  \
+                                                                            \
+    return FT_Err_Ok;                                                       \
+  }
+
+#define FT_DEFINE_SERVICEDESCREC5( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4,                  \
+                                   serv_id_5, serv_data_5 )                 \
+  void                                                                      \
+  FT_Destroy_Class_ ## class_( FT_Library          library,                 \
+                               FT_ServiceDescRec*  clazz )                  \
+  {                                                                         \
+    FT_Memory  memory = library->memory;                                    \
+                                                                            \
+                                                                            \
+    if ( clazz )                                                            \
+      FT_FREE( clazz );                                                     \
+  }                                                                         \
+                                                                            \
+  FT_Error                                                                  \
+  FT_Create_Class_ ## class_( FT_Library           library,                 \
+                              FT_ServiceDescRec**  output_class )           \
+  {                                                                         \
+    FT_ServiceDescRec*  clazz  = NULL;                                      \
+    FT_Error            error;                                              \
+    FT_Memory           memory = library->memory;                           \
+                                                                            \
+                                                                            \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 6 ) )                         \
+      return error;                                                         \
+                                                                            \
+    clazz[0].serv_id   = serv_id_1;                                         \
+    clazz[0].serv_data = serv_data_1;                                       \
+    clazz[1].serv_id   = serv_id_2;                                         \
+    clazz[1].serv_data = serv_data_2;                                       \
+    clazz[2].serv_id   = serv_id_3;                                         \
+    clazz[2].serv_data = serv_data_3;                                       \
+    clazz[3].serv_id   = serv_id_4;                                         \
+    clazz[3].serv_data = serv_data_4;                                       \
+    clazz[4].serv_id   = serv_id_5;                                         \
+    clazz[4].serv_data = serv_data_5;                                       \
+    clazz[5].serv_id   = NULL;                                              \
+    clazz[5].serv_data = NULL;                                              \
+                                                                            \
+    *output_class = clazz;                                                  \
+                                                                            \
+    return FT_Err_Ok;                                                       \
+  }
+
+#define FT_DEFINE_SERVICEDESCREC6( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4,                  \
+                                   serv_id_5, serv_data_5,                  \
+                                   serv_id_6, serv_data_6 )                 \
+  void                                                                      \
+  FT_Destroy_Class_ ## class_( FT_Library          library,                 \
+                               FT_ServiceDescRec*  clazz )                  \
+  {                                                                         \
+    FT_Memory  memory = library->memory;                                    \
+                                                                            \
+                                                                            \
+    if ( clazz )                                                            \
+      FT_FREE( clazz );                                                     \
+  }                                                                         \
+                                                                            \
+  FT_Error                                                                  \
+  FT_Create_Class_ ## class_( FT_Library           library,                 \
+                              FT_ServiceDescRec**  output_class)            \
+  {                                                                         \
+    FT_ServiceDescRec*  clazz  = NULL;                                      \
+    FT_Error            error;                                              \
+    FT_Memory           memory = library->memory;                           \
+                                                                            \
+                                                                            \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 7 ) )                         \
+      return error;                                                         \
+                                                                            \
+    clazz[0].serv_id   = serv_id_1;                                         \
+    clazz[0].serv_data = serv_data_1;                                       \
+    clazz[1].serv_id   = serv_id_2;                                         \
+    clazz[1].serv_data = serv_data_2;                                       \
+    clazz[2].serv_id   = serv_id_3;                                         \
+    clazz[2].serv_data = serv_data_3;                                       \
+    clazz[3].serv_id   = serv_id_4;                                         \
+    clazz[3].serv_data = serv_data_4;                                       \
+    clazz[4].serv_id   = serv_id_5;                                         \
+    clazz[4].serv_data = serv_data_5;                                       \
+    clazz[5].serv_id   = serv_id_6;                                         \
+    clazz[5].serv_data = serv_data_6;                                       \
+    clazz[6].serv_id   = NULL;                                              \
+    clazz[6].serv_data = NULL;                                              \
+                                                                            \
+    *output_class = clazz;                                                  \
+                                                                            \
+    return FT_Err_Ok;                                                       \
+  }
+
+#define FT_DEFINE_SERVICEDESCREC7( class_,                                  \
+                                   serv_id_1, serv_data_1,                  \
+                                   serv_id_2, serv_data_2,                  \
+                                   serv_id_3, serv_data_3,                  \
+                                   serv_id_4, serv_data_4,                  \
+                                   serv_id_5, serv_data_5,                  \
+                                   serv_id_6, serv_data_6,                  \
+                                   serv_id_7, serv_data_7 )                 \
+  void                                                                      \
+  FT_Destroy_Class_ ## class_( FT_Library          library,                 \
+                               FT_ServiceDescRec*  clazz )                  \
+  {                                                                         \
+    FT_Memory  memory = library->memory;                                    \
+                                                                            \
+                                                                            \
+    if ( clazz )                                                            \
+      FT_FREE( clazz );                                                     \
+  }                                                                         \
+                                                                            \
+  FT_Error                                                                  \
+  FT_Create_Class_ ## class_( FT_Library           library,                 \
+                              FT_ServiceDescRec**  output_class)            \
+  {                                                                         \
+    FT_ServiceDescRec*  clazz  = NULL;                                      \
+    FT_Error            error;                                              \
+    FT_Memory           memory = library->memory;                           \
+                                                                            \
+                                                                            \
+    if ( FT_ALLOC( clazz, sizeof ( *clazz ) * 8 ) )                         \
+      return error;                                                         \
+                                                                            \
+    clazz[0].serv_id   = serv_id_1;                                         \
+    clazz[0].serv_data = serv_data_1;                                       \
+    clazz[1].serv_id   = serv_id_2;                                         \
+    clazz[1].serv_data = serv_data_2;                                       \
+    clazz[2].serv_id   = serv_id_3;                                         \
+    clazz[2].serv_data = serv_data_3;                                       \
+    clazz[3].serv_id   = serv_id_4;                                         \
+    clazz[3].serv_data = serv_data_4;                                       \
+    clazz[4].serv_id   = serv_id_5;                                         \
+    clazz[4].serv_data = serv_data_5;                                       \
+    clazz[5].serv_id   = serv_id_6;                                         \
+    clazz[5].serv_data = serv_data_6;                                       \
+    clazz[6].serv_id   = serv_id_7;                                         \
+    clazz[6].serv_data = serv_data_7;                                       \
+    clazz[7].serv_id   = NULL;                                              \
+    clazz[7].serv_data = NULL;                                              \
+                                                                            \
+    *output_class = clazz;                                                  \
+                                                                            \
+    return FT_Err_Ok;                                                       \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+
+  /*
+   *  Parse a list of FT_ServiceDescRec descriptors and look for
+   *  a specific service by ID.  Note that the last element in the
+   *  array must be { NULL, NULL }, and that the function should
+   *  return NULL if the service isn't available.
+   *
+   *  This function can be used by modules to implement their
+   *  `get_service' method.
+   */
+  FT_BASE( FT_Pointer )
+  ft_service_list_lookup( FT_ServiceDesc  service_descriptors,
+                          const char*     service_id );
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****             S E R V I C E S   C A C H E                       *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /*
+   *  This structure is used to store a cache for several frequently used
+   *  services.  It is the type of `face->internal->services'.  You
+   *  should only use FT_FACE_LOOKUP_SERVICE to access it.
+   *
+   *  All fields should have the type FT_Pointer to relax compilation
+   *  dependencies.  We assume the developer isn't completely stupid.
+   *
+   *  Each field must be named `service_XXXX' where `XXX' corresponds to
+   *  the correct FT_SERVICE_ID_XXXX macro.  See the definition of
+   *  FT_FACE_LOOKUP_SERVICE below how this is implemented.
+   *
+   */
+  typedef struct  FT_ServiceCacheRec_
+  {
+    FT_Pointer  service_POSTSCRIPT_FONT_NAME;
+    FT_Pointer  service_MULTI_MASTERS;
+    FT_Pointer  service_GLYPH_DICT;
+    FT_Pointer  service_PFR_METRICS;
+    FT_Pointer  service_WINFNT;
+
+  } FT_ServiceCacheRec, *FT_ServiceCache;
+
+
+  /*
+   *  A magic number used within the services cache.
+   */
+
+  /* ensure that value `1' has the same width as a pointer */
+#define FT_SERVICE_UNAVAILABLE  ((FT_Pointer)~(FT_PtrDist)1)
+
+
+  /*
+   * @macro:
+   *   FT_FACE_LOOKUP_SERVICE
+   *
+   * @description:
+   *   This macro is used to lookup a service from a face's driver module
+   *   using its cache.
+   *
+   * @input:
+   *   face::
+   *     The source face handle containing the cache.
+   *
+   *   field ::
+   *     The field name in the cache.
+   *
+   *   id ::
+   *     The service ID.
+   *
+   * @output:
+   *   ptr ::
+   *     A variable receiving the service data.  NULL if not available.
+   */
+#ifdef __cplusplus
+
+#define FT_FACE_LOOKUP_SERVICE( face, ptr, id )                \
+  FT_BEGIN_STMNT                                               \
+    FT_Pointer   svc;                                          \
+    FT_Pointer*  Pptr = (FT_Pointer*)&(ptr);                   \
+                                                               \
+                                                               \
+    svc = FT_FACE( face )->internal->services. service_ ## id; \
+    if ( svc == FT_SERVICE_UNAVAILABLE )                       \
+      svc = NULL;                                              \
+    else if ( svc == NULL )                                    \
+    {                                                          \
+      FT_FACE_FIND_SERVICE( face, svc, id );                   \
+                                                               \
+      FT_FACE( face )->internal->services. service_ ## id =    \
+        (FT_Pointer)( svc != NULL ? svc                        \
+                                  : FT_SERVICE_UNAVAILABLE );  \
+    }                                                          \
+    *Pptr = svc;                                               \
+  FT_END_STMNT
+
+#else /* !C++ */
+
+#define FT_FACE_LOOKUP_SERVICE( face, ptr, id )                \
+  FT_BEGIN_STMNT                                               \
+    FT_Pointer  svc;                                           \
+                                                               \
+                                                               \
+    svc = FT_FACE( face )->internal->services. service_ ## id; \
+    if ( svc == FT_SERVICE_UNAVAILABLE )                       \
+      svc = NULL;                                              \
+    else if ( svc == NULL )                                    \
+    {                                                          \
+      FT_FACE_FIND_SERVICE( face, svc, id );                   \
+                                                               \
+      FT_FACE( face )->internal->services. service_ ## id =    \
+        (FT_Pointer)( svc != NULL ? svc                        \
+                                  : FT_SERVICE_UNAVAILABLE );  \
+    }                                                          \
+    ptr = svc;                                                 \
+  FT_END_STMNT
+
+#endif /* !C++ */
+
+  /*
+   *  A macro used to define new service structure types.
+   */
+
+#define FT_DEFINE_SERVICE( name )            \
+  typedef struct FT_Service_ ## name ## Rec_ \
+    FT_Service_ ## name ## Rec ;             \
+  typedef struct FT_Service_ ## name ## Rec_ \
+    const * FT_Service_ ## name ;            \
+  struct FT_Service_ ## name ## Rec_
+
+  /* */
+
+  /*
+   *  The header files containing the services.
+   */
+
+#define FT_SERVICE_BDF_H                <freetype/internal/services/svbdf.h>
+#define FT_SERVICE_CID_H                <freetype/internal/services/svcid.h>
+#define FT_SERVICE_GLYPH_DICT_H         <freetype/internal/services/svgldict.h>
+#define FT_SERVICE_GX_VALIDATE_H        <freetype/internal/services/svgxval.h>
+#define FT_SERVICE_KERNING_H            <freetype/internal/services/svkern.h>
+#define FT_SERVICE_MULTIPLE_MASTERS_H   <freetype/internal/services/svmm.h>
+#define FT_SERVICE_OPENTYPE_VALIDATE_H  <freetype/internal/services/svotval.h>
+#define FT_SERVICE_PFR_H                <freetype/internal/services/svpfr.h>
+#define FT_SERVICE_POSTSCRIPT_CMAPS_H   <freetype/internal/services/svpscmap.h>
+#define FT_SERVICE_POSTSCRIPT_INFO_H    <freetype/internal/services/svpsinfo.h>
+#define FT_SERVICE_POSTSCRIPT_NAME_H    <freetype/internal/services/svpostnm.h>
+#define FT_SERVICE_PROPERTIES_H         <freetype/internal/services/svprop.h>
+#define FT_SERVICE_SFNT_H               <freetype/internal/services/svsfnt.h>
+#define FT_SERVICE_TRUETYPE_ENGINE_H    <freetype/internal/services/svtteng.h>
+#define FT_SERVICE_TT_CMAP_H            <freetype/internal/services/svttcmap.h>
+#define FT_SERVICE_WINFNT_H             <freetype/internal/services/svwinfnt.h>
+#define FT_SERVICE_XFREE86_NAME_H       <freetype/internal/services/svxf86nm.h>
+#define FT_SERVICE_TRUETYPE_GLYF_H      <freetype/internal/services/svttglyf.h>
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __FTSERV_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftstream.h b/core/include/thirdparties/freetype/freetype/internal/ftstream.h
new file mode 100644
index 0000000..c1a2654
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftstream.h
@@ -0,0 +1,536 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftstream.h                                                             */
+/*                                                                         */
+/*    Stream handling (specification).                                     */
+/*                                                                         */
+/*  Copyright 1996-2002, 2004-2006, 2011, 2013 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTSTREAM_H__
+#define __FTSTREAM_H__
+
+
+#include "../../ft2build.h"
+#include "../ftsystem.h"
+#include "ftobjs.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /* format of an 8-bit frame_op value:           */
+  /*                                              */
+  /* bit  76543210                                */
+  /*      xxxxxxes                                */
+  /*                                              */
+  /* s is set to 1 if the value is signed.        */
+  /* e is set to 1 if the value is little-endian. */
+  /* xxx is a command.                            */
+
+#define FT_FRAME_OP_SHIFT         2
+#define FT_FRAME_OP_SIGNED        1
+#define FT_FRAME_OP_LITTLE        2
+#define FT_FRAME_OP_COMMAND( x )  ( x >> FT_FRAME_OP_SHIFT )
+
+#define FT_MAKE_FRAME_OP( command, little, sign ) \
+          ( ( command << FT_FRAME_OP_SHIFT ) | ( little << 1 ) | sign )
+
+#define FT_FRAME_OP_END    0
+#define FT_FRAME_OP_START  1  /* start a new frame     */
+#define FT_FRAME_OP_BYTE   2  /* read 1-byte value     */
+#define FT_FRAME_OP_SHORT  3  /* read 2-byte value     */
+#define FT_FRAME_OP_LONG   4  /* read 4-byte value     */
+#define FT_FRAME_OP_OFF3   5  /* read 3-byte value     */
+#define FT_FRAME_OP_BYTES  6  /* read a bytes sequence */
+
+
+  typedef enum  FT_Frame_Op_
+  {
+    ft_frame_end       = 0,
+    ft_frame_start     = FT_MAKE_FRAME_OP( FT_FRAME_OP_START, 0, 0 ),
+
+    ft_frame_byte      = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE,  0, 0 ),
+    ft_frame_schar     = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTE,  0, 1 ),
+
+    ft_frame_ushort_be = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 0 ),
+    ft_frame_short_be  = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 0, 1 ),
+    ft_frame_ushort_le = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 0 ),
+    ft_frame_short_le  = FT_MAKE_FRAME_OP( FT_FRAME_OP_SHORT, 1, 1 ),
+
+    ft_frame_ulong_be  = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 0 ),
+    ft_frame_long_be   = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 0, 1 ),
+    ft_frame_ulong_le  = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 0 ),
+    ft_frame_long_le   = FT_MAKE_FRAME_OP( FT_FRAME_OP_LONG, 1, 1 ),
+
+    ft_frame_uoff3_be  = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 0 ),
+    ft_frame_off3_be   = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 0, 1 ),
+    ft_frame_uoff3_le  = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 0 ),
+    ft_frame_off3_le   = FT_MAKE_FRAME_OP( FT_FRAME_OP_OFF3, 1, 1 ),
+
+    ft_frame_bytes     = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 0 ),
+    ft_frame_skip      = FT_MAKE_FRAME_OP( FT_FRAME_OP_BYTES, 0, 1 )
+
+  } FT_Frame_Op;
+
+
+  typedef struct  FT_Frame_Field_
+  {
+    FT_Byte    value;
+    FT_Byte    size;
+    FT_UShort  offset;
+
+  } FT_Frame_Field;
+
+
+  /* Construct an FT_Frame_Field out of a structure type and a field name. */
+  /* The structure type must be set in the FT_STRUCTURE macro before       */
+  /* calling the FT_FRAME_START() macro.                                   */
+  /*                                                                       */
+#define FT_FIELD_SIZE( f ) \
+          (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f )
+
+#define FT_FIELD_SIZE_DELTA( f ) \
+          (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f[0] )
+
+#define FT_FIELD_OFFSET( f ) \
+          (FT_UShort)( offsetof( FT_STRUCTURE, f ) )
+
+#define FT_FRAME_FIELD( frame_op, field ) \
+          {                               \
+            frame_op,                     \
+            FT_FIELD_SIZE( field ),       \
+            FT_FIELD_OFFSET( field )      \
+          }
+
+#define FT_MAKE_EMPTY_FIELD( frame_op )  { frame_op, 0, 0 }
+
+#define FT_FRAME_START( size )   { ft_frame_start, 0, size }
+#define FT_FRAME_END             { ft_frame_end, 0, 0 }
+
+#define FT_FRAME_LONG( f )       FT_FRAME_FIELD( ft_frame_long_be, f )
+#define FT_FRAME_ULONG( f )      FT_FRAME_FIELD( ft_frame_ulong_be, f )
+#define FT_FRAME_SHORT( f )      FT_FRAME_FIELD( ft_frame_short_be, f )
+#define FT_FRAME_USHORT( f )     FT_FRAME_FIELD( ft_frame_ushort_be, f )
+#define FT_FRAME_OFF3( f )       FT_FRAME_FIELD( ft_frame_off3_be, f )
+#define FT_FRAME_UOFF3( f )      FT_FRAME_FIELD( ft_frame_uoff3_be, f )
+#define FT_FRAME_BYTE( f )       FT_FRAME_FIELD( ft_frame_byte, f )
+#define FT_FRAME_CHAR( f )       FT_FRAME_FIELD( ft_frame_schar, f )
+
+#define FT_FRAME_LONG_LE( f )    FT_FRAME_FIELD( ft_frame_long_le, f )
+#define FT_FRAME_ULONG_LE( f )   FT_FRAME_FIELD( ft_frame_ulong_le, f )
+#define FT_FRAME_SHORT_LE( f )   FT_FRAME_FIELD( ft_frame_short_le, f )
+#define FT_FRAME_USHORT_LE( f )  FT_FRAME_FIELD( ft_frame_ushort_le, f )
+#define FT_FRAME_OFF3_LE( f )    FT_FRAME_FIELD( ft_frame_off3_le, f )
+#define FT_FRAME_UOFF3_LE( f )   FT_FRAME_FIELD( ft_frame_uoff3_le, f )
+
+#define FT_FRAME_SKIP_LONG       { ft_frame_long_be, 0, 0 }
+#define FT_FRAME_SKIP_SHORT      { ft_frame_short_be, 0, 0 }
+#define FT_FRAME_SKIP_BYTE       { ft_frame_byte, 0, 0 }
+
+#define FT_FRAME_BYTES( field, count ) \
+          {                            \
+            ft_frame_bytes,            \
+            count,                     \
+            FT_FIELD_OFFSET( field )   \
+          }
+
+#define FT_FRAME_SKIP_BYTES( count )  { ft_frame_skip, count, 0 }
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Integer extraction macros -- the `buffer' parameter must ALWAYS be of */
+  /* type `char*' or equivalent (1-byte elements).                         */
+  /*                                                                       */
+
+#define FT_BYTE_( p, i )  ( ((const FT_Byte*)(p))[(i)] )
+
+#define FT_INT16( x )   ( (FT_Int16)(x)  )
+#define FT_UINT16( x )  ( (FT_UInt16)(x) )
+#define FT_INT32( x )   ( (FT_Int32)(x)  )
+#define FT_UINT32( x )  ( (FT_UInt32)(x) )
+
+
+#define FT_BYTE_U16( p, i, s )  ( FT_UINT16( FT_BYTE_( p, i ) ) << (s) )
+#define FT_BYTE_U32( p, i, s )  ( FT_UINT32( FT_BYTE_( p, i ) ) << (s) )
+
+
+#define FT_PEEK_SHORT( p )  FT_INT16( FT_BYTE_U16( p, 0, 8) | \
+                                      FT_BYTE_U16( p, 1, 0) )
+
+#define FT_PEEK_USHORT( p )  FT_UINT16( FT_BYTE_U16( p, 0, 8 ) | \
+                                        FT_BYTE_U16( p, 1, 0 ) )
+
+#define FT_PEEK_LONG( p )  FT_INT32( FT_BYTE_U32( p, 0, 24 ) | \
+                                     FT_BYTE_U32( p, 1, 16 ) | \
+                                     FT_BYTE_U32( p, 2,  8 ) | \
+                                     FT_BYTE_U32( p, 3,  0 ) )
+
+#define FT_PEEK_ULONG( p )  FT_UINT32( FT_BYTE_U32( p, 0, 24 ) | \
+                                       FT_BYTE_U32( p, 1, 16 ) | \
+                                       FT_BYTE_U32( p, 2,  8 ) | \
+                                       FT_BYTE_U32( p, 3,  0 ) )
+
+#define FT_PEEK_OFF3( p )  FT_INT32( FT_BYTE_U32( p, 0, 16 ) | \
+                                     FT_BYTE_U32( p, 1,  8 ) | \
+                                     FT_BYTE_U32( p, 2,  0 ) )
+
+#define FT_PEEK_UOFF3( p )  FT_UINT32( FT_BYTE_U32( p, 0, 16 ) | \
+                                       FT_BYTE_U32( p, 1,  8 ) | \
+                                       FT_BYTE_U32( p, 2,  0 ) )
+
+#define FT_PEEK_SHORT_LE( p )  FT_INT16( FT_BYTE_U16( p, 1, 8 ) | \
+                                         FT_BYTE_U16( p, 0, 0 ) )
+
+#define FT_PEEK_USHORT_LE( p )  FT_UINT16( FT_BYTE_U16( p, 1, 8 ) |  \
+                                           FT_BYTE_U16( p, 0, 0 ) )
+
+#define FT_PEEK_LONG_LE( p )  FT_INT32( FT_BYTE_U32( p, 3, 24 ) | \
+                                        FT_BYTE_U32( p, 2, 16 ) | \
+                                        FT_BYTE_U32( p, 1,  8 ) | \
+                                        FT_BYTE_U32( p, 0,  0 ) )
+
+#define FT_PEEK_ULONG_LE( p )  FT_UINT32( FT_BYTE_U32( p, 3, 24 ) | \
+                                          FT_BYTE_U32( p, 2, 16 ) | \
+                                          FT_BYTE_U32( p, 1,  8 ) | \
+                                          FT_BYTE_U32( p, 0,  0 ) )
+
+#define FT_PEEK_OFF3_LE( p )  FT_INT32( FT_BYTE_U32( p, 2, 16 ) | \
+                                        FT_BYTE_U32( p, 1,  8 ) | \
+                                        FT_BYTE_U32( p, 0,  0 ) )
+
+#define FT_PEEK_UOFF3_LE( p )  FT_UINT32( FT_BYTE_U32( p, 2, 16 ) | \
+                                          FT_BYTE_U32( p, 1,  8 ) | \
+                                          FT_BYTE_U32( p, 0,  0 ) )
+
+
+#define FT_NEXT_CHAR( buffer )       \
+          ( (signed char)*buffer++ )
+
+#define FT_NEXT_BYTE( buffer )         \
+          ( (unsigned char)*buffer++ )
+
+#define FT_NEXT_SHORT( buffer )                                   \
+          ( (short)( buffer += 2, FT_PEEK_SHORT( buffer - 2 ) ) )
+
+#define FT_NEXT_USHORT( buffer )                                            \
+          ( (unsigned short)( buffer += 2, FT_PEEK_USHORT( buffer - 2 ) ) )
+
+#define FT_NEXT_OFF3( buffer )                                  \
+          ( (long)( buffer += 3, FT_PEEK_OFF3( buffer - 3 ) ) )
+
+#define FT_NEXT_UOFF3( buffer )                                           \
+          ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3( buffer - 3 ) ) )
+
+#define FT_NEXT_LONG( buffer )                                  \
+          ( (long)( buffer += 4, FT_PEEK_LONG( buffer - 4 ) ) )
+
+#define FT_NEXT_ULONG( buffer )                                           \
+          ( (unsigned long)( buffer += 4, FT_PEEK_ULONG( buffer - 4 ) ) )
+
+
+#define FT_NEXT_SHORT_LE( buffer )                                   \
+          ( (short)( buffer += 2, FT_PEEK_SHORT_LE( buffer - 2 ) ) )
+
+#define FT_NEXT_USHORT_LE( buffer )                                            \
+          ( (unsigned short)( buffer += 2, FT_PEEK_USHORT_LE( buffer - 2 ) ) )
+
+#define FT_NEXT_OFF3_LE( buffer )                                  \
+          ( (long)( buffer += 3, FT_PEEK_OFF3_LE( buffer - 3 ) ) )
+
+#define FT_NEXT_UOFF3_LE( buffer )                                           \
+          ( (unsigned long)( buffer += 3, FT_PEEK_UOFF3_LE( buffer - 3 ) ) )
+
+#define FT_NEXT_LONG_LE( buffer )                                  \
+          ( (long)( buffer += 4, FT_PEEK_LONG_LE( buffer - 4 ) ) )
+
+#define FT_NEXT_ULONG_LE( buffer )                                           \
+          ( (unsigned long)( buffer += 4, FT_PEEK_ULONG_LE( buffer - 4 ) ) )
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Each GET_xxxx() macro uses an implicit `stream' variable.             */
+  /*                                                                       */
+#if 0
+#define FT_GET_MACRO( type )    FT_NEXT_ ## type ( stream->cursor )
+
+#define FT_GET_CHAR()       FT_GET_MACRO( CHAR )
+#define FT_GET_BYTE()       FT_GET_MACRO( BYTE )
+#define FT_GET_SHORT()      FT_GET_MACRO( SHORT )
+#define FT_GET_USHORT()     FT_GET_MACRO( USHORT )
+#define FT_GET_OFF3()       FT_GET_MACRO( OFF3 )
+#define FT_GET_UOFF3()      FT_GET_MACRO( UOFF3 )
+#define FT_GET_LONG()       FT_GET_MACRO( LONG )
+#define FT_GET_ULONG()      FT_GET_MACRO( ULONG )
+#define FT_GET_TAG4()       FT_GET_MACRO( ULONG )
+
+#define FT_GET_SHORT_LE()   FT_GET_MACRO( SHORT_LE )
+#define FT_GET_USHORT_LE()  FT_GET_MACRO( USHORT_LE )
+#define FT_GET_LONG_LE()    FT_GET_MACRO( LONG_LE )
+#define FT_GET_ULONG_LE()   FT_GET_MACRO( ULONG_LE )
+
+#else
+#define FT_GET_MACRO( func, type )        ( (type)func( stream ) )
+
+#define FT_GET_CHAR()       FT_GET_MACRO( FT_Stream_GetChar, FT_Char )
+#define FT_GET_BYTE()       FT_GET_MACRO( FT_Stream_GetChar, FT_Byte )
+#define FT_GET_SHORT()      FT_GET_MACRO( FT_Stream_GetUShort, FT_Short )
+#define FT_GET_USHORT()     FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort )
+#define FT_GET_OFF3()       FT_GET_MACRO( FT_Stream_GetUOffset, FT_Long )
+#define FT_GET_UOFF3()      FT_GET_MACRO( FT_Stream_GetUOffset, FT_ULong )
+#define FT_GET_LONG()       FT_GET_MACRO( FT_Stream_GetULong, FT_Long )
+#define FT_GET_ULONG()      FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
+#define FT_GET_TAG4()       FT_GET_MACRO( FT_Stream_GetULong, FT_ULong )
+
+#define FT_GET_SHORT_LE()   FT_GET_MACRO( FT_Stream_GetUShortLE, FT_Short )
+#define FT_GET_USHORT_LE()  FT_GET_MACRO( FT_Stream_GetUShortLE, FT_UShort )
+#define FT_GET_LONG_LE()    FT_GET_MACRO( FT_Stream_GetULongLE, FT_Long )
+#define FT_GET_ULONG_LE()   FT_GET_MACRO( FT_Stream_GetULongLE, FT_ULong )
+#endif
+
+#define FT_READ_MACRO( func, type, var )        \
+          ( var = (type)func( stream, &error ), \
+            error != FT_Err_Ok )
+
+#define FT_READ_BYTE( var )       FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
+#define FT_READ_CHAR( var )       FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
+#define FT_READ_SHORT( var )      FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
+#define FT_READ_USHORT( var )     FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var )
+#define FT_READ_OFF3( var )       FT_READ_MACRO( FT_Stream_ReadUOffset, FT_Long, var )
+#define FT_READ_UOFF3( var )      FT_READ_MACRO( FT_Stream_ReadUOffset, FT_ULong, var )
+#define FT_READ_LONG( var )       FT_READ_MACRO( FT_Stream_ReadULong, FT_Long, var )
+#define FT_READ_ULONG( var )      FT_READ_MACRO( FT_Stream_ReadULong, FT_ULong, var )
+
+#define FT_READ_SHORT_LE( var )   FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_Short, var )
+#define FT_READ_USHORT_LE( var )  FT_READ_MACRO( FT_Stream_ReadUShortLE, FT_UShort, var )
+#define FT_READ_LONG_LE( var )    FT_READ_MACRO( FT_Stream_ReadULongLE, FT_Long, var )
+#define FT_READ_ULONG_LE( var )   FT_READ_MACRO( FT_Stream_ReadULongLE, FT_ULong, var )
+
+
+#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
+
+  /* initialize a stream for reading a regular system stream */
+  FT_BASE( FT_Error )
+  FT_Stream_Open( FT_Stream    stream,
+                  const char*  filepathname );
+
+#endif /* FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */
+
+
+  /* create a new (input) stream from an FT_Open_Args structure */
+  FT_BASE( FT_Error )
+  FT_Stream_New( FT_Library           library,
+                 const FT_Open_Args*  args,
+                 FT_Stream           *astream );
+
+  /* free a stream */
+  FT_BASE( void )
+  FT_Stream_Free( FT_Stream  stream,
+                  FT_Int     external );
+
+  /* initialize a stream for reading in-memory data */
+  FT_BASE( void )
+  FT_Stream_OpenMemory( FT_Stream       stream,
+                        const FT_Byte*  base,
+                        FT_ULong        size );
+
+  /* close a stream (does not destroy the stream structure) */
+  FT_BASE( void )
+  FT_Stream_Close( FT_Stream  stream );
+
+
+  /* seek within a stream. position is relative to start of stream */
+  FT_BASE( FT_Error )
+  FT_Stream_Seek( FT_Stream  stream,
+                  FT_ULong   pos );
+
+  /* skip bytes in a stream */
+  FT_BASE( FT_Error )
+  FT_Stream_Skip( FT_Stream  stream,
+                  FT_Long    distance );
+
+  /* return current stream position */
+  FT_BASE( FT_Long )
+  FT_Stream_Pos( FT_Stream  stream );
+
+  /* read bytes from a stream into a user-allocated buffer, returns an */
+  /* error if not all bytes could be read.                             */
+  FT_BASE( FT_Error )
+  FT_Stream_Read( FT_Stream  stream,
+                  FT_Byte*   buffer,
+                  FT_ULong   count );
+
+  /* read bytes from a stream at a given position */
+  FT_BASE( FT_Error )
+  FT_Stream_ReadAt( FT_Stream  stream,
+                    FT_ULong   pos,
+                    FT_Byte*   buffer,
+                    FT_ULong   count );
+
+  /* try to read bytes at the end of a stream; return number of bytes */
+  /* really available                                                 */
+  FT_BASE( FT_ULong )
+  FT_Stream_TryRead( FT_Stream  stream,
+                     FT_Byte*   buffer,
+                     FT_ULong   count );
+
+  /* Enter a frame of `count' consecutive bytes in a stream.  Returns an */
+  /* error if the frame could not be read/accessed.  The caller can use  */
+  /* the FT_Stream_Get_XXX functions to retrieve frame data without      */
+  /* error checks.                                                       */
+  /*                                                                     */
+  /* You must _always_ call FT_Stream_ExitFrame() once you have entered  */
+  /* a stream frame!                                                     */
+  /*                                                                     */
+  FT_BASE( FT_Error )
+  FT_Stream_EnterFrame( FT_Stream  stream,
+                        FT_ULong   count );
+
+  /* exit a stream frame */
+  FT_BASE( void )
+  FT_Stream_ExitFrame( FT_Stream  stream );
+
+  /* Extract a stream frame.  If the stream is disk-based, a heap block */
+  /* is allocated and the frame bytes are read into it.  If the stream  */
+  /* is memory-based, this function simply set a pointer to the data.   */
+  /*                                                                    */
+  /* Useful to optimize access to memory-based streams transparently.   */
+  /*                                                                    */
+  /* All extracted frames must be `freed' with a call to the function   */
+  /* FT_Stream_ReleaseFrame().                                          */
+  /*                                                                    */
+  FT_BASE( FT_Error )
+  FT_Stream_ExtractFrame( FT_Stream  stream,
+                          FT_ULong   count,
+                          FT_Byte**  pbytes );
+
+  /* release an extract frame (see FT_Stream_ExtractFrame) */
+  FT_BASE( void )
+  FT_Stream_ReleaseFrame( FT_Stream  stream,
+                          FT_Byte**  pbytes );
+
+  /* read a byte from an entered frame */
+  FT_BASE( FT_Char )
+  FT_Stream_GetChar( FT_Stream  stream );
+
+  /* read a 16-bit big-endian unsigned integer from an entered frame */
+  FT_BASE( FT_UShort )
+  FT_Stream_GetUShort( FT_Stream  stream );
+
+  /* read a 24-bit big-endian unsigned integer from an entered frame */
+  FT_BASE( FT_ULong )
+  FT_Stream_GetUOffset( FT_Stream  stream );
+
+  /* read a 32-bit big-endian unsigned integer from an entered frame */
+  FT_BASE( FT_ULong )
+  FT_Stream_GetULong( FT_Stream  stream );
+
+  /* read a 16-bit little-endian unsigned integer from an entered frame */
+  FT_BASE( FT_UShort )
+  FT_Stream_GetUShortLE( FT_Stream  stream );
+
+  /* read a 32-bit little-endian unsigned integer from an entered frame */
+  FT_BASE( FT_ULong )
+  FT_Stream_GetULongLE( FT_Stream  stream );
+
+
+  /* read a byte from a stream */
+  FT_BASE( FT_Char )
+  FT_Stream_ReadChar( FT_Stream  stream,
+                      FT_Error*  error );
+
+  /* read a 16-bit big-endian unsigned integer from a stream */
+  FT_BASE( FT_UShort )
+  FT_Stream_ReadUShort( FT_Stream  stream,
+                        FT_Error*  error );
+
+  /* read a 24-bit big-endian unsigned integer from a stream */
+  FT_BASE( FT_ULong )
+  FT_Stream_ReadUOffset( FT_Stream  stream,
+                         FT_Error*  error );
+
+  /* read a 32-bit big-endian integer from a stream */
+  FT_BASE( FT_ULong )
+  FT_Stream_ReadULong( FT_Stream  stream,
+                       FT_Error*  error );
+
+  /* read a 16-bit little-endian unsigned integer from a stream */
+  FT_BASE( FT_UShort )
+  FT_Stream_ReadUShortLE( FT_Stream  stream,
+                          FT_Error*  error );
+
+  /* read a 32-bit little-endian unsigned integer from a stream */
+  FT_BASE( FT_ULong )
+  FT_Stream_ReadULongLE( FT_Stream  stream,
+                         FT_Error*  error );
+
+  /* Read a structure from a stream.  The structure must be described */
+  /* by an array of FT_Frame_Field records.                           */
+  FT_BASE( FT_Error )
+  FT_Stream_ReadFields( FT_Stream              stream,
+                        const FT_Frame_Field*  fields,
+                        void*                  structure );
+
+
+#define FT_STREAM_POS()           \
+          FT_Stream_Pos( stream )
+
+#define FT_STREAM_SEEK( position )                               \
+          FT_SET_ERROR( FT_Stream_Seek( stream,                  \
+                                        (FT_ULong)(position) ) )
+
+#define FT_STREAM_SKIP( distance )                              \
+          FT_SET_ERROR( FT_Stream_Skip( stream,                 \
+                                        (FT_Long)(distance) ) )
+
+#define FT_STREAM_READ( buffer, count )                       \
+          FT_SET_ERROR( FT_Stream_Read( stream,               \
+                                        (FT_Byte*)(buffer),   \
+                                        (FT_ULong)(count) ) )
+
+#define FT_STREAM_READ_AT( position, buffer, count )            \
+          FT_SET_ERROR( FT_Stream_ReadAt( stream,               \
+                                          (FT_ULong)(position), \
+                                          (FT_Byte*)buffer,     \
+                                          (FT_ULong)(count) ) )
+
+#define FT_STREAM_READ_FIELDS( fields, object )                          \
+          FT_SET_ERROR( FT_Stream_ReadFields( stream, fields, object ) )
+
+
+#define FT_FRAME_ENTER( size )                                           \
+          FT_SET_ERROR(                                                  \
+            FT_DEBUG_INNER( FT_Stream_EnterFrame( stream,                \
+                                                  (FT_ULong)(size) ) ) )
+
+#define FT_FRAME_EXIT()                                   \
+          FT_DEBUG_INNER( FT_Stream_ExitFrame( stream ) )
+
+#define FT_FRAME_EXTRACT( size, bytes )                                       \
+          FT_SET_ERROR(                                                       \
+            FT_DEBUG_INNER( FT_Stream_ExtractFrame( stream,                   \
+                                                    (FT_ULong)(size),         \
+                                                    (FT_Byte**)&(bytes) ) ) )
+
+#define FT_FRAME_RELEASE( bytes )                                         \
+          FT_DEBUG_INNER( FT_Stream_ReleaseFrame( stream,                 \
+                                                  (FT_Byte**)&(bytes) ) )
+
+
+FT_END_HEADER
+
+#endif /* __FTSTREAM_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/fttrace.h b/core/include/thirdparties/freetype/freetype/internal/fttrace.h
new file mode 100644
index 0000000..a9d98b6
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/fttrace.h
@@ -0,0 +1,152 @@
+/***************************************************************************/
+/*                                                                         */
+/*  fttrace.h                                                              */
+/*                                                                         */
+/*    Tracing handling (specification only).                               */
+/*                                                                         */
+/*  Copyright 2002, 2004-2007, 2009, 2011-2013 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /* definitions of trace levels for FreeType 2 */
+
+  /* the first level must always be `trace_any' */
+FT_TRACE_DEF( any )
+
+  /* base components */
+FT_TRACE_DEF( calc )      /* calculations            (ftcalc.c)   */
+FT_TRACE_DEF( memory )    /* memory manager          (ftobjs.c)   */
+FT_TRACE_DEF( stream )    /* stream manager          (ftstream.c) */
+FT_TRACE_DEF( io )        /* i/o interface           (ftsystem.c) */
+FT_TRACE_DEF( list )      /* list management         (ftlist.c)   */
+FT_TRACE_DEF( init )      /* initialization          (ftinit.c)   */
+FT_TRACE_DEF( objs )      /* base objects            (ftobjs.c)   */
+FT_TRACE_DEF( outline )   /* outline management      (ftoutln.c)  */
+FT_TRACE_DEF( glyph )     /* glyph management        (ftglyph.c)  */
+FT_TRACE_DEF( gloader )   /* glyph loader            (ftgloadr.c) */
+
+FT_TRACE_DEF( raster )    /* monochrome rasterizer   (ftraster.c) */
+FT_TRACE_DEF( smooth )    /* anti-aliasing raster    (ftgrays.c)  */
+FT_TRACE_DEF( mm )        /* MM interface            (ftmm.c)     */
+FT_TRACE_DEF( raccess )   /* resource fork accessor  (ftrfork.c)  */
+FT_TRACE_DEF( synth )     /* bold/slant synthesizer  (ftsynth.c)  */
+FT_TRACE_DEF( bitmap )    /* bitmap checksum         (ftobjs.c)   */
+
+  /* Cache sub-system */
+FT_TRACE_DEF( cache )     /* cache sub-system        (ftcache.c, etc.) */
+
+  /* SFNT driver components */
+FT_TRACE_DEF( sfdriver )  /* SFNT font driver        (sfdriver.c) */
+FT_TRACE_DEF( sfobjs )    /* SFNT object handler     (sfobjs.c)   */
+FT_TRACE_DEF( ttcmap )    /* charmap handler         (ttcmap.c)   */
+FT_TRACE_DEF( ttkern )    /* kerning handler         (ttkern.c)   */
+FT_TRACE_DEF( ttload )    /* basic TrueType tables   (ttload.c)   */
+FT_TRACE_DEF( ttmtx )     /* metrics-related tables  (ttmtx.c)    */
+FT_TRACE_DEF( ttpost )    /* PS table processing     (ttpost.c)   */
+FT_TRACE_DEF( ttsbit )    /* TrueType sbit handling  (ttsbit.c)   */
+FT_TRACE_DEF( ttbdf )     /* TrueType embedded BDF   (ttbdf.c)    */
+
+  /* TrueType driver components */
+FT_TRACE_DEF( ttdriver )  /* TT font driver          (ttdriver.c) */
+FT_TRACE_DEF( ttgload )   /* TT glyph loader         (ttgload.c)  */
+FT_TRACE_DEF( ttinterp )  /* bytecode interpreter    (ttinterp.c) */
+FT_TRACE_DEF( ttobjs )    /* TT objects manager      (ttobjs.c)   */
+FT_TRACE_DEF( ttpload )   /* TT data/program loader  (ttpload.c)  */
+FT_TRACE_DEF( ttgxvar )   /* TrueType GX var handler (ttgxvar.c)  */
+
+  /* Type 1 driver components */
+FT_TRACE_DEF( t1afm )
+FT_TRACE_DEF( t1driver )
+FT_TRACE_DEF( t1gload )
+FT_TRACE_DEF( t1hint )
+FT_TRACE_DEF( t1load )
+FT_TRACE_DEF( t1objs )
+FT_TRACE_DEF( t1parse )
+
+  /* PostScript helper module `psaux' */
+FT_TRACE_DEF( t1decode )
+FT_TRACE_DEF( psobjs )
+FT_TRACE_DEF( psconv )
+
+  /* PostScript hinting module `pshinter' */
+FT_TRACE_DEF( pshrec )
+FT_TRACE_DEF( pshalgo1 )
+FT_TRACE_DEF( pshalgo2 )
+
+  /* Type 2 driver components */
+FT_TRACE_DEF( cffdriver )
+FT_TRACE_DEF( cffgload )
+FT_TRACE_DEF( cffload )
+FT_TRACE_DEF( cffobjs )
+FT_TRACE_DEF( cffparse )
+
+FT_TRACE_DEF( cf2blues )
+FT_TRACE_DEF( cf2hints )
+FT_TRACE_DEF( cf2interp )
+
+  /* Type 42 driver component */
+FT_TRACE_DEF( t42 )
+
+  /* CID driver components */
+FT_TRACE_DEF( cidafm )
+FT_TRACE_DEF( ciddriver )
+FT_TRACE_DEF( cidgload )
+FT_TRACE_DEF( cidload )
+FT_TRACE_DEF( cidobjs )
+FT_TRACE_DEF( cidparse )
+
+  /* Windows font component */
+FT_TRACE_DEF( winfnt )
+
+  /* PCF font components */
+FT_TRACE_DEF( pcfdriver )
+FT_TRACE_DEF( pcfread )
+
+  /* BDF font components */
+FT_TRACE_DEF( bdfdriver )
+FT_TRACE_DEF( bdflib )
+
+  /* PFR font component */
+FT_TRACE_DEF( pfr )
+
+  /* OpenType validation components */
+FT_TRACE_DEF( otvmodule )
+FT_TRACE_DEF( otvcommon )
+FT_TRACE_DEF( otvbase )
+FT_TRACE_DEF( otvgdef )
+FT_TRACE_DEF( otvgpos )
+FT_TRACE_DEF( otvgsub )
+FT_TRACE_DEF( otvjstf )
+FT_TRACE_DEF( otvmath )
+
+  /* TrueTypeGX/AAT validation components */
+FT_TRACE_DEF( gxvmodule )
+FT_TRACE_DEF( gxvcommon )
+FT_TRACE_DEF( gxvfeat )
+FT_TRACE_DEF( gxvmort )
+FT_TRACE_DEF( gxvmorx )
+FT_TRACE_DEF( gxvbsln )
+FT_TRACE_DEF( gxvjust )
+FT_TRACE_DEF( gxvkern )
+FT_TRACE_DEF( gxvopbd )
+FT_TRACE_DEF( gxvtrak )
+FT_TRACE_DEF( gxvprop )
+FT_TRACE_DEF( gxvlcar )
+
+  /* autofit components */
+FT_TRACE_DEF( afmodule )
+FT_TRACE_DEF( afhints )
+FT_TRACE_DEF( afcjk )
+FT_TRACE_DEF( aflatin )
+FT_TRACE_DEF( aflatin2 )
+FT_TRACE_DEF( afwarp )
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/ftvalid.h b/core/include/thirdparties/freetype/freetype/internal/ftvalid.h
new file mode 100644
index 0000000..4442613
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/ftvalid.h
@@ -0,0 +1,161 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftvalid.h                                                              */
+/*                                                                         */
+/*    FreeType validation support (specification).                         */
+/*                                                                         */
+/*  Copyright 2004, 2013 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __FTVALID_H__
+#define __FTVALID_H__
+
+#include "../../ft2build.h"
+#include "../config/ftstdlib.h"   /* for ft_setjmp and ft_longjmp */
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /****                    V A L I D A T I O N                          ****/
+  /****                                                                 ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /* handle to a validation object */
+  typedef struct FT_ValidatorRec_ volatile*  FT_Validator;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* There are three distinct validation levels defined here:              */
+  /*                                                                       */
+  /* FT_VALIDATE_DEFAULT ::                                                */
+  /*   A table that passes this validation level can be used reliably by   */
+  /*   FreeType.  It generally means that all offsets have been checked to */
+  /*   prevent out-of-bound reads, that array counts are correct, etc.     */
+  /*                                                                       */
+  /* FT_VALIDATE_TIGHT ::                                                  */
+  /*   A table that passes this validation level can be used reliably and  */
+  /*   doesn't contain invalid data.  For example, a charmap table that    */
+  /*   returns invalid glyph indices will not pass, even though it can     */
+  /*   be used with FreeType in default mode (the library will simply      */
+  /*   return an error later when trying to load the glyph).               */
+  /*                                                                       */
+  /*   It also checks that fields which must be a multiple of 2, 4, or 8,  */
+  /*   don't have incorrect values, etc.                                   */
+  /*                                                                       */
+  /* FT_VALIDATE_PARANOID ::                                               */
+  /*   Only for font debugging.  Checks that a table follows the           */
+  /*   specification by 100%.  Very few fonts will be able to pass this    */
+  /*   level anyway but it can be useful for certain tools like font       */
+  /*   editors/converters.                                                 */
+  /*                                                                       */
+  typedef enum  FT_ValidationLevel_
+  {
+    FT_VALIDATE_DEFAULT = 0,
+    FT_VALIDATE_TIGHT,
+    FT_VALIDATE_PARANOID
+
+  } FT_ValidationLevel;
+
+
+#if defined( _MSC_VER )      /* Visual C++ (and Intel C++) */
+  /* We disable the warning `structure was padded due to   */
+  /* __declspec(align())' in order to compile cleanly with */
+  /* the maximum level of warnings.                        */
+#pragma warning( push )
+#pragma warning( disable : 4324 )
+#endif /* _MSC_VER */
+
+  /* validator structure */
+  typedef struct  FT_ValidatorRec_
+  {
+    const FT_Byte*      base;        /* address of table in memory       */
+    const FT_Byte*      limit;       /* `base' + sizeof(table) in memory */
+    FT_ValidationLevel  level;       /* validation level                 */
+    FT_Error            error;       /* error returned. 0 means success  */
+
+    ft_jmp_buf          jump_buffer; /* used for exception handling      */
+
+  } FT_ValidatorRec;
+
+#if defined( _MSC_VER )
+#pragma warning( pop )
+#endif
+
+#define FT_VALIDATOR( x )  ( (FT_Validator)( x ) )
+
+
+  FT_BASE( void )
+  ft_validator_init( FT_Validator        valid,
+                     const FT_Byte*      base,
+                     const FT_Byte*      limit,
+                     FT_ValidationLevel  level );
+
+  /* Do not use this. It's broken and will cause your validator to crash */
+  /* if you run it on an invalid font.                                   */
+  FT_BASE( FT_Int )
+  ft_validator_run( FT_Validator  valid );
+
+  /* Sets the error field in a validator, then calls `longjmp' to return */
+  /* to high-level caller.  Using `setjmp/longjmp' avoids many stupid    */
+  /* error checks within the validation routines.                        */
+  /*                                                                     */
+  FT_BASE( void )
+  ft_validator_error( FT_Validator  valid,
+                      FT_Error      error );
+
+
+  /* Calls ft_validate_error.  Assumes that the `valid' local variable */
+  /* holds a pointer to the current validator object.                  */
+  /*                                                                   */
+  /* Use preprocessor prescan to pass FT_ERR_PREFIX.                   */
+  /*                                                                   */
+#define FT_INVALID( _prefix, _error )  FT_INVALID_( _prefix, _error )
+#define FT_INVALID_( _prefix, _error ) \
+          ft_validator_error( valid, _prefix ## _error )
+
+  /* called when a broken table is detected */
+#define FT_INVALID_TOO_SHORT \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
+
+  /* called when an invalid offset is detected */
+#define FT_INVALID_OFFSET \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Offset )
+
+  /* called when an invalid format/value is detected */
+#define FT_INVALID_FORMAT \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
+
+  /* called when an invalid glyph index is detected */
+#define FT_INVALID_GLYPH_ID \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Glyph_Index )
+
+  /* called when an invalid field value is detected */
+#define FT_INVALID_DATA \
+          FT_INVALID( FT_ERR_PREFIX, Invalid_Table )
+
+
+FT_END_HEADER
+
+#endif /* __FTVALID_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/internal.h b/core/include/thirdparties/freetype/freetype/internal/internal.h
new file mode 100644
index 0000000..262afcf
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/internal.h
@@ -0,0 +1,63 @@
+/***************************************************************************/
+/*                                                                         */
+/*  internal.h                                                             */
+/*                                                                         */
+/*    Internal header files (specification only).                          */
+/*                                                                         */
+/*  Copyright 1996-2004, 2013 by                                           */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This file is automatically included by `ft2build.h'.                  */
+  /* Do not include it manually!                                           */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#define FT_INTERNAL_OBJECTS_H             <freetype/internal/ftobjs.h>
+#define FT_INTERNAL_PIC_H                 <freetype/internal/ftpic.h>
+#define FT_INTERNAL_STREAM_H              <freetype/internal/ftstream.h>
+#define FT_INTERNAL_MEMORY_H              <freetype/internal/ftmemory.h>
+#define FT_INTERNAL_DEBUG_H               <freetype/internal/ftdebug.h>
+#define FT_INTERNAL_CALC_H                <freetype/internal/ftcalc.h>
+#define FT_INTERNAL_DRIVER_H              <freetype/internal/ftdriver.h>
+#define FT_INTERNAL_TRACE_H               <freetype/internal/fttrace.h>
+#define FT_INTERNAL_GLYPH_LOADER_H        <freetype/internal/ftgloadr.h>
+#define FT_INTERNAL_SFNT_H                <freetype/internal/sfnt.h>
+#define FT_INTERNAL_SERVICE_H             <freetype/internal/ftserv.h>
+#define FT_INTERNAL_RFORK_H               <freetype/internal/ftrfork.h>
+#define FT_INTERNAL_VALIDATE_H            <freetype/internal/ftvalid.h>
+
+#define FT_INTERNAL_TRUETYPE_TYPES_H      <freetype/internal/tttypes.h>
+#define FT_INTERNAL_TYPE1_TYPES_H         <freetype/internal/t1types.h>
+
+#define FT_INTERNAL_POSTSCRIPT_AUX_H      <freetype/internal/psaux.h>
+#define FT_INTERNAL_POSTSCRIPT_HINTS_H    <freetype/internal/pshints.h>
+#define FT_INTERNAL_POSTSCRIPT_GLOBALS_H  <freetype/internal/psglobal.h>
+
+#define FT_INTERNAL_AUTOHINT_H            <freetype/internal/autohint.h>
+
+
+#if defined( _MSC_VER )      /* Visual C++ (and Intel C++) */
+
+  /* We disable the warning `conditional expression is constant' here */
+  /* in order to compile cleanly with the maximum level of warnings.  */
+  /* In particular, the warning complains about stuff like `while(0)' */
+  /* which is very useful in macro definitions.  There is no benefit  */
+  /* in having it enabled.                                            */
+#pragma warning( disable : 4127 )
+
+#endif /* _MSC_VER */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/psaux.h b/core/include/thirdparties/freetype/freetype/internal/psaux.h
new file mode 100644
index 0000000..3128ea4
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/psaux.h
@@ -0,0 +1,877 @@
+/***************************************************************************/
+/*                                                                         */
+/*  psaux.h                                                                */
+/*                                                                         */
+/*    Auxiliary functions and data structures related to PostScript fonts  */
+/*    (specification).                                                     */
+/*                                                                         */
+/*  Copyright 1996-2004, 2006, 2008, 2009, 2012 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __PSAUX_H__
+#define __PSAUX_H__
+
+
+#include "../../ft2build.h"
+#include "ftobjs.h"
+#include "t1types.h"
+#include "services/svpscmap.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                             T1_TABLE                          *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  typedef struct PS_TableRec_*              PS_Table;
+  typedef const struct PS_Table_FuncsRec_*  PS_Table_Funcs;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    PS_Table_FuncsRec                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A set of function pointers to manage PS_Table objects.             */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    table_init    :: Used to initialize a table.                       */
+  /*                                                                       */
+  /*    table_done    :: Finalizes resp. destroy a given table.            */
+  /*                                                                       */
+  /*    table_add     :: Adds a new object to a table.                     */
+  /*                                                                       */
+  /*    table_release :: Releases table data, then finalizes it.           */
+  /*                                                                       */
+  typedef struct  PS_Table_FuncsRec_
+  {
+    FT_Error
+    (*init)( PS_Table   table,
+             FT_Int     count,
+             FT_Memory  memory );
+
+    void
+    (*done)( PS_Table  table );
+
+    FT_Error
+    (*add)( PS_Table    table,
+            FT_Int      idx,
+            void*       object,
+            FT_PtrDist  length );
+
+    void
+    (*release)( PS_Table  table );
+
+  } PS_Table_FuncsRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    PS_TableRec                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A PS_Table is a simple object used to store an array of objects in */
+  /*    a single memory block.                                             */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    block     :: The address in memory of the growheap's block.  This  */
+  /*                 can change between two object adds, due to            */
+  /*                 reallocation.                                         */
+  /*                                                                       */
+  /*    cursor    :: The current top of the grow heap within its block.    */
+  /*                                                                       */
+  /*    capacity  :: The current size of the heap block.  Increments by    */
+  /*                 1kByte chunks.                                        */
+  /*                                                                       */
+  /*    init      :: Set to 0xDEADBEEF if `elements' and `lengths' have    */
+  /*                 been allocated.                                       */
+  /*                                                                       */
+  /*    max_elems :: The maximum number of elements in table.              */
+  /*                                                                       */
+  /*    num_elems :: The current number of elements in table.              */
+  /*                                                                       */
+  /*    elements  :: A table of element addresses within the block.        */
+  /*                                                                       */
+  /*    lengths   :: A table of element sizes within the block.            */
+  /*                                                                       */
+  /*    memory    :: The object used for memory operations                 */
+  /*                 (alloc/realloc).                                      */
+  /*                                                                       */
+  /*    funcs     :: A table of method pointers for this object.           */
+  /*                                                                       */
+  typedef struct  PS_TableRec_
+  {
+    FT_Byte*           block;          /* current memory block           */
+    FT_Offset          cursor;         /* current cursor in memory block */
+    FT_Offset          capacity;       /* current size of memory block   */
+    FT_Long            init;
+
+    FT_Int             max_elems;
+    FT_Int             num_elems;
+    FT_Byte**          elements;       /* addresses of table elements */
+    FT_PtrDist*        lengths;        /* lengths of table elements   */
+
+    FT_Memory          memory;
+    PS_Table_FuncsRec  funcs;
+
+  } PS_TableRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                       T1 FIELDS & TOKENS                      *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef struct PS_ParserRec_*  PS_Parser;
+
+  typedef struct T1_TokenRec_*   T1_Token;
+
+  typedef struct T1_FieldRec_*   T1_Field;
+
+
+  /* simple enumeration type used to identify token types */
+  typedef enum  T1_TokenType_
+  {
+    T1_TOKEN_TYPE_NONE = 0,
+    T1_TOKEN_TYPE_ANY,
+    T1_TOKEN_TYPE_STRING,
+    T1_TOKEN_TYPE_ARRAY,
+    T1_TOKEN_TYPE_KEY, /* aka `name' */
+
+    /* do not remove */
+    T1_TOKEN_TYPE_MAX
+
+  } T1_TokenType;
+
+
+  /* a simple structure used to identify tokens */
+  typedef struct  T1_TokenRec_
+  {
+    FT_Byte*      start;   /* first character of token in input stream */
+    FT_Byte*      limit;   /* first character after the token          */
+    T1_TokenType  type;    /* type of token                            */
+
+  } T1_TokenRec;
+
+
+  /* enumeration type used to identify object fields */
+  typedef enum  T1_FieldType_
+  {
+    T1_FIELD_TYPE_NONE = 0,
+    T1_FIELD_TYPE_BOOL,
+    T1_FIELD_TYPE_INTEGER,
+    T1_FIELD_TYPE_FIXED,
+    T1_FIELD_TYPE_FIXED_1000,
+    T1_FIELD_TYPE_STRING,
+    T1_FIELD_TYPE_KEY,
+    T1_FIELD_TYPE_BBOX,
+    T1_FIELD_TYPE_MM_BBOX,
+    T1_FIELD_TYPE_INTEGER_ARRAY,
+    T1_FIELD_TYPE_FIXED_ARRAY,
+    T1_FIELD_TYPE_CALLBACK,
+
+    /* do not remove */
+    T1_FIELD_TYPE_MAX
+
+  } T1_FieldType;
+
+
+  typedef enum  T1_FieldLocation_
+  {
+    T1_FIELD_LOCATION_CID_INFO,
+    T1_FIELD_LOCATION_FONT_DICT,
+    T1_FIELD_LOCATION_FONT_EXTRA,
+    T1_FIELD_LOCATION_FONT_INFO,
+    T1_FIELD_LOCATION_PRIVATE,
+    T1_FIELD_LOCATION_BBOX,
+    T1_FIELD_LOCATION_LOADER,
+    T1_FIELD_LOCATION_FACE,
+    T1_FIELD_LOCATION_BLEND,
+
+    /* do not remove */
+    T1_FIELD_LOCATION_MAX
+
+  } T1_FieldLocation;
+
+
+  typedef void
+  (*T1_Field_ParseFunc)( FT_Face     face,
+                         FT_Pointer  parser );
+
+
+  /* structure type used to model object fields */
+  typedef struct  T1_FieldRec_
+  {
+    const char*         ident;        /* field identifier               */
+    T1_FieldLocation    location;
+    T1_FieldType        type;         /* type of field                  */
+    T1_Field_ParseFunc  reader;
+    FT_UInt             offset;       /* offset of field in object      */
+    FT_Byte             size;         /* size of field in bytes         */
+    FT_UInt             array_max;    /* maximum number of elements for */
+                                      /* array                          */
+    FT_UInt             count_offset; /* offset of element count for    */
+                                      /* arrays; must not be zero if in */
+                                      /* use -- in other words, a       */
+                                      /* `num_FOO' element must not     */
+                                      /* start the used structure if we */
+                                      /* parse a `FOO' array            */
+    FT_UInt             dict;         /* where we expect it             */
+  } T1_FieldRec;
+
+#define T1_FIELD_DICT_FONTDICT ( 1 << 0 ) /* also FontInfo and FDArray */
+#define T1_FIELD_DICT_PRIVATE  ( 1 << 1 )
+
+
+
+#define T1_NEW_SIMPLE_FIELD( _ident, _type, _fname, _dict ) \
+          {                                                 \
+            _ident, T1CODE, _type,                          \
+            0,                                              \
+            FT_FIELD_OFFSET( _fname ),                      \
+            FT_FIELD_SIZE( _fname ),                        \
+            0, 0,                                           \
+            _dict                                           \
+          },
+
+#define T1_NEW_CALLBACK_FIELD( _ident, _reader, _dict ) \
+          {                                             \
+            _ident, T1CODE, T1_FIELD_TYPE_CALLBACK,     \
+            (T1_Field_ParseFunc)_reader,                \
+            0, 0,                                       \
+            0, 0,                                       \
+            _dict                                       \
+          },
+
+#define T1_NEW_TABLE_FIELD( _ident, _type, _fname, _max, _dict ) \
+          {                                                      \
+            _ident, T1CODE, _type,                               \
+            0,                                                   \
+            FT_FIELD_OFFSET( _fname ),                           \
+            FT_FIELD_SIZE_DELTA( _fname ),                       \
+            _max,                                                \
+            FT_FIELD_OFFSET( num_ ## _fname ),                   \
+            _dict                                                \
+          },
+
+#define T1_NEW_TABLE_FIELD2( _ident, _type, _fname, _max, _dict ) \
+          {                                                       \
+            _ident, T1CODE, _type,                                \
+            0,                                                    \
+            FT_FIELD_OFFSET( _fname ),                            \
+            FT_FIELD_SIZE_DELTA( _fname ),                        \
+            _max, 0,                                              \
+            _dict                                                 \
+          },
+
+
+#define T1_FIELD_BOOL( _ident, _fname, _dict )                             \
+          T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BOOL, _fname, _dict )
+
+#define T1_FIELD_NUM( _ident, _fname, _dict )                                 \
+          T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER, _fname, _dict )
+
+#define T1_FIELD_FIXED( _ident, _fname, _dict )                             \
+          T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED, _fname, _dict )
+
+#define T1_FIELD_FIXED_1000( _ident, _fname, _dict )                     \
+          T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_1000, _fname, \
+                               _dict )
+
+#define T1_FIELD_STRING( _ident, _fname, _dict )                             \
+          T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_STRING, _fname, _dict )
+
+#define T1_FIELD_KEY( _ident, _fname, _dict )                             \
+          T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_KEY, _fname, _dict )
+
+#define T1_FIELD_BBOX( _ident, _fname, _dict )                             \
+          T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BBOX, _fname, _dict )
+
+
+#define T1_FIELD_NUM_TABLE( _ident, _fname, _fmax, _dict )         \
+          T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
+                              _fname, _fmax, _dict )
+
+#define T1_FIELD_FIXED_TABLE( _ident, _fname, _fmax, _dict )     \
+          T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
+                              _fname, _fmax, _dict )
+
+#define T1_FIELD_NUM_TABLE2( _ident, _fname, _fmax, _dict )         \
+          T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
+                               _fname, _fmax, _dict )
+
+#define T1_FIELD_FIXED_TABLE2( _ident, _fname, _fmax, _dict )     \
+          T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
+                               _fname, _fmax, _dict )
+
+#define T1_FIELD_CALLBACK( _ident, _name, _dict )       \
+          T1_NEW_CALLBACK_FIELD( _ident, _name, _dict )
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                            T1 PARSER                          *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef const struct PS_Parser_FuncsRec_*  PS_Parser_Funcs;
+
+  typedef struct  PS_Parser_FuncsRec_
+  {
+    void
+    (*init)( PS_Parser  parser,
+             FT_Byte*   base,
+             FT_Byte*   limit,
+             FT_Memory  memory );
+
+    void
+    (*done)( PS_Parser  parser );
+
+    void
+    (*skip_spaces)( PS_Parser  parser );
+    void
+    (*skip_PS_token)( PS_Parser  parser );
+
+    FT_Long
+    (*to_int)( PS_Parser  parser );
+    FT_Fixed
+    (*to_fixed)( PS_Parser  parser,
+                 FT_Int     power_ten );
+
+    FT_Error
+    (*to_bytes)( PS_Parser  parser,
+                 FT_Byte*   bytes,
+                 FT_Offset  max_bytes,
+                 FT_Long*   pnum_bytes,
+                 FT_Bool    delimiters );
+
+    FT_Int
+    (*to_coord_array)( PS_Parser  parser,
+                       FT_Int     max_coords,
+                       FT_Short*  coords );
+    FT_Int
+    (*to_fixed_array)( PS_Parser  parser,
+                       FT_Int     max_values,
+                       FT_Fixed*  values,
+                       FT_Int     power_ten );
+
+    void
+    (*to_token)( PS_Parser  parser,
+                 T1_Token   token );
+    void
+    (*to_token_array)( PS_Parser  parser,
+                       T1_Token   tokens,
+                       FT_UInt    max_tokens,
+                       FT_Int*    pnum_tokens );
+
+    FT_Error
+    (*load_field)( PS_Parser       parser,
+                   const T1_Field  field,
+                   void**          objects,
+                   FT_UInt         max_objects,
+                   FT_ULong*       pflags );
+
+    FT_Error
+    (*load_field_table)( PS_Parser       parser,
+                         const T1_Field  field,
+                         void**          objects,
+                         FT_UInt         max_objects,
+                         FT_ULong*       pflags );
+
+  } PS_Parser_FuncsRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    PS_ParserRec                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A PS_Parser is an object used to parse a Type 1 font very quickly. */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    cursor :: The current position in the text.                        */
+  /*                                                                       */
+  /*    base   :: Start of the processed text.                             */
+  /*                                                                       */
+  /*    limit  :: End of the processed text.                               */
+  /*                                                                       */
+  /*    error  :: The last error returned.                                 */
+  /*                                                                       */
+  /*    memory :: The object used for memory operations (alloc/realloc).   */
+  /*                                                                       */
+  /*    funcs  :: A table of functions for the parser.                     */
+  /*                                                                       */
+  typedef struct  PS_ParserRec_
+  {
+    FT_Byte*   cursor;
+    FT_Byte*   base;
+    FT_Byte*   limit;
+    FT_Error   error;
+    FT_Memory  memory;
+
+    PS_Parser_FuncsRec  funcs;
+
+  } PS_ParserRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                         T1 BUILDER                            *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  typedef struct T1_BuilderRec_*  T1_Builder;
+
+
+  typedef FT_Error
+  (*T1_Builder_Check_Points_Func)( T1_Builder  builder,
+                                   FT_Int      count );
+
+  typedef void
+  (*T1_Builder_Add_Point_Func)( T1_Builder  builder,
+                                FT_Pos      x,
+                                FT_Pos      y,
+                                FT_Byte     flag );
+
+  typedef FT_Error
+  (*T1_Builder_Add_Point1_Func)( T1_Builder  builder,
+                                 FT_Pos      x,
+                                 FT_Pos      y );
+
+  typedef FT_Error
+  (*T1_Builder_Add_Contour_Func)( T1_Builder  builder );
+
+  typedef FT_Error
+  (*T1_Builder_Start_Point_Func)( T1_Builder  builder,
+                                  FT_Pos      x,
+                                  FT_Pos      y );
+
+  typedef void
+  (*T1_Builder_Close_Contour_Func)( T1_Builder  builder );
+
+
+  typedef const struct T1_Builder_FuncsRec_*  T1_Builder_Funcs;
+
+  typedef struct  T1_Builder_FuncsRec_
+  {
+    void
+    (*init)( T1_Builder    builder,
+             FT_Face       face,
+             FT_Size       size,
+             FT_GlyphSlot  slot,
+             FT_Bool       hinting );
+
+    void
+    (*done)( T1_Builder   builder );
+
+    T1_Builder_Check_Points_Func   check_points;
+    T1_Builder_Add_Point_Func      add_point;
+    T1_Builder_Add_Point1_Func     add_point1;
+    T1_Builder_Add_Contour_Func    add_contour;
+    T1_Builder_Start_Point_Func    start_point;
+    T1_Builder_Close_Contour_Func  close_contour;
+
+  } T1_Builder_FuncsRec;
+
+
+  /* an enumeration type to handle charstring parsing states */
+  typedef enum  T1_ParseState_
+  {
+    T1_Parse_Start,
+    T1_Parse_Have_Width,
+    T1_Parse_Have_Moveto,
+    T1_Parse_Have_Path
+
+  } T1_ParseState;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Structure>                                                           */
+  /*    T1_BuilderRec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*     A structure used during glyph loading to store its outline.       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    memory       :: The current memory object.                         */
+  /*                                                                       */
+  /*    face         :: The current face object.                           */
+  /*                                                                       */
+  /*    glyph        :: The current glyph slot.                            */
+  /*                                                                       */
+  /*    loader       :: XXX                                                */
+  /*                                                                       */
+  /*    base         :: The base glyph outline.                            */
+  /*                                                                       */
+  /*    current      :: The current glyph outline.                         */
+  /*                                                                       */
+  /*    max_points   :: maximum points in builder outline                  */
+  /*                                                                       */
+  /*    max_contours :: Maximum number of contours in builder outline.     */
+  /*                                                                       */
+  /*    pos_x        :: The horizontal translation (if composite glyph).   */
+  /*                                                                       */
+  /*    pos_y        :: The vertical translation (if composite glyph).     */
+  /*                                                                       */
+  /*    left_bearing :: The left side bearing point.                       */
+  /*                                                                       */
+  /*    advance      :: The horizontal advance vector.                     */
+  /*                                                                       */
+  /*    bbox         :: Unused.                                            */
+  /*                                                                       */
+  /*    parse_state  :: An enumeration which controls the charstring       */
+  /*                    parsing state.                                     */
+  /*                                                                       */
+  /*    load_points  :: If this flag is not set, no points are loaded.     */
+  /*                                                                       */
+  /*    no_recurse   :: Set but not used.                                  */
+  /*                                                                       */
+  /*    metrics_only :: A boolean indicating that we only want to compute  */
+  /*                    the metrics of a given glyph, not load all of its  */
+  /*                    points.                                            */
+  /*                                                                       */
+  /*    funcs        :: An array of function pointers for the builder.     */
+  /*                                                                       */
+  typedef struct  T1_BuilderRec_
+  {
+    FT_Memory       memory;
+    FT_Face         face;
+    FT_GlyphSlot    glyph;
+    FT_GlyphLoader  loader;
+    FT_Outline*     base;
+    FT_Outline*     current;
+
+    FT_Pos          pos_x;
+    FT_Pos          pos_y;
+
+    FT_Vector       left_bearing;
+    FT_Vector       advance;
+
+    FT_BBox         bbox;          /* bounding box */
+    T1_ParseState   parse_state;
+    FT_Bool         load_points;
+    FT_Bool         no_recurse;
+
+    FT_Bool         metrics_only;
+
+    void*           hints_funcs;    /* hinter-specific */
+    void*           hints_globals;  /* hinter-specific */
+
+    T1_Builder_FuncsRec  funcs;
+
+  } T1_BuilderRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                         T1 DECODER                            *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+#if 0
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine   */
+  /* calls during glyph loading.                                           */
+  /*                                                                       */
+#define T1_MAX_SUBRS_CALLS  8
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity.  A     */
+  /* minimum of 16 is required.                                            */
+  /*                                                                       */
+#define T1_MAX_CHARSTRINGS_OPERANDS  32
+
+#endif /* 0 */
+
+
+  typedef struct  T1_Decoder_ZoneRec_
+  {
+    FT_Byte*  cursor;
+    FT_Byte*  base;
+    FT_Byte*  limit;
+
+  } T1_Decoder_ZoneRec, *T1_Decoder_Zone;
+
+
+  typedef struct T1_DecoderRec_*              T1_Decoder;
+  typedef const struct T1_Decoder_FuncsRec_*  T1_Decoder_Funcs;
+
+
+  typedef FT_Error
+  (*T1_Decoder_Callback)( T1_Decoder  decoder,
+                          FT_UInt     glyph_index );
+
+
+  typedef struct  T1_Decoder_FuncsRec_
+  {
+    FT_Error
+    (*init)( T1_Decoder           decoder,
+             FT_Face              face,
+             FT_Size              size,
+             FT_GlyphSlot         slot,
+             FT_Byte**            glyph_names,
+             PS_Blend             blend,
+             FT_Bool              hinting,
+             FT_Render_Mode       hint_mode,
+             T1_Decoder_Callback  callback );
+
+    void
+    (*done)( T1_Decoder  decoder );
+
+    FT_Error
+    (*parse_charstrings)( T1_Decoder  decoder,
+                          FT_Byte*    base,
+                          FT_UInt     len );
+
+  } T1_Decoder_FuncsRec;
+
+
+  typedef struct  T1_DecoderRec_
+  {
+    T1_BuilderRec        builder;
+
+    FT_Long              stack[T1_MAX_CHARSTRINGS_OPERANDS];
+    FT_Long*             top;
+
+    T1_Decoder_ZoneRec   zones[T1_MAX_SUBRS_CALLS + 1];
+    T1_Decoder_Zone      zone;
+
+    FT_Service_PsCMaps   psnames;      /* for seac */
+    FT_UInt              num_glyphs;
+    FT_Byte**            glyph_names;
+
+    FT_Int               lenIV;        /* internal for sub routine calls */
+    FT_UInt              num_subrs;
+    FT_Byte**            subrs;
+    FT_PtrDist*          subrs_len;    /* array of subrs length (optional) */
+
+    FT_Matrix            font_matrix;
+    FT_Vector            font_offset;
+
+    FT_Int               flex_state;
+    FT_Int               num_flex_vectors;
+    FT_Vector            flex_vectors[7];
+
+    PS_Blend             blend;       /* for multiple master support */
+
+    FT_Render_Mode       hint_mode;
+
+    T1_Decoder_Callback  parse_callback;
+    T1_Decoder_FuncsRec  funcs;
+
+    FT_Long*             buildchar;
+    FT_UInt              len_buildchar;
+
+    FT_Bool              seac;
+
+  } T1_DecoderRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                            AFM PARSER                         *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef struct AFM_ParserRec_*  AFM_Parser;
+
+  typedef struct  AFM_Parser_FuncsRec_
+  {
+    FT_Error
+    (*init)( AFM_Parser  parser,
+             FT_Memory   memory,
+             FT_Byte*    base,
+             FT_Byte*    limit );
+
+    void
+    (*done)( AFM_Parser  parser );
+
+    FT_Error
+    (*parse)( AFM_Parser  parser );
+
+  } AFM_Parser_FuncsRec;
+
+
+  typedef struct AFM_StreamRec_*  AFM_Stream;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    AFM_ParserRec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An AFM_Parser is a parser for the AFM files.                       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    memory    :: The object used for memory operations (alloc and      */
+  /*                 realloc).                                             */
+  /*                                                                       */
+  /*    stream    :: This is an opaque object.                             */
+  /*                                                                       */
+  /*    FontInfo  :: The result will be stored here.                       */
+  /*                                                                       */
+  /*    get_index :: A user provided function to get a glyph index by its  */
+  /*                 name.                                                 */
+  /*                                                                       */
+  typedef struct  AFM_ParserRec_
+  {
+    FT_Memory     memory;
+    AFM_Stream    stream;
+
+    AFM_FontInfo  FontInfo;
+
+    FT_Int
+    (*get_index)( const char*  name,
+                  FT_Offset    len,
+                  void*        user_data );
+
+    void*         user_data;
+
+  } AFM_ParserRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                     TYPE1 CHARMAPS                            *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef const struct T1_CMap_ClassesRec_*  T1_CMap_Classes;
+
+  typedef struct T1_CMap_ClassesRec_
+  {
+    FT_CMap_Class  standard;
+    FT_CMap_Class  expert;
+    FT_CMap_Class  custom;
+    FT_CMap_Class  unicode;
+
+  } T1_CMap_ClassesRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                        PSAux Module Interface                 *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef struct  PSAux_ServiceRec_
+  {
+    /* don't use `PS_Table_Funcs' and friends to avoid compiler warnings */
+    const PS_Table_FuncsRec*    ps_table_funcs;
+    const PS_Parser_FuncsRec*   ps_parser_funcs;
+    const T1_Builder_FuncsRec*  t1_builder_funcs;
+    const T1_Decoder_FuncsRec*  t1_decoder_funcs;
+
+    void
+    (*t1_decrypt)( FT_Byte*   buffer,
+                   FT_Offset  length,
+                   FT_UShort  seed );
+
+    T1_CMap_Classes  t1_cmap_classes;
+
+    /* fields after this comment line were added after version 2.1.10 */
+    const AFM_Parser_FuncsRec*  afm_parser_funcs;
+
+  } PSAux_ServiceRec, *PSAux_Service;
+
+  /* backwards-compatible type definition */
+  typedef PSAux_ServiceRec   PSAux_Interface;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                 Some convenience functions                    *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+#define IS_PS_NEWLINE( ch ) \
+  ( (ch) == '\r' ||         \
+    (ch) == '\n' )
+
+#define IS_PS_SPACE( ch )  \
+  ( (ch) == ' '         || \
+    IS_PS_NEWLINE( ch ) || \
+    (ch) == '\t'        || \
+    (ch) == '\f'        || \
+    (ch) == '\0' )
+
+#define IS_PS_SPECIAL( ch )       \
+  ( (ch) == '/'                || \
+    (ch) == '(' || (ch) == ')' || \
+    (ch) == '<' || (ch) == '>' || \
+    (ch) == '[' || (ch) == ']' || \
+    (ch) == '{' || (ch) == '}' || \
+    (ch) == '%'                )
+
+#define IS_PS_DELIM( ch )  \
+  ( IS_PS_SPACE( ch )   || \
+    IS_PS_SPECIAL( ch ) )
+
+#define IS_PS_DIGIT( ch )        \
+  ( (ch) >= '0' && (ch) <= '9' )
+
+#define IS_PS_XDIGIT( ch )            \
+  ( IS_PS_DIGIT( ch )              || \
+    ( (ch) >= 'A' && (ch) <= 'F' ) || \
+    ( (ch) >= 'a' && (ch) <= 'f' ) )
+
+#define IS_PS_BASE85( ch )       \
+  ( (ch) >= '!' && (ch) <= 'u' )
+
+#define IS_PS_TOKEN( cur, limit, token )                                \
+  ( (char)(cur)[0] == (token)[0]                                     && \
+    ( (cur) + sizeof ( (token) ) == (limit) ||                          \
+      ( (cur) + sizeof( (token) ) < (limit)          &&                 \
+        IS_PS_DELIM( (cur)[sizeof ( (token) ) - 1] ) ) )             && \
+    ft_strncmp( (char*)(cur), (token), sizeof ( (token) ) - 1 ) == 0 )
+
+
+FT_END_HEADER
+
+#endif /* __PSAUX_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/pshints.h b/core/include/thirdparties/freetype/freetype/internal/pshints.h
new file mode 100644
index 0000000..f9b5940
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/pshints.h
@@ -0,0 +1,722 @@
+/***************************************************************************/
+/*                                                                         */
+/*  pshints.h                                                              */
+/*                                                                         */
+/*    Interface to Postscript-specific (Type 1 and Type 2) hints           */
+/*    recorders (specification only).  These are used to support native    */
+/*    T1/T2 hints in the `type1', `cid', and `cff' font drivers.           */
+/*                                                                         */
+/*  Copyright 2001-2003, 2005-2007, 2009, 2012 by                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __PSHINTS_H__
+#define __PSHINTS_H__
+
+
+#include "../../ft2build.h"
+#include "../freetype.h"
+#include "../t1tables.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****               INTERNAL REPRESENTATION OF GLOBALS              *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef struct PSH_GlobalsRec_*  PSH_Globals;
+
+  typedef FT_Error
+  (*PSH_Globals_NewFunc)( FT_Memory     memory,
+                          T1_Private*   private_dict,
+                          PSH_Globals*  aglobals );
+
+  typedef FT_Error
+  (*PSH_Globals_SetScaleFunc)( PSH_Globals  globals,
+                               FT_Fixed     x_scale,
+                               FT_Fixed     y_scale,
+                               FT_Fixed     x_delta,
+                               FT_Fixed     y_delta );
+
+  typedef void
+  (*PSH_Globals_DestroyFunc)( PSH_Globals  globals );
+
+
+  typedef struct  PSH_Globals_FuncsRec_
+  {
+    PSH_Globals_NewFunc       create;
+    PSH_Globals_SetScaleFunc  set_scale;
+    PSH_Globals_DestroyFunc   destroy;
+
+  } PSH_Globals_FuncsRec, *PSH_Globals_Funcs;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                  PUBLIC TYPE 1 HINTS RECORDER                 *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /*************************************************************************
+   *
+   * @type:
+   *   T1_Hints
+   *
+   * @description:
+   *   This is a handle to an opaque structure used to record glyph hints
+   *   from a Type 1 character glyph character string.
+   *
+   *   The methods used to operate on this object are defined by the
+   *   @T1_Hints_FuncsRec structure.  Recording glyph hints is normally
+   *   achieved through the following scheme:
+   *
+   *   - Open a new hint recording session by calling the `open' method.
+   *     This rewinds the recorder and prepare it for new input.
+   *
+   *   - For each hint found in the glyph charstring, call the corresponding
+   *     method (`stem', `stem3', or `reset').  Note that these functions do
+   *     not return an error code.
+   *
+   *   - Close the recording session by calling the `close' method.  It
+   *     returns an error code if the hints were invalid or something
+   *     strange happened (e.g., memory shortage).
+   *
+   *   The hints accumulated in the object can later be used by the
+   *   PostScript hinter.
+   *
+   */
+  typedef struct T1_HintsRec_*  T1_Hints;
+
+
+  /*************************************************************************
+   *
+   * @type:
+   *   T1_Hints_Funcs
+   *
+   * @description:
+   *   A pointer to the @T1_Hints_FuncsRec structure that defines the API of
+   *   a given @T1_Hints object.
+   *
+   */
+  typedef const struct T1_Hints_FuncsRec_*  T1_Hints_Funcs;
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T1_Hints_OpenFunc
+   *
+   * @description:
+   *   A method of the @T1_Hints class used to prepare it for a new Type 1
+   *   hints recording session.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 1 hints recorder.
+   *
+   * @note:
+   *   You should always call the @T1_Hints_CloseFunc method in order to
+   *   close an opened recording session.
+   *
+   */
+  typedef void
+  (*T1_Hints_OpenFunc)( T1_Hints  hints );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T1_Hints_SetStemFunc
+   *
+   * @description:
+   *   A method of the @T1_Hints class used to record a new horizontal or
+   *   vertical stem.  This corresponds to the Type 1 `hstem' and `vstem'
+   *   operators.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 1 hints recorder.
+   *
+   *   dimension ::
+   *     0 for horizontal stems (hstem), 1 for vertical ones (vstem).
+   *
+   *   coords ::
+   *     Array of 2 coordinates in 16.16 format, used as (position,length)
+   *     stem descriptor.
+   *
+   * @note:
+   *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
+   *   horizontal coordinates (x) for vertical stems (dim=1).
+   *
+   *   `coords[0]' is the absolute stem position (lowest coordinate);
+   *   `coords[1]' is the length.
+   *
+   *   The length can be negative, in which case it must be either -20 or
+   *   -21.  It is interpreted as a `ghost' stem, according to the Type 1
+   *   specification.
+   *
+   *   If the length is -21 (corresponding to a bottom ghost stem), then
+   *   the real stem position is `coords[0]+coords[1]'.
+   *
+   */
+  typedef void
+  (*T1_Hints_SetStemFunc)( T1_Hints   hints,
+                           FT_UInt    dimension,
+                           FT_Fixed*  coords );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T1_Hints_SetStem3Func
+   *
+   * @description:
+   *   A method of the @T1_Hints class used to record three
+   *   counter-controlled horizontal or vertical stems at once.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 1 hints recorder.
+   *
+   *   dimension ::
+   *     0 for horizontal stems, 1 for vertical ones.
+   *
+   *   coords ::
+   *     An array of 6 values in 16.16 format, holding 3 (position,length)
+   *     pairs for the counter-controlled stems.
+   *
+   * @note:
+   *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
+   *   horizontal coordinates (x) for vertical stems (dim=1).
+   *
+   *   The lengths cannot be negative (ghost stems are never
+   *   counter-controlled).
+   *
+   */
+  typedef void
+  (*T1_Hints_SetStem3Func)( T1_Hints   hints,
+                            FT_UInt    dimension,
+                            FT_Fixed*  coords );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T1_Hints_ResetFunc
+   *
+   * @description:
+   *   A method of the @T1_Hints class used to reset the stems hints in a
+   *   recording session.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 1 hints recorder.
+   *
+   *   end_point ::
+   *     The index of the last point in the input glyph in which the
+   *     previously defined hints apply.
+   *
+   */
+  typedef void
+  (*T1_Hints_ResetFunc)( T1_Hints  hints,
+                         FT_UInt   end_point );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T1_Hints_CloseFunc
+   *
+   * @description:
+   *   A method of the @T1_Hints class used to close a hint recording
+   *   session.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 1 hints recorder.
+   *
+   *   end_point ::
+   *     The index of the last point in the input glyph.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   *
+   * @note:
+   *   The error code is set to indicate that an error occurred during the
+   *   recording session.
+   *
+   */
+  typedef FT_Error
+  (*T1_Hints_CloseFunc)( T1_Hints  hints,
+                         FT_UInt   end_point );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T1_Hints_ApplyFunc
+   *
+   * @description:
+   *   A method of the @T1_Hints class used to apply hints to the
+   *   corresponding glyph outline.  Must be called once all hints have been
+   *   recorded.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 1 hints recorder.
+   *
+   *   outline ::
+   *     A pointer to the target outline descriptor.
+   *
+   *   globals ::
+   *     The hinter globals for this font.
+   *
+   *   hint_mode ::
+   *     Hinting information.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   *
+   * @note:
+   *   On input, all points within the outline are in font coordinates. On
+   *   output, they are in 1/64th of pixels.
+   *
+   *   The scaling transformation is taken from the `globals' object which
+   *   must correspond to the same font as the glyph.
+   *
+   */
+  typedef FT_Error
+  (*T1_Hints_ApplyFunc)( T1_Hints        hints,
+                         FT_Outline*     outline,
+                         PSH_Globals     globals,
+                         FT_Render_Mode  hint_mode );
+
+
+  /*************************************************************************
+   *
+   * @struct:
+   *   T1_Hints_FuncsRec
+   *
+   * @description:
+   *   The structure used to provide the API to @T1_Hints objects.
+   *
+   * @fields:
+   *   hints ::
+   *     A handle to the T1 Hints recorder.
+   *
+   *   open ::
+   *     The function to open a recording session.
+   *
+   *   close ::
+   *     The function to close a recording session.
+   *
+   *   stem ::
+   *     The function to set a simple stem.
+   *
+   *   stem3 ::
+   *     The function to set counter-controlled stems.
+   *
+   *   reset ::
+   *     The function to reset stem hints.
+   *
+   *   apply ::
+   *     The function to apply the hints to the corresponding glyph outline.
+   *
+   */
+  typedef struct  T1_Hints_FuncsRec_
+  {
+    T1_Hints               hints;
+    T1_Hints_OpenFunc      open;
+    T1_Hints_CloseFunc     close;
+    T1_Hints_SetStemFunc   stem;
+    T1_Hints_SetStem3Func  stem3;
+    T1_Hints_ResetFunc     reset;
+    T1_Hints_ApplyFunc     apply;
+
+  } T1_Hints_FuncsRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                  PUBLIC TYPE 2 HINTS RECORDER                 *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /*************************************************************************
+   *
+   * @type:
+   *   T2_Hints
+   *
+   * @description:
+   *   This is a handle to an opaque structure used to record glyph hints
+   *   from a Type 2 character glyph character string.
+   *
+   *   The methods used to operate on this object are defined by the
+   *   @T2_Hints_FuncsRec structure.  Recording glyph hints is normally
+   *   achieved through the following scheme:
+   *
+   *   - Open a new hint recording session by calling the `open' method.
+   *     This rewinds the recorder and prepare it for new input.
+   *
+   *   - For each hint found in the glyph charstring, call the corresponding
+   *     method (`stems', `hintmask', `counters').  Note that these
+   *     functions do not return an error code.
+   *
+   *   - Close the recording session by calling the `close' method.  It
+   *     returns an error code if the hints were invalid or something
+   *     strange happened (e.g., memory shortage).
+   *
+   *   The hints accumulated in the object can later be used by the
+   *   Postscript hinter.
+   *
+   */
+  typedef struct T2_HintsRec_*  T2_Hints;
+
+
+  /*************************************************************************
+   *
+   * @type:
+   *   T2_Hints_Funcs
+   *
+   * @description:
+   *   A pointer to the @T2_Hints_FuncsRec structure that defines the API of
+   *   a given @T2_Hints object.
+   *
+   */
+  typedef const struct T2_Hints_FuncsRec_*  T2_Hints_Funcs;
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T2_Hints_OpenFunc
+   *
+   * @description:
+   *   A method of the @T2_Hints class used to prepare it for a new Type 2
+   *   hints recording session.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 2 hints recorder.
+   *
+   * @note:
+   *   You should always call the @T2_Hints_CloseFunc method in order to
+   *   close an opened recording session.
+   *
+   */
+  typedef void
+  (*T2_Hints_OpenFunc)( T2_Hints  hints );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T2_Hints_StemsFunc
+   *
+   * @description:
+   *   A method of the @T2_Hints class used to set the table of stems in
+   *   either the vertical or horizontal dimension.  Equivalent to the
+   *   `hstem', `vstem', `hstemhm', and `vstemhm' Type 2 operators.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 2 hints recorder.
+   *
+   *   dimension ::
+   *     0 for horizontal stems (hstem), 1 for vertical ones (vstem).
+   *
+   *   count ::
+   *     The number of stems.
+   *
+   *   coords ::
+   *     An array of `count' (position,length) pairs in 16.16 format.
+   *
+   * @note:
+   *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
+   *   horizontal coordinates (x) for vertical stems (dim=1).
+   *
+   *   There are `2*count' elements in the `coords' array.  Each even
+   *   element is an absolute position in font units, each odd element is a
+   *   length in font units.
+   *
+   *   A length can be negative, in which case it must be either -20 or
+   *   -21.  It is interpreted as a `ghost' stem, according to the Type 1
+   *   specification.
+   *
+   */
+  typedef void
+  (*T2_Hints_StemsFunc)( T2_Hints   hints,
+                         FT_UInt    dimension,
+                         FT_UInt    count,
+                         FT_Fixed*  coordinates );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T2_Hints_MaskFunc
+   *
+   * @description:
+   *   A method of the @T2_Hints class used to set a given hintmask (this
+   *   corresponds to the `hintmask' Type 2 operator).
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 2 hints recorder.
+   *
+   *   end_point ::
+   *     The glyph index of the last point to which the previously defined
+   *     or activated hints apply.
+   *
+   *   bit_count ::
+   *     The number of bits in the hint mask.
+   *
+   *   bytes ::
+   *     An array of bytes modelling the hint mask.
+   *
+   * @note:
+   *   If the hintmask starts the charstring (before any glyph point
+   *   definition), the value of `end_point' should be 0.
+   *
+   *   `bit_count' is the number of meaningful bits in the `bytes' array; it
+   *   must be equal to the total number of hints defined so far (i.e.,
+   *   horizontal+verticals).
+   *
+   *   The `bytes' array can come directly from the Type 2 charstring and
+   *   respects the same format.
+   *
+   */
+  typedef void
+  (*T2_Hints_MaskFunc)( T2_Hints        hints,
+                        FT_UInt         end_point,
+                        FT_UInt         bit_count,
+                        const FT_Byte*  bytes );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T2_Hints_CounterFunc
+   *
+   * @description:
+   *   A method of the @T2_Hints class used to set a given counter mask
+   *   (this corresponds to the `hintmask' Type 2 operator).
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 2 hints recorder.
+   *
+   *   end_point ::
+   *     A glyph index of the last point to which the previously defined or
+   *     active hints apply.
+   *
+   *   bit_count ::
+   *     The number of bits in the hint mask.
+   *
+   *   bytes ::
+   *     An array of bytes modelling the hint mask.
+   *
+   * @note:
+   *   If the hintmask starts the charstring (before any glyph point
+   *   definition), the value of `end_point' should be 0.
+   *
+   *   `bit_count' is the number of meaningful bits in the `bytes' array; it
+   *   must be equal to the total number of hints defined so far (i.e.,
+   *   horizontal+verticals).
+   *
+   *    The `bytes' array can come directly from the Type 2 charstring and
+   *    respects the same format.
+   *
+   */
+  typedef void
+  (*T2_Hints_CounterFunc)( T2_Hints        hints,
+                           FT_UInt         bit_count,
+                           const FT_Byte*  bytes );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T2_Hints_CloseFunc
+   *
+   * @description:
+   *   A method of the @T2_Hints class used to close a hint recording
+   *   session.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 2 hints recorder.
+   *
+   *   end_point ::
+   *     The index of the last point in the input glyph.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   *
+   * @note:
+   *   The error code is set to indicate that an error occurred during the
+   *   recording session.
+   *
+   */
+  typedef FT_Error
+  (*T2_Hints_CloseFunc)( T2_Hints  hints,
+                         FT_UInt   end_point );
+
+
+  /*************************************************************************
+   *
+   * @functype:
+   *   T2_Hints_ApplyFunc
+   *
+   * @description:
+   *   A method of the @T2_Hints class used to apply hints to the
+   *   corresponding glyph outline.  Must be called after the `close'
+   *   method.
+   *
+   * @input:
+   *   hints ::
+   *     A handle to the Type 2 hints recorder.
+   *
+   *   outline ::
+   *     A pointer to the target outline descriptor.
+   *
+   *   globals ::
+   *     The hinter globals for this font.
+   *
+   *   hint_mode ::
+   *     Hinting information.
+   *
+   * @return:
+   *   FreeType error code.  0 means success.
+   *
+   * @note:
+   *   On input, all points within the outline are in font coordinates. On
+   *   output, they are in 1/64th of pixels.
+   *
+   *   The scaling transformation is taken from the `globals' object which
+   *   must correspond to the same font than the glyph.
+   *
+   */
+  typedef FT_Error
+  (*T2_Hints_ApplyFunc)( T2_Hints        hints,
+                         FT_Outline*     outline,
+                         PSH_Globals     globals,
+                         FT_Render_Mode  hint_mode );
+
+
+  /*************************************************************************
+   *
+   * @struct:
+   *   T2_Hints_FuncsRec
+   *
+   * @description:
+   *   The structure used to provide the API to @T2_Hints objects.
+   *
+   * @fields:
+   *   hints ::
+   *     A handle to the T2 hints recorder object.
+   *
+   *   open ::
+   *     The function to open a recording session.
+   *
+   *   close ::
+   *     The function to close a recording session.
+   *
+   *   stems ::
+   *     The function to set the dimension's stems table.
+   *
+   *   hintmask ::
+   *     The function to set hint masks.
+   *
+   *   counter ::
+   *     The function to set counter masks.
+   *
+   *   apply ::
+   *     The function to apply the hints on the corresponding glyph outline.
+   *
+   */
+  typedef struct  T2_Hints_FuncsRec_
+  {
+    T2_Hints              hints;
+    T2_Hints_OpenFunc     open;
+    T2_Hints_CloseFunc    close;
+    T2_Hints_StemsFunc    stems;
+    T2_Hints_MaskFunc     hintmask;
+    T2_Hints_CounterFunc  counter;
+    T2_Hints_ApplyFunc    apply;
+
+  } T2_Hints_FuncsRec;
+
+
+  /* */
+
+
+  typedef struct  PSHinter_Interface_
+  {
+    PSH_Globals_Funcs  (*get_globals_funcs)( FT_Module  module );
+    T1_Hints_Funcs     (*get_t1_funcs)     ( FT_Module  module );
+    T2_Hints_Funcs     (*get_t2_funcs)     ( FT_Module  module );
+
+  } PSHinter_Interface;
+
+  typedef PSHinter_Interface*  PSHinter_Service;
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_PSHINTER_INTERFACE(        \
+          class_,                            \
+          get_globals_funcs_,                \
+          get_t1_funcs_,                     \
+          get_t2_funcs_ )                    \
+  static const PSHinter_Interface  class_ =  \
+  {                                          \
+    get_globals_funcs_,                      \
+    get_t1_funcs_,                           \
+    get_t2_funcs_                            \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_PSHINTER_INTERFACE(                      \
+          class_,                                          \
+          get_globals_funcs_,                              \
+          get_t1_funcs_,                                   \
+          get_t2_funcs_ )                                  \
+  void                                                     \
+  FT_Init_Class_ ## class_( FT_Library           library,  \
+                            PSHinter_Interface*  clazz )   \
+  {                                                        \
+    FT_UNUSED( library );                                  \
+                                                           \
+    clazz->get_globals_funcs = get_globals_funcs_;         \
+    clazz->get_t1_funcs      = get_t1_funcs_;              \
+    clazz->get_t2_funcs      = get_t2_funcs_;              \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+FT_END_HEADER
+
+#endif /* __PSHINTS_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svbdf.h b/core/include/thirdparties/freetype/freetype/internal/services/svbdf.h
new file mode 100644
index 0000000..508bd15
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svbdf.h
@@ -0,0 +1,82 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svbdf.h                                                                */
+/*                                                                         */
+/*    The FreeType BDF services (specification).                           */
+/*                                                                         */
+/*  Copyright 2003, 2009, 2012 by                                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVBDF_H__
+#define __SVBDF_H__
+
+#include "../../ftbdf.h"
+#include "../ftserv.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_BDF  "bdf"
+
+  typedef FT_Error
+  (*FT_BDF_GetCharsetIdFunc)( FT_Face       face,
+                              const char*  *acharset_encoding,
+                              const char*  *acharset_registry );
+
+  typedef FT_Error
+  (*FT_BDF_GetPropertyFunc)( FT_Face           face,
+                             const char*       prop_name,
+                             BDF_PropertyRec  *aproperty );
+
+
+  FT_DEFINE_SERVICE( BDF )
+  {
+    FT_BDF_GetCharsetIdFunc  get_charset_id;
+    FT_BDF_GetPropertyFunc   get_property;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_BDFRec( class_,                                \
+                                  get_charset_id_,                       \
+                                  get_property_ )                        \
+  static const FT_Service_BDFRec  class_ =                               \
+  {                                                                      \
+    get_charset_id_, get_property_                                       \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_BDFRec( class_,                                \
+                                  get_charset_id_,                       \
+                                  get_property_ )                        \
+  void                                                                   \
+  FT_Init_Class_ ## class_( FT_Service_BDFRec*  clazz )                  \
+  {                                                                      \
+    clazz->get_charset_id = get_charset_id_;                             \
+    clazz->get_property   = get_property_;                               \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVBDF_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svcid.h b/core/include/thirdparties/freetype/freetype/internal/services/svcid.h
new file mode 100644
index 0000000..fe33c74
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svcid.h
@@ -0,0 +1,89 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svcid.h                                                                */
+/*                                                                         */
+/*    The FreeType CID font services (specification).                      */
+/*                                                                         */
+/*  Copyright 2007, 2009, 2012 by Derek Clegg, Michael Toftdal.            */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVCID_H__
+#define __SVCID_H__
+
+#include "../ftserv.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_CID  "CID"
+
+  typedef FT_Error
+  (*FT_CID_GetRegistryOrderingSupplementFunc)( FT_Face       face,
+                                               const char*  *registry,
+                                               const char*  *ordering,
+                                               FT_Int       *supplement );
+  typedef FT_Error
+  (*FT_CID_GetIsInternallyCIDKeyedFunc)( FT_Face   face,
+                                         FT_Bool  *is_cid );
+  typedef FT_Error
+  (*FT_CID_GetCIDFromGlyphIndexFunc)( FT_Face   face,
+                                      FT_UInt   glyph_index,
+                                      FT_UInt  *cid );
+
+  FT_DEFINE_SERVICE( CID )
+  {
+    FT_CID_GetRegistryOrderingSupplementFunc  get_ros;
+    FT_CID_GetIsInternallyCIDKeyedFunc        get_is_cid;
+    FT_CID_GetCIDFromGlyphIndexFunc           get_cid_from_glyph_index;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_CIDREC( class_,                                   \
+                                  get_ros_,                                 \
+                                  get_is_cid_,                              \
+                                  get_cid_from_glyph_index_ )               \
+  static const FT_Service_CIDRec class_ =                                   \
+  {                                                                         \
+    get_ros_, get_is_cid_, get_cid_from_glyph_index_                        \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_CIDREC( class_,                                   \
+                                  get_ros_,                                 \
+                                  get_is_cid_,                              \
+                                  get_cid_from_glyph_index_ )               \
+  void                                                                      \
+  FT_Init_Class_ ## class_( FT_Library          library,                    \
+                            FT_Service_CIDRec*  clazz )                     \
+  {                                                                         \
+    FT_UNUSED( library );                                                   \
+                                                                            \
+    clazz->get_ros                  = get_ros_;                             \
+    clazz->get_is_cid               = get_is_cid_;                          \
+    clazz->get_cid_from_glyph_index = get_cid_from_glyph_index_;            \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVCID_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svgldict.h b/core/include/thirdparties/freetype/freetype/internal/services/svgldict.h
new file mode 100644
index 0000000..9956f74
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svgldict.h
@@ -0,0 +1,88 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svgldict.h                                                             */
+/*                                                                         */
+/*    The FreeType glyph dictionary services (specification).              */
+/*                                                                         */
+/*  Copyright 2003, 2009, 2012 by                                          */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVGLDICT_H__
+#define __SVGLDICT_H__
+
+#include "../ftserv.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*
+   *  A service used to retrieve glyph names, as well as to find the
+   *  index of a given glyph name in a font.
+   *
+   */
+
+#define FT_SERVICE_ID_GLYPH_DICT  "glyph-dict"
+
+
+  typedef FT_Error
+  (*FT_GlyphDict_GetNameFunc)( FT_Face     face,
+                               FT_UInt     glyph_index,
+                               FT_Pointer  buffer,
+                               FT_UInt     buffer_max );
+
+  typedef FT_UInt
+  (*FT_GlyphDict_NameIndexFunc)( FT_Face     face,
+                                 FT_String*  glyph_name );
+
+
+  FT_DEFINE_SERVICE( GlyphDict )
+  {
+    FT_GlyphDict_GetNameFunc    get_name;
+    FT_GlyphDict_NameIndexFunc  name_index;  /* optional */
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_,                        \
+                                        get_name_,                     \
+                                        name_index_)                   \
+  static const FT_Service_GlyphDictRec  class_ =                       \
+  {                                                                    \
+    get_name_, name_index_                                             \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_GLYPHDICTREC( class_,                        \
+                                        get_name_,                     \
+                                        name_index_)                   \
+  void                                                                 \
+  FT_Init_Class_ ## class_( FT_Library                library,         \
+                            FT_Service_GlyphDictRec*  clazz )          \
+  {                                                                    \
+    FT_UNUSED( library );                                              \
+                                                                       \
+    clazz->get_name   = get_name_;                                     \
+    clazz->name_index = name_index_;                                   \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVGLDICT_H__ */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svgxval.h b/core/include/thirdparties/freetype/freetype/internal/services/svgxval.h
new file mode 100644
index 0000000..277b6a9
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svgxval.h
@@ -0,0 +1,72 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svgxval.h                                                              */
+/*                                                                         */
+/*    FreeType API for validating TrueTypeGX/AAT tables (specification).   */
+/*                                                                         */
+/*  Copyright 2004, 2005 by                                                */
+/*  Masatake YAMATO, Red Hat K.K.,                                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+/***************************************************************************/
+/*                                                                         */
+/* gxvalid is derived from both gxlayout module and otvalid module.        */
+/* Development of gxlayout is supported by the Information-technology      */
+/* Promotion Agency(IPA), Japan.                                           */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVGXVAL_H__
+#define __SVGXVAL_H__
+
+#include "../../ftgxval.h"
+#include "../ftvalid.h"
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_GX_VALIDATE           "truetypegx-validate"
+#define FT_SERVICE_ID_CLASSICKERN_VALIDATE  "classickern-validate"
+
+  typedef FT_Error
+  (*gxv_validate_func)( FT_Face   face,
+                        FT_UInt   gx_flags,
+                        FT_Bytes  tables[FT_VALIDATE_GX_LENGTH],
+                        FT_UInt   table_length );
+
+
+  typedef FT_Error
+  (*ckern_validate_func)( FT_Face   face,
+                          FT_UInt   ckern_flags,
+                          FT_Bytes  *ckern_table );
+
+
+  FT_DEFINE_SERVICE( GXvalidate )
+  {
+    gxv_validate_func  validate;
+  };
+
+  FT_DEFINE_SERVICE( CKERNvalidate )
+  {
+    ckern_validate_func  validate;
+  };
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVGXVAL_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svkern.h b/core/include/thirdparties/freetype/freetype/internal/services/svkern.h
new file mode 100644
index 0000000..da03fef
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svkern.h
@@ -0,0 +1,51 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svkern.h                                                               */
+/*                                                                         */
+/*    The FreeType Kerning service (specification).                        */
+/*                                                                         */
+/*  Copyright 2006 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVKERN_H__
+#define __SVKERN_H__
+
+#include "../ftserv.h"
+#include "../../tttables.h"
+
+
+FT_BEGIN_HEADER
+
+#define FT_SERVICE_ID_KERNING  "kerning"
+
+
+  typedef FT_Error
+  (*FT_Kerning_TrackGetFunc)( FT_Face    face,
+                              FT_Fixed   point_size,
+                              FT_Int     degree,
+                              FT_Fixed*  akerning );
+
+  FT_DEFINE_SERVICE( Kerning )
+  {
+    FT_Kerning_TrackGetFunc  get_track;
+  };
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVKERN_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svmm.h b/core/include/thirdparties/freetype/freetype/internal/services/svmm.h
new file mode 100644
index 0000000..100ff87
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svmm.h
@@ -0,0 +1,113 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svmm.h                                                                 */
+/*                                                                         */
+/*    The FreeType Multiple Masters and GX var services (specification).   */
+/*                                                                         */
+/*  Copyright 2003, 2004, 2009, 2012 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVMM_H__
+#define __SVMM_H__
+
+#include "../ftserv.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*
+   *  A service used to manage multiple-masters data in a given face.
+   *
+   *  See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
+   *
+   */
+
+#define FT_SERVICE_ID_MULTI_MASTERS  "multi-masters"
+
+
+  typedef FT_Error
+  (*FT_Get_MM_Func)( FT_Face           face,
+                     FT_Multi_Master*  master );
+
+  typedef FT_Error
+  (*FT_Get_MM_Var_Func)( FT_Face      face,
+                         FT_MM_Var*  *master );
+
+  typedef FT_Error
+  (*FT_Set_MM_Design_Func)( FT_Face   face,
+                            FT_UInt   num_coords,
+                            FT_Long*  coords );
+
+  typedef FT_Error
+  (*FT_Set_Var_Design_Func)( FT_Face    face,
+                             FT_UInt    num_coords,
+                             FT_Fixed*  coords );
+
+  typedef FT_Error
+  (*FT_Set_MM_Blend_Func)( FT_Face   face,
+                           FT_UInt   num_coords,
+                           FT_Long*  coords );
+
+
+  FT_DEFINE_SERVICE( MultiMasters )
+  {
+    FT_Get_MM_Func          get_mm;
+    FT_Set_MM_Design_Func   set_mm_design;
+    FT_Set_MM_Blend_Func    set_mm_blend;
+    FT_Get_MM_Var_Func      get_mm_var;
+    FT_Set_Var_Design_Func  set_var_design;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,                          \
+                                           get_mm_,                         \
+                                           set_mm_design_,                  \
+                                           set_mm_blend_,                   \
+                                           get_mm_var_,                     \
+                                           set_var_design_ )                \
+  static const FT_Service_MultiMastersRec  class_ =                         \
+  {                                                                         \
+    get_mm_, set_mm_design_, set_mm_blend_, get_mm_var_, set_var_design_    \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,                          \
+                                           get_mm_,                         \
+                                           set_mm_design_,                  \
+                                           set_mm_blend_,                   \
+                                           get_mm_var_,                     \
+                                           set_var_design_ )                \
+  void                                                                      \
+  FT_Init_Class_ ## class_( FT_Service_MultiMastersRec*  clazz )            \
+  {                                                                         \
+    clazz->get_mm         = get_mm_;                                        \
+    clazz->set_mm_design  = set_mm_design_;                                 \
+    clazz->set_mm_blend   = set_mm_blend_;                                  \
+    clazz->get_mm_var     = get_mm_var_;                                    \
+    clazz->set_var_design = set_var_design_;                                \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __SVMM_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svotval.h b/core/include/thirdparties/freetype/freetype/internal/services/svotval.h
new file mode 100644
index 0000000..37cd34f
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svotval.h
@@ -0,0 +1,55 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svotval.h                                                              */
+/*                                                                         */
+/*    The FreeType OpenType validation service (specification).            */
+/*                                                                         */
+/*  Copyright 2004, 2006 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVOTVAL_H__
+#define __SVOTVAL_H__
+
+#include "../../ftotval.h"
+#include "../ftvalid.h"
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_OPENTYPE_VALIDATE  "opentype-validate"
+
+
+  typedef FT_Error
+  (*otv_validate_func)( FT_Face volatile  face,
+                        FT_UInt           ot_flags,
+                        FT_Bytes         *base,
+                        FT_Bytes         *gdef,
+                        FT_Bytes         *gpos,
+                        FT_Bytes         *gsub,
+                        FT_Bytes         *jstf );
+
+
+  FT_DEFINE_SERVICE( OTvalidate )
+  {
+    otv_validate_func  validate;
+  };
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVOTVAL_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svpfr.h b/core/include/thirdparties/freetype/freetype/internal/services/svpfr.h
new file mode 100644
index 0000000..21a00d3
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svpfr.h
@@ -0,0 +1,66 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svpfr.h                                                                */
+/*                                                                         */
+/*    Internal PFR service functions (specification).                      */
+/*                                                                         */
+/*  Copyright 2003, 2006 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVPFR_H__
+#define __SVPFR_H__
+
+#include "../../ftpfr.h"
+#include "../ftserv.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_PFR_METRICS  "pfr-metrics"
+
+
+  typedef FT_Error
+  (*FT_PFR_GetMetricsFunc)( FT_Face    face,
+                            FT_UInt   *aoutline,
+                            FT_UInt   *ametrics,
+                            FT_Fixed  *ax_scale,
+                            FT_Fixed  *ay_scale );
+
+  typedef FT_Error
+  (*FT_PFR_GetKerningFunc)( FT_Face     face,
+                            FT_UInt     left,
+                            FT_UInt     right,
+                            FT_Vector  *avector );
+
+  typedef FT_Error
+  (*FT_PFR_GetAdvanceFunc)( FT_Face   face,
+                            FT_UInt   gindex,
+                            FT_Pos   *aadvance );
+
+
+  FT_DEFINE_SERVICE( PfrMetrics )
+  {
+    FT_PFR_GetMetricsFunc  get_metrics;
+    FT_PFR_GetKerningFunc  get_kerning;
+    FT_PFR_GetAdvanceFunc  get_advance;
+
+  };
+
+ /* */
+
+FT_END_HEADER
+
+#endif /* __SVPFR_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svpostnm.h b/core/include/thirdparties/freetype/freetype/internal/services/svpostnm.h
new file mode 100644
index 0000000..7fe8603
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svpostnm.h
@@ -0,0 +1,81 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svpostnm.h                                                             */
+/*                                                                         */
+/*    The FreeType PostScript name services (specification).               */
+/*                                                                         */
+/*  Copyright 2003, 2007, 2009, 2012 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVPOSTNM_H__
+#define __SVPOSTNM_H__
+
+#include "../ftserv.h"
+
+
+FT_BEGIN_HEADER
+
+  /*
+   *  A trivial service used to retrieve the PostScript name of a given
+   *  font when available.  The `get_name' field should never be NULL.
+   *
+   *  The corresponding function can return NULL to indicate that the
+   *  PostScript name is not available.
+   *
+   *  The name is owned by the face and will be destroyed with it.
+   */
+
+#define FT_SERVICE_ID_POSTSCRIPT_FONT_NAME  "postscript-font-name"
+
+
+  typedef const char*
+  (*FT_PsName_GetFunc)( FT_Face  face );
+
+
+  FT_DEFINE_SERVICE( PsFontName )
+  {
+    FT_PsName_GetFunc  get_ps_font_name;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
+  static const FT_Service_PsFontNameRec  class_ =                    \
+  {                                                                  \
+    get_ps_font_name_                                                \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_PSFONTNAMEREC( class_, get_ps_font_name_ ) \
+  void                                                               \
+  FT_Init_Class_ ## class_( FT_Library                 library,      \
+                            FT_Service_PsFontNameRec*  clazz )       \
+  {                                                                  \
+    FT_UNUSED( library );                                            \
+                                                                     \
+    clazz->get_ps_font_name = get_ps_font_name_;                     \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVPOSTNM_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svprop.h b/core/include/thirdparties/freetype/freetype/internal/services/svprop.h
new file mode 100644
index 0000000..22da0bb
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svprop.h
@@ -0,0 +1,81 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svprop.h                                                               */
+/*                                                                         */
+/*    The FreeType property service (specification).                       */
+/*                                                                         */
+/*  Copyright 2012 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVPROP_H__
+#define __SVPROP_H__
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_PROPERTIES  "properties"
+
+
+  typedef FT_Error
+  (*FT_Properties_SetFunc)( FT_Module    module,
+                            const char*  property_name,
+                            const void*  value );
+
+  typedef FT_Error
+  (*FT_Properties_GetFunc)( FT_Module    module,
+                            const char*  property_name,
+                            void*        value );
+
+
+  FT_DEFINE_SERVICE( Properties )
+  {
+    FT_Properties_SetFunc  set_property;
+    FT_Properties_GetFunc  get_property;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_PROPERTIESREC( class_,          \
+                                         set_property_,   \
+                                         get_property_ )  \
+  static const FT_Service_PropertiesRec  class_ =         \
+  {                                                       \
+    set_property_,                                        \
+    get_property_                                         \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_PROPERTIESREC( class_,                \
+                                         set_property_,         \
+                                         get_property_ )        \
+  void                                                          \
+  FT_Init_Class_ ## class_( FT_Service_PropertiesRec*  clazz )  \
+  {                                                             \
+    clazz->set_property = set_property_;                        \
+    clazz->get_property = get_property_;                        \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVPROP_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svpscmap.h b/core/include/thirdparties/freetype/freetype/internal/services/svpscmap.h
new file mode 100644
index 0000000..592d14f
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svpscmap.h
@@ -0,0 +1,177 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svpscmap.h                                                             */
+/*                                                                         */
+/*    The FreeType PostScript charmap service (specification).             */
+/*                                                                         */
+/*  Copyright 2003, 2006, 2009, 2012 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVPSCMAP_H__
+#define __SVPSCMAP_H__
+
+#include "../ftobjs.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_POSTSCRIPT_CMAPS  "postscript-cmaps"
+
+
+  /*
+   *  Adobe glyph name to unicode value.
+   */
+  typedef FT_UInt32
+  (*PS_Unicode_ValueFunc)( const char*  glyph_name );
+
+  /*
+   *  Macintosh name id to glyph name.  NULL if invalid index.
+   */
+  typedef const char*
+  (*PS_Macintosh_NameFunc)( FT_UInt  name_index );
+
+  /*
+   *  Adobe standard string ID to glyph name.  NULL if invalid index.
+   */
+  typedef const char*
+  (*PS_Adobe_Std_StringsFunc)( FT_UInt  string_index );
+
+
+  /*
+   *  Simple unicode -> glyph index charmap built from font glyph names
+   *  table.
+   */
+  typedef struct  PS_UniMap_
+  {
+    FT_UInt32  unicode;      /* bit 31 set: is glyph variant */
+    FT_UInt    glyph_index;
+
+  } PS_UniMap;
+
+
+  typedef struct PS_UnicodesRec_*  PS_Unicodes;
+
+  typedef struct  PS_UnicodesRec_
+  {
+    FT_CMapRec  cmap;
+    FT_UInt     num_maps;
+    PS_UniMap*  maps;
+
+  } PS_UnicodesRec;
+
+
+  /*
+   *  A function which returns a glyph name for a given index.  Returns
+   *  NULL if invalid index.
+   */
+  typedef const char*
+  (*PS_GetGlyphNameFunc)( FT_Pointer  data,
+                          FT_UInt     string_index );
+
+  /*
+   *  A function used to release the glyph name returned by
+   *  PS_GetGlyphNameFunc, when needed
+   */
+  typedef void
+  (*PS_FreeGlyphNameFunc)( FT_Pointer  data,
+                           const char*  name );
+
+  typedef FT_Error
+  (*PS_Unicodes_InitFunc)( FT_Memory             memory,
+                           PS_Unicodes           unicodes,
+                           FT_UInt               num_glyphs,
+                           PS_GetGlyphNameFunc   get_glyph_name,
+                           PS_FreeGlyphNameFunc  free_glyph_name,
+                           FT_Pointer            glyph_data );
+
+  typedef FT_UInt
+  (*PS_Unicodes_CharIndexFunc)( PS_Unicodes  unicodes,
+                                FT_UInt32    unicode );
+
+  typedef FT_UInt32
+  (*PS_Unicodes_CharNextFunc)( PS_Unicodes  unicodes,
+                               FT_UInt32   *unicode );
+
+
+  FT_DEFINE_SERVICE( PsCMaps )
+  {
+    PS_Unicode_ValueFunc       unicode_value;
+
+    PS_Unicodes_InitFunc       unicodes_init;
+    PS_Unicodes_CharIndexFunc  unicodes_char_index;
+    PS_Unicodes_CharNextFunc   unicodes_char_next;
+
+    PS_Macintosh_NameFunc      macintosh_name;
+    PS_Adobe_Std_StringsFunc   adobe_std_strings;
+    const unsigned short*      adobe_std_encoding;
+    const unsigned short*      adobe_expert_encoding;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_PSCMAPSREC( class_,                               \
+                                      unicode_value_,                       \
+                                      unicodes_init_,                       \
+                                      unicodes_char_index_,                 \
+                                      unicodes_char_next_,                  \
+                                      macintosh_name_,                      \
+                                      adobe_std_strings_,                   \
+                                      adobe_std_encoding_,                  \
+                                      adobe_expert_encoding_ )              \
+  static const FT_Service_PsCMapsRec  class_ =                              \
+  {                                                                         \
+    unicode_value_, unicodes_init_,                                         \
+    unicodes_char_index_, unicodes_char_next_, macintosh_name_,             \
+    adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_         \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_PSCMAPSREC( class_,                               \
+                                      unicode_value_,                       \
+                                      unicodes_init_,                       \
+                                      unicodes_char_index_,                 \
+                                      unicodes_char_next_,                  \
+                                      macintosh_name_,                      \
+                                      adobe_std_strings_,                   \
+                                      adobe_std_encoding_,                  \
+                                      adobe_expert_encoding_ )              \
+  void                                                                      \
+  FT_Init_Class_ ## class_( FT_Library              library,                \
+                            FT_Service_PsCMapsRec*  clazz )                 \
+  {                                                                         \
+    FT_UNUSED( library );                                                   \
+                                                                            \
+    clazz->unicode_value         = unicode_value_;                          \
+    clazz->unicodes_init         = unicodes_init_;                          \
+    clazz->unicodes_char_index   = unicodes_char_index_;                    \
+    clazz->unicodes_char_next    = unicodes_char_next_;                     \
+    clazz->macintosh_name        = macintosh_name_;                         \
+    clazz->adobe_std_strings     = adobe_std_strings_;                      \
+    clazz->adobe_std_encoding    = adobe_std_encoding_;                     \
+    clazz->adobe_expert_encoding = adobe_expert_encoding_;                  \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVPSCMAP_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svpsinfo.h b/core/include/thirdparties/freetype/freetype/internal/services/svpsinfo.h
new file mode 100644
index 0000000..fa3b303
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svpsinfo.h
@@ -0,0 +1,111 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svpsinfo.h                                                             */
+/*                                                                         */
+/*    The FreeType PostScript info service (specification).                */
+/*                                                                         */
+/*  Copyright 2003, 2004, 2009, 2011, 2012 by                              */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVPSINFO_H__
+#define __SVPSINFO_H__
+
+#include "../ftserv.h"
+#include "../t1types.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_POSTSCRIPT_INFO  "postscript-info"
+
+
+  typedef FT_Error
+  (*PS_GetFontInfoFunc)( FT_Face          face,
+                         PS_FontInfoRec*  afont_info );
+
+  typedef FT_Error
+  (*PS_GetFontExtraFunc)( FT_Face           face,
+                          PS_FontExtraRec*  afont_extra );
+
+  typedef FT_Int
+  (*PS_HasGlyphNamesFunc)( FT_Face  face );
+
+  typedef FT_Error
+  (*PS_GetFontPrivateFunc)( FT_Face         face,
+                            PS_PrivateRec*  afont_private );
+
+  typedef FT_Long
+  (*PS_GetFontValueFunc)( FT_Face       face,
+                          PS_Dict_Keys  key,
+                          FT_UInt       idx,
+                          void         *value,
+                          FT_Long       value_len );
+
+
+  FT_DEFINE_SERVICE( PsInfo )
+  {
+    PS_GetFontInfoFunc     ps_get_font_info;
+    PS_GetFontExtraFunc    ps_get_font_extra;
+    PS_HasGlyphNamesFunc   ps_has_glyph_names;
+    PS_GetFontPrivateFunc  ps_get_font_private;
+    PS_GetFontValueFunc    ps_get_font_value;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_PSINFOREC( class_,                     \
+                                     get_font_info_,             \
+                                     ps_get_font_extra_,         \
+                                     has_glyph_names_,           \
+                                     get_font_private_,          \
+                                     get_font_value_ )           \
+  static const FT_Service_PsInfoRec  class_ =                    \
+  {                                                              \
+    get_font_info_, ps_get_font_extra_, has_glyph_names_,        \
+    get_font_private_, get_font_value_                           \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_PSINFOREC( class_,                     \
+                                     get_font_info_,             \
+                                     ps_get_font_extra_,         \
+                                     has_glyph_names_,           \
+                                     get_font_private_,          \
+                                     get_font_value_ )           \
+  void                                                           \
+  FT_Init_Class_ ## class_( FT_Library             library,      \
+                            FT_Service_PsInfoRec*  clazz )       \
+  {                                                              \
+    FT_UNUSED( library );                                        \
+                                                                 \
+    clazz->ps_get_font_info    = get_font_info_;                 \
+    clazz->ps_get_font_extra   = ps_get_font_extra_;             \
+    clazz->ps_has_glyph_names  = has_glyph_names_;               \
+    clazz->ps_get_font_private = get_font_private_;              \
+    clazz->ps_get_font_value   = get_font_value_;                \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVPSINFO_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svsfnt.h b/core/include/thirdparties/freetype/freetype/internal/services/svsfnt.h
new file mode 100644
index 0000000..3425042
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svsfnt.h
@@ -0,0 +1,103 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svsfnt.h                                                               */
+/*                                                                         */
+/*    The FreeType SFNT table loading service (specification).             */
+/*                                                                         */
+/*  Copyright 2003, 2004, 2009, 2012 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVSFNT_H__
+#define __SVSFNT_H__
+
+#include "../ftserv.h"
+#include "../../tttables.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*
+   *  SFNT table loading service.
+   */
+
+#define FT_SERVICE_ID_SFNT_TABLE  "sfnt-table"
+
+
+  /*
+   * Used to implement FT_Load_Sfnt_Table().
+   */
+  typedef FT_Error
+  (*FT_SFNT_TableLoadFunc)( FT_Face    face,
+                            FT_ULong   tag,
+                            FT_Long    offset,
+                            FT_Byte*   buffer,
+                            FT_ULong*  length );
+
+  /*
+   * Used to implement FT_Get_Sfnt_Table().
+   */
+  typedef void*
+  (*FT_SFNT_TableGetFunc)( FT_Face      face,
+                           FT_Sfnt_Tag  tag );
+
+
+  /*
+   * Used to implement FT_Sfnt_Table_Info().
+   */
+  typedef FT_Error
+  (*FT_SFNT_TableInfoFunc)( FT_Face    face,
+                            FT_UInt    idx,
+                            FT_ULong  *tag,
+                            FT_ULong  *offset,
+                            FT_ULong  *length );
+
+
+  FT_DEFINE_SERVICE( SFNT_Table )
+  {
+    FT_SFNT_TableLoadFunc  load_table;
+    FT_SFNT_TableGetFunc   get_table;
+    FT_SFNT_TableInfoFunc  table_info;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ )  \
+  static const FT_Service_SFNT_TableRec  class_ =                      \
+  {                                                                    \
+    load_, get_, info_                                                 \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_SFNT_TABLEREC( class_, load_, get_, info_ ) \
+  void                                                                \
+  FT_Init_Class_ ## class_( FT_Service_SFNT_TableRec*  clazz )        \
+  {                                                                   \
+    clazz->load_table = load_;                                        \
+    clazz->get_table  = get_;                                         \
+    clazz->table_info = info_;                                        \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVSFNT_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svttcmap.h b/core/include/thirdparties/freetype/freetype/internal/services/svttcmap.h
new file mode 100644
index 0000000..02542ab
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svttcmap.h
@@ -0,0 +1,107 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svttcmap.h                                                             */
+/*                                                                         */
+/*    The FreeType TrueType/sfnt cmap extra information service.           */
+/*                                                                         */
+/*  Copyright 2003 by                                                      */
+/*  Masatake YAMATO, Redhat K.K.                                           */
+/*                                                                         */
+/*  Copyright 2003, 2008, 2009, 2012 by                                    */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+/* Development of this service is support of
+   Information-technology Promotion Agency, Japan. */
+
+#ifndef __SVTTCMAP_H__
+#define __SVTTCMAP_H__
+
+#include "../ftserv.h"
+#include "../../tttables.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_TT_CMAP  "tt-cmaps"
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_CMapInfo                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to store TrueType/sfnt specific cmap information  */
+  /*    which is not covered by the generic @FT_CharMap structure.  This   */
+  /*    structure can be accessed with the @FT_Get_TT_CMap_Info function.  */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    language ::                                                        */
+  /*      The language ID used in Mac fonts.  Definitions of values are in */
+  /*      freetype/ttnameid.h.                                             */
+  /*                                                                       */
+  /*    format ::                                                          */
+  /*      The cmap format.  OpenType 1.5 defines the formats 0 (byte       */
+  /*      encoding table), 2~(high-byte mapping through table), 4~(segment */
+  /*      mapping to delta values), 6~(trimmed table mapping), 8~(mixed    */
+  /*      16-bit and 32-bit coverage), 10~(trimmed array), 12~(segmented   */
+  /*      coverage), and 14 (Unicode Variation Sequences).                 */
+  /*                                                                       */
+  typedef struct  TT_CMapInfo_
+  {
+    FT_ULong  language;
+    FT_Long   format;
+
+  } TT_CMapInfo;
+
+
+  typedef FT_Error
+  (*TT_CMap_Info_GetFunc)( FT_CharMap    charmap,
+                           TT_CMapInfo  *cmap_info );
+
+
+  FT_DEFINE_SERVICE( TTCMaps )
+  {
+    TT_CMap_Info_GetFunc  get_cmap_info;
+  };
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ )  \
+  static const FT_Service_TTCMapsRec  class_ =                  \
+  {                                                             \
+    get_cmap_info_                                              \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_TTCMAPSREC( class_, get_cmap_info_ )  \
+  void                                                          \
+  FT_Init_Class_ ## class_( FT_Library              library,    \
+                            FT_Service_TTCMapsRec*  clazz )     \
+  {                                                             \
+    FT_UNUSED( library );                                       \
+                                                                \
+    clazz->get_cmap_info = get_cmap_info_;                      \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __SVTTCMAP_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svtteng.h b/core/include/thirdparties/freetype/freetype/internal/services/svtteng.h
new file mode 100644
index 0000000..e567efb
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svtteng.h
@@ -0,0 +1,53 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svtteng.h                                                              */
+/*                                                                         */
+/*    The FreeType TrueType engine query service (specification).          */
+/*                                                                         */
+/*  Copyright 2006 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVTTENG_H__
+#define __SVTTENG_H__
+
+#include "../ftserv.h"
+#include "../../ftmodapi.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*
+   *  SFNT table loading service.
+   */
+
+#define FT_SERVICE_ID_TRUETYPE_ENGINE  "truetype-engine"
+
+  /*
+   * Used to implement FT_Get_TrueType_Engine_Type
+   */
+
+  FT_DEFINE_SERVICE( TrueTypeEngine )
+  {
+    FT_TrueTypeEngineType  engine_type;
+  };
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVTTENG_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svttglyf.h b/core/include/thirdparties/freetype/freetype/internal/services/svttglyf.h
new file mode 100644
index 0000000..d8824fb
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svttglyf.h
@@ -0,0 +1,68 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svttglyf.h                                                             */
+/*                                                                         */
+/*    The FreeType TrueType glyph service.                                 */
+/*                                                                         */
+/*  Copyright 2007, 2009, 2012 by David Turner.                            */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+#ifndef __SVTTGLYF_H__
+#define __SVTTGLYF_H__
+
+#include "../ftserv.h"
+#include "../../tttables.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_TT_GLYF  "tt-glyf"
+
+
+  typedef FT_ULong
+  (*TT_Glyf_GetLocationFunc)( FT_Face    face,
+                              FT_UInt    gindex,
+                              FT_ULong  *psize );
+
+  FT_DEFINE_SERVICE( TTGlyf )
+  {
+    TT_Glyf_GetLocationFunc  get_location;
+  };
+
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ )  \
+  static const FT_Service_TTGlyfRec  class_ =                 \
+  {                                                           \
+    get_location_                                             \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_DEFINE_SERVICE_TTGLYFREC( class_, get_location_ )  \
+  void                                                        \
+  FT_Init_Class_ ## class_( FT_Service_TTGlyfRec*  clazz )    \
+  {                                                           \
+    clazz->get_location = get_location_;                      \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __SVTTGLYF_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svwinfnt.h b/core/include/thirdparties/freetype/freetype/internal/services/svwinfnt.h
new file mode 100644
index 0000000..013a991
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svwinfnt.h
@@ -0,0 +1,50 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svwinfnt.h                                                             */
+/*                                                                         */
+/*    The FreeType Windows FNT/FONT service (specification).               */
+/*                                                                         */
+/*  Copyright 2003 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVWINFNT_H__
+#define __SVWINFNT_H__
+
+#include "../ftserv.h"
+#include "../../ftwinfnt.h"
+
+
+FT_BEGIN_HEADER
+
+
+#define FT_SERVICE_ID_WINFNT  "winfonts"
+
+  typedef FT_Error
+  (*FT_WinFnt_GetHeaderFunc)( FT_Face               face,
+                              FT_WinFNT_HeaderRec  *aheader );
+
+
+  FT_DEFINE_SERVICE( WinFnt )
+  {
+    FT_WinFnt_GetHeaderFunc  get_header;
+  };
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVWINFNT_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/services/svxf86nm.h b/core/include/thirdparties/freetype/freetype/internal/services/svxf86nm.h
new file mode 100644
index 0000000..571f63d
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/services/svxf86nm.h
@@ -0,0 +1,55 @@
+/***************************************************************************/
+/*                                                                         */
+/*  svxf86nm.h                                                             */
+/*                                                                         */
+/*    The FreeType XFree86 services (specification only).                  */
+/*                                                                         */
+/*  Copyright 2003 by                                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SVXF86NM_H__
+#define __SVXF86NM_H__
+
+#include "../ftserv.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*
+   *  A trivial service used to return the name of a face's font driver,
+   *  according to the XFree86 nomenclature.  Note that the service data
+   *  is a simple constant string pointer.
+   */
+
+#define FT_SERVICE_ID_XF86_NAME  "xf86-driver-name"
+
+#define FT_XF86_FORMAT_TRUETYPE  "TrueType"
+#define FT_XF86_FORMAT_TYPE_1    "Type 1"
+#define FT_XF86_FORMAT_BDF       "BDF"
+#define FT_XF86_FORMAT_PCF       "PCF"
+#define FT_XF86_FORMAT_TYPE_42   "Type 42"
+#define FT_XF86_FORMAT_CID       "CID Type 1"
+#define FT_XF86_FORMAT_CFF       "CFF"
+#define FT_XF86_FORMAT_PFR       "PFR"
+#define FT_XF86_FORMAT_WINFNT    "Windows FNT"
+
+  /* */
+
+
+FT_END_HEADER
+
+
+#endif /* __SVXF86NM_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/sfnt.h b/core/include/thirdparties/freetype/freetype/internal/sfnt.h
new file mode 100644
index 0000000..2759ba3
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/sfnt.h
@@ -0,0 +1,707 @@
+/***************************************************************************/
+/*                                                                         */
+/*  sfnt.h                                                                 */
+/*                                                                         */
+/*    High-level `sfnt' driver interface (specification).                  */
+/*                                                                         */
+/*  Copyright 1996-2006, 2009, 2012-2013 by                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __SFNT_H__
+#define __SFNT_H__
+
+
+#include "../../ft2build.h"
+#include "ftdriver.h"
+#include "tttypes.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Init_Face_Func                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    First part of the SFNT face object initialization.  This finds     */
+  /*    the face in a SFNT file or collection, and load its format tag in  */
+  /*    face->format_tag.                                                  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    stream     :: The input stream.                                    */
+  /*                                                                       */
+  /*    face       :: A handle to the target face object.                  */
+  /*                                                                       */
+  /*    face_index :: The index of the TrueType font, if we are opening a  */
+  /*                  collection.                                          */
+  /*                                                                       */
+  /*    num_params :: The number of additional parameters.                 */
+  /*                                                                       */
+  /*    params     :: Optional additional parameters.                      */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The stream cursor must be at the font file's origin.               */
+  /*                                                                       */
+  /*    This function recognizes fonts embedded in a `TrueType             */
+  /*    collection'.                                                       */
+  /*                                                                       */
+  /*    Once the format tag has been validated by the font driver, it      */
+  /*    should then call the TT_Load_Face_Func() callback to read the rest */
+  /*    of the SFNT tables in the object.                                  */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Init_Face_Func)( FT_Stream      stream,
+                        TT_Face        face,
+                        FT_Int         face_index,
+                        FT_Int         num_params,
+                        FT_Parameter*  params );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Load_Face_Func                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Second part of the SFNT face object initialization.  This loads    */
+  /*    the common SFNT tables (head, OS/2, maxp, metrics, etc.) in the    */
+  /*    face object.                                                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    stream     :: The input stream.                                    */
+  /*                                                                       */
+  /*    face       :: A handle to the target face object.                  */
+  /*                                                                       */
+  /*    face_index :: The index of the TrueType font, if we are opening a  */
+  /*                  collection.                                          */
+  /*                                                                       */
+  /*    num_params :: The number of additional parameters.                 */
+  /*                                                                       */
+  /*    params     :: Optional additional parameters.                      */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function must be called after TT_Init_Face_Func().            */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Load_Face_Func)( FT_Stream      stream,
+                        TT_Face        face,
+                        FT_Int         face_index,
+                        FT_Int         num_params,
+                        FT_Parameter*  params );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Done_Face_Func                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A callback used to delete the common SFNT data from a face.        */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face :: A handle to the target face object.                        */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function does NOT destroy the face object.                    */
+  /*                                                                       */
+  typedef void
+  (*TT_Done_Face_Func)( TT_Face  face );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Load_Any_Func                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Load any font table into client memory.                            */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face   :: The face object to look for.                             */
+  /*                                                                       */
+  /*    tag    :: The tag of table to load.  Use the value 0 if you want   */
+  /*              to access the whole font file, else set this parameter   */
+  /*              to a valid TrueType table tag that you can forge with    */
+  /*              the MAKE_TT_TAG macro.                                   */
+  /*                                                                       */
+  /*    offset :: The starting offset in the table (or the file if         */
+  /*              tag == 0).                                               */
+  /*                                                                       */
+  /*    length :: The address of the decision variable:                    */
+  /*                                                                       */
+  /*                If length == NULL:                                     */
+  /*                  Loads the whole table.  Returns an error if          */
+  /*                  `offset' == 0!                                       */
+  /*                                                                       */
+  /*                If *length == 0:                                       */
+  /*                  Exits immediately; returning the length of the given */
+  /*                  table or of the font file, depending on the value of */
+  /*                  `tag'.                                               */
+  /*                                                                       */
+  /*                If *length != 0:                                       */
+  /*                  Loads the next `length' bytes of table or font,      */
+  /*                  starting at offset `offset' (in table or font too).  */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    buffer :: The address of target buffer.                            */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    TrueType error code.  0 means success.                             */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Load_Any_Func)( TT_Face    face,
+                       FT_ULong   tag,
+                       FT_Long    offset,
+                       FT_Byte   *buffer,
+                       FT_ULong*  length );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Find_SBit_Image_Func                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Check whether an embedded bitmap (an `sbit') exists for a given    */
+  /*    glyph, at a given strike.                                          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face          :: The target face object.                           */
+  /*                                                                       */
+  /*    glyph_index   :: The glyph index.                                  */
+  /*                                                                       */
+  /*    strike_index  :: The current strike index.                         */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    arange        :: The SBit range containing the glyph index.        */
+  /*                                                                       */
+  /*    astrike       :: The SBit strike containing the glyph index.       */
+  /*                                                                       */
+  /*    aglyph_offset :: The offset of the glyph data in `EBDT' table.     */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.  Returns                    */
+  /*    SFNT_Err_Invalid_Argument if no sbit exists for the requested      */
+  /*    glyph.                                                             */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Find_SBit_Image_Func)( TT_Face          face,
+                              FT_UInt          glyph_index,
+                              FT_ULong         strike_index,
+                              TT_SBit_Range   *arange,
+                              TT_SBit_Strike  *astrike,
+                              FT_ULong        *aglyph_offset );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Load_SBit_Metrics_Func                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Get the big metrics for a given embedded bitmap.                   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    stream      :: The input stream.                                   */
+  /*                                                                       */
+  /*    range       :: The SBit range containing the glyph.                */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    big_metrics :: A big SBit metrics structure for the glyph.         */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The stream cursor must be positioned at the glyph's offset within  */
+  /*    the `EBDT' table before the call.                                  */
+  /*                                                                       */
+  /*    If the image format uses variable metrics, the stream cursor is    */
+  /*    positioned just after the metrics header in the `EBDT' table on    */
+  /*    function exit.                                                     */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Load_SBit_Metrics_Func)( FT_Stream        stream,
+                                TT_SBit_Range    range,
+                                TT_SBit_Metrics  metrics );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Load_SBit_Image_Func                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Load a given glyph sbit image from the font resource.  This also   */
+  /*    returns its metrics.                                               */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face ::                                                            */
+  /*      The target face object.                                          */
+  /*                                                                       */
+  /*    strike_index ::                                                    */
+  /*      The strike index.                                                */
+  /*                                                                       */
+  /*    glyph_index ::                                                     */
+  /*      The current glyph index.                                         */
+  /*                                                                       */
+  /*    load_flags ::                                                      */
+  /*      The current load flags.                                          */
+  /*                                                                       */
+  /*    stream ::                                                          */
+  /*      The input stream.                                                */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    amap ::                                                            */
+  /*      The target pixmap.                                               */
+  /*                                                                       */
+  /*    ametrics ::                                                        */
+  /*      A big sbit metrics structure for the glyph image.                */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.  Returns an error if no     */
+  /*    glyph sbit exists for the index.                                   */
+  /*                                                                       */
+  /*  <Note>                                                               */
+  /*    The `map.buffer' field is always freed before the glyph is loaded. */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Load_SBit_Image_Func)( TT_Face              face,
+                              FT_ULong             strike_index,
+                              FT_UInt              glyph_index,
+                              FT_UInt              load_flags,
+                              FT_Stream            stream,
+                              FT_Bitmap           *amap,
+                              TT_SBit_MetricsRec  *ametrics );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Set_SBit_Strike_Func                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Select an sbit strike for a given size request.                    */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face          :: The target face object.                           */
+  /*                                                                       */
+  /*    req           :: The size request.                                 */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    astrike_index :: The index of the sbit strike.                     */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.  Returns an error if no     */
+  /*    sbit strike exists for the selected ppem values.                   */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Set_SBit_Strike_Func)( TT_Face          face,
+                              FT_Size_Request  req,
+                              FT_ULong*        astrike_index );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Load_Strike_Metrics_Func                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Load the metrics of a given strike.                                */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face          :: The target face object.                           */
+  /*                                                                       */
+  /*    strike_index  :: The strike index.                                 */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    metrics       :: the metrics of the strike.                        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.  Returns an error if no     */
+  /*    such sbit strike exists.                                           */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Load_Strike_Metrics_Func)( TT_Face           face,
+                                  FT_ULong          strike_index,
+                                  FT_Size_Metrics*  metrics );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Get_PS_Name_Func                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Get the PostScript glyph name of a glyph.                          */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    idx  :: The glyph index.                                           */
+  /*                                                                       */
+  /*    PSname :: The address of a string pointer.  Will be NULL in case   */
+  /*              of error, otherwise it is a pointer to the glyph name.   */
+  /*                                                                       */
+  /*              You must not modify the returned string!                 */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Get_PS_Name_Func)( TT_Face      face,
+                          FT_UInt      idx,
+                          FT_String**  PSname );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Load_Metrics_Func                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Load a metrics table, which is a table with a horizontal and a     */
+  /*    vertical version.                                                  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face     :: A handle to the target face object.                    */
+  /*                                                                       */
+  /*    stream   :: The input stream.                                      */
+  /*                                                                       */
+  /*    vertical :: A boolean flag.  If set, load the vertical one.        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Load_Metrics_Func)( TT_Face    face,
+                           FT_Stream  stream,
+                           FT_Bool    vertical );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Get_Metrics_Func                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Load the horizontal or vertical header in a face object.           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face     :: A handle to the target face object.                    */
+  /*                                                                       */
+  /*    stream   :: The input stream.                                      */
+  /*                                                                       */
+  /*    vertical :: A boolean flag.  If set, load vertical metrics.        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Get_Metrics_Func)( TT_Face     face,
+                          FT_Bool     vertical,
+                          FT_UInt     gindex,
+                          FT_Short*   abearing,
+                          FT_UShort*  aadvance );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Load_Table_Func                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Load a given TrueType table.                                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face   :: A handle to the target face object.                      */
+  /*                                                                       */
+  /*    stream :: The input stream.                                        */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The function uses `face->goto_table' to seek the stream to the     */
+  /*    start of the table, except while loading the font directory.       */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Load_Table_Func)( TT_Face    face,
+                         FT_Stream  stream );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Free_Table_Func                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Free a given TrueType table.                                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face :: A handle to the target face object.                        */
+  /*                                                                       */
+  typedef void
+  (*TT_Free_Table_Func)( TT_Face  face );
+
+
+  /*
+   * @functype:
+   *    TT_Face_GetKerningFunc
+   *
+   * @description:
+   *    Return the horizontal kerning value between two glyphs.
+   *
+   * @input:
+   *    face        :: A handle to the source face object.
+   *    left_glyph  :: The left glyph index.
+   *    right_glyph :: The right glyph index.
+   *
+   * @return:
+   *    The kerning value in font units.
+   */
+  typedef FT_Int
+  (*TT_Face_GetKerningFunc)( TT_Face  face,
+                             FT_UInt  left_glyph,
+                             FT_UInt  right_glyph );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    SFNT_Interface                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This structure holds pointers to the functions used to load and    */
+  /*    free the basic tables that are required in a `sfnt' font file.     */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    Check the various xxx_Func() descriptions for details.             */
+  /*                                                                       */
+  typedef struct  SFNT_Interface_
+  {
+    TT_Loader_GotoTableFunc      goto_table;
+
+    TT_Init_Face_Func            init_face;
+    TT_Load_Face_Func            load_face;
+    TT_Done_Face_Func            done_face;
+    FT_Module_Requester          get_interface;
+
+    TT_Load_Any_Func             load_any;
+
+    /* these functions are called by `load_face' but they can also  */
+    /* be called from external modules, if there is a need to do so */
+    TT_Load_Table_Func           load_head;
+    TT_Load_Metrics_Func         load_hhea;
+    TT_Load_Table_Func           load_cmap;
+    TT_Load_Table_Func           load_maxp;
+    TT_Load_Table_Func           load_os2;
+    TT_Load_Table_Func           load_post;
+
+    TT_Load_Table_Func           load_name;
+    TT_Free_Table_Func           free_name;
+
+    /* this field was called `load_kerning' up to version 2.1.10 */
+    TT_Load_Table_Func           load_kern;
+
+    TT_Load_Table_Func           load_gasp;
+    TT_Load_Table_Func           load_pclt;
+
+    /* see `ttload.h'; this field was called `load_bitmap_header' up to */
+    /* version 2.1.10                                                   */
+    TT_Load_Table_Func           load_bhed;
+
+    TT_Load_SBit_Image_Func      load_sbit_image;
+
+    /* see `ttpost.h' */
+    TT_Get_PS_Name_Func          get_psname;
+    TT_Free_Table_Func           free_psnames;
+
+    /* starting here, the structure differs from version 2.1.7 */
+
+    /* this field was introduced in version 2.1.8, named `get_psname' */
+    TT_Face_GetKerningFunc       get_kerning;
+
+    /* new elements introduced after version 2.1.10 */
+
+    /* load the font directory, i.e., the offset table and */
+    /* the table directory                                 */
+    TT_Load_Table_Func           load_font_dir;
+    TT_Load_Metrics_Func         load_hmtx;
+
+    TT_Load_Table_Func           load_eblc;
+    TT_Free_Table_Func           free_eblc;
+
+    TT_Set_SBit_Strike_Func      set_sbit_strike;
+    TT_Load_Strike_Metrics_Func  load_strike_metrics;
+
+    TT_Get_Metrics_Func          get_metrics;
+
+  } SFNT_Interface;
+
+
+  /* transitional */
+  typedef SFNT_Interface*   SFNT_Service;
+
+#ifndef FT_CONFIG_OPTION_PIC
+
+#define FT_DEFINE_SFNT_INTERFACE(        \
+          class_,                        \
+          goto_table_,                   \
+          init_face_,                    \
+          load_face_,                    \
+          done_face_,                    \
+          get_interface_,                \
+          load_any_,                     \
+          load_head_,                    \
+          load_hhea_,                    \
+          load_cmap_,                    \
+          load_maxp_,                    \
+          load_os2_,                     \
+          load_post_,                    \
+          load_name_,                    \
+          free_name_,                    \
+          load_kern_,                    \
+          load_gasp_,                    \
+          load_pclt_,                    \
+          load_bhed_,                    \
+          load_sbit_image_,              \
+          get_psname_,                   \
+          free_psnames_,                 \
+          get_kerning_,                  \
+          load_font_dir_,                \
+          load_hmtx_,                    \
+          load_eblc_,                    \
+          free_eblc_,                    \
+          set_sbit_strike_,              \
+          load_strike_metrics_,          \
+          get_metrics_ )                 \
+  static const SFNT_Interface  class_ =  \
+  {                                      \
+    goto_table_,                         \
+    init_face_,                          \
+    load_face_,                          \
+    done_face_,                          \
+    get_interface_,                      \
+    load_any_,                           \
+    load_head_,                          \
+    load_hhea_,                          \
+    load_cmap_,                          \
+    load_maxp_,                          \
+    load_os2_,                           \
+    load_post_,                          \
+    load_name_,                          \
+    free_name_,                          \
+    load_kern_,                          \
+    load_gasp_,                          \
+    load_pclt_,                          \
+    load_bhed_,                          \
+    load_sbit_image_,                    \
+    get_psname_,                         \
+    free_psnames_,                       \
+    get_kerning_,                        \
+    load_font_dir_,                      \
+    load_hmtx_,                          \
+    load_eblc_,                          \
+    free_eblc_,                          \
+    set_sbit_strike_,                    \
+    load_strike_metrics_,                \
+    get_metrics_,                        \
+  };
+
+#else /* FT_CONFIG_OPTION_PIC */
+
+#define FT_INTERNAL( a, a_ )  \
+          clazz->a = a_;
+
+#define FT_DEFINE_SFNT_INTERFACE(                       \
+          class_,                                       \
+          goto_table_,                                  \
+          init_face_,                                   \
+          load_face_,                                   \
+          done_face_,                                   \
+          get_interface_,                               \
+          load_any_,                                    \
+          load_head_,                                   \
+          load_hhea_,                                   \
+          load_cmap_,                                   \
+          load_maxp_,                                   \
+          load_os2_,                                    \
+          load_post_,                                   \
+          load_name_,                                   \
+          free_name_,                                   \
+          load_kern_,                                   \
+          load_gasp_,                                   \
+          load_pclt_,                                   \
+          load_bhed_,                                   \
+          load_sbit_image_,                             \
+          get_psname_,                                  \
+          free_psnames_,                                \
+          get_kerning_,                                 \
+          load_font_dir_,                               \
+          load_hmtx_,                                   \
+          load_eblc_,                                   \
+          free_eblc_,                                   \
+          set_sbit_strike_,                             \
+          load_strike_metrics_,                         \
+          get_metrics_ )                                \
+  void                                                  \
+  FT_Init_Class_ ## class_( FT_Library       library,   \
+                            SFNT_Interface*  clazz )    \
+  {                                                     \
+    FT_UNUSED( library );                               \
+                                                        \
+    clazz->goto_table          = goto_table_;           \
+    clazz->init_face           = init_face_;            \
+    clazz->load_face           = load_face_;            \
+    clazz->done_face           = done_face_;            \
+    clazz->get_interface       = get_interface_;        \
+    clazz->load_any            = load_any_;             \
+    clazz->load_head           = load_head_;            \
+    clazz->load_hhea           = load_hhea_;            \
+    clazz->load_cmap           = load_cmap_;            \
+    clazz->load_maxp           = load_maxp_;            \
+    clazz->load_os2            = load_os2_;             \
+    clazz->load_post           = load_post_;            \
+    clazz->load_name           = load_name_;            \
+    clazz->free_name           = free_name_;            \
+    clazz->load_kern           = load_kern_;            \
+    clazz->load_gasp           = load_gasp_;            \
+    clazz->load_pclt           = load_pclt_;            \
+    clazz->load_bhed           = load_bhed_;            \
+    clazz->load_sbit_image     = load_sbit_image_;      \
+    clazz->get_psname          = get_psname_;           \
+    clazz->free_psnames        = free_psnames_;         \
+    clazz->get_kerning         = get_kerning_;          \
+    clazz->load_font_dir       = load_font_dir_;        \
+    clazz->load_hmtx           = load_hmtx_;            \
+    clazz->load_eblc           = load_eblc_;            \
+    clazz->free_eblc           = free_eblc_;            \
+    clazz->set_sbit_strike     = set_sbit_strike_;      \
+    clazz->load_strike_metrics = load_strike_metrics_;  \
+    clazz->get_metrics         = get_metrics_;          \
+  }
+
+#endif /* FT_CONFIG_OPTION_PIC */
+
+FT_END_HEADER
+
+#endif /* __SFNT_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/t1types.h b/core/include/thirdparties/freetype/freetype/internal/t1types.h
new file mode 100644
index 0000000..36deec8
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/t1types.h
@@ -0,0 +1,255 @@
+/***************************************************************************/
+/*                                                                         */
+/*  t1types.h                                                              */
+/*                                                                         */
+/*    Basic Type1/Type2 type definitions and interface (specification      */
+/*    only).                                                               */
+/*                                                                         */
+/*  Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by                   */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __T1TYPES_H__
+#define __T1TYPES_H__
+
+
+#include "../../ft2build.h"
+#include "../t1tables.h"
+#include "pshints.h"
+#include "ftserv.h"
+#include "services/svpscmap.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***              REQUIRED TYPE1/TYPE2 TABLES DEFINITIONS              ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    T1_EncodingRec                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure modeling a custom encoding.                            */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    num_chars  :: The number of character codes in the encoding.       */
+  /*                  Usually 256.                                         */
+  /*                                                                       */
+  /*    code_first :: The lowest valid character code in the encoding.     */
+  /*                                                                       */
+  /*    code_last  :: The highest valid character code in the encoding     */
+  /*                  + 1. When equal to code_first there are no valid     */
+  /*                  character codes.                                     */
+  /*                                                                       */
+  /*    char_index :: An array of corresponding glyph indices.             */
+  /*                                                                       */
+  /*    char_name  :: An array of corresponding glyph names.               */
+  /*                                                                       */
+  typedef struct  T1_EncodingRecRec_
+  {
+    FT_Int       num_chars;
+    FT_Int       code_first;
+    FT_Int       code_last;
+
+    FT_UShort*   char_index;
+    FT_String**  char_name;
+
+  } T1_EncodingRec, *T1_Encoding;
+
+
+  /* used to hold extra data of PS_FontInfoRec that
+   * cannot be stored in the publicly defined structure.
+   *
+   * Note these can't be blended with multiple-masters.
+   */
+  typedef struct  PS_FontExtraRec_
+  {
+    FT_UShort  fs_type;
+
+  } PS_FontExtraRec;
+
+
+  typedef struct  T1_FontRec_
+  {
+    PS_FontInfoRec   font_info;         /* font info dictionary   */
+    PS_FontExtraRec  font_extra;        /* font info extra fields */
+    PS_PrivateRec    private_dict;      /* private dictionary     */
+    FT_String*       font_name;         /* top-level dictionary   */
+
+    T1_EncodingType  encoding_type;
+    T1_EncodingRec   encoding;
+
+    FT_Byte*         subrs_block;
+    FT_Byte*         charstrings_block;
+    FT_Byte*         glyph_names_block;
+
+    FT_Int           num_subrs;
+    FT_Byte**        subrs;
+    FT_PtrDist*      subrs_len;
+
+    FT_Int           num_glyphs;
+    FT_String**      glyph_names;       /* array of glyph names       */
+    FT_Byte**        charstrings;       /* array of glyph charstrings */
+    FT_PtrDist*      charstrings_len;
+
+    FT_Byte          paint_type;
+    FT_Byte          font_type;
+    FT_Matrix        font_matrix;
+    FT_Vector        font_offset;
+    FT_BBox          font_bbox;
+    FT_Long          font_id;
+
+    FT_Fixed         stroke_width;
+
+  } T1_FontRec, *T1_Font;
+
+
+  typedef struct  CID_SubrsRec_
+  {
+    FT_UInt    num_subrs;
+    FT_Byte**  code;
+
+  } CID_SubrsRec, *CID_Subrs;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***                AFM FONT INFORMATION STRUCTURES                    ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  typedef struct  AFM_TrackKernRec_
+  {
+    FT_Int    degree;
+    FT_Fixed  min_ptsize;
+    FT_Fixed  min_kern;
+    FT_Fixed  max_ptsize;
+    FT_Fixed  max_kern;
+
+  } AFM_TrackKernRec, *AFM_TrackKern;
+
+  typedef struct  AFM_KernPairRec_
+  {
+    FT_Int  index1;
+    FT_Int  index2;
+    FT_Int  x;
+    FT_Int  y;
+
+  } AFM_KernPairRec, *AFM_KernPair;
+
+  typedef struct  AFM_FontInfoRec_
+  {
+    FT_Bool        IsCIDFont;
+    FT_BBox        FontBBox;
+    FT_Fixed       Ascender;
+    FT_Fixed       Descender;
+    AFM_TrackKern  TrackKerns;   /* free if non-NULL */
+    FT_Int         NumTrackKern;
+    AFM_KernPair   KernPairs;    /* free if non-NULL */
+    FT_Int         NumKernPair;
+
+  } AFM_FontInfoRec, *AFM_FontInfo;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***                ORIGINAL T1_FACE CLASS DEFINITION                  ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  typedef struct T1_FaceRec_*   T1_Face;
+  typedef struct CID_FaceRec_*  CID_Face;
+
+
+  typedef struct  T1_FaceRec_
+  {
+    FT_FaceRec      root;
+    T1_FontRec      type1;
+    const void*     psnames;
+    const void*     psaux;
+    const void*     afm_data;
+    FT_CharMapRec   charmaprecs[2];
+    FT_CharMap      charmaps[2];
+
+    /* support for Multiple Masters fonts */
+    PS_Blend        blend;
+
+    /* undocumented, optional: indices of subroutines that express      */
+    /* the NormalizeDesignVector and the ConvertDesignVector procedure, */
+    /* respectively, as Type 2 charstrings; -1 if keywords not present  */
+    FT_Int           ndv_idx;
+    FT_Int           cdv_idx;
+
+    /* undocumented, optional: has the same meaning as len_buildchar */
+    /* for Type 2 fonts; manipulated by othersubrs 19, 24, and 25    */
+    FT_UInt          len_buildchar;
+    FT_Long*         buildchar;
+
+    /* since version 2.1 - interface to PostScript hinter */
+    const void*     pshinter;
+
+  } T1_FaceRec;
+
+
+  typedef struct  CID_FaceRec_
+  {
+    FT_FaceRec       root;
+    void*            psnames;
+    void*            psaux;
+    CID_FaceInfoRec  cid;
+    PS_FontExtraRec  font_extra;
+#if 0
+    void*            afm_data;
+#endif
+    CID_Subrs        subrs;
+
+    /* since version 2.1 - interface to PostScript hinter */
+    void*            pshinter;
+
+    /* since version 2.1.8, but was originally positioned after `afm_data' */
+    FT_Byte*         binary_data; /* used if hex data has been converted */
+    FT_Stream        cid_stream;
+
+  } CID_FaceRec;
+
+
+FT_END_HEADER
+
+#endif /* __T1TYPES_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/internal/tttypes.h b/core/include/thirdparties/freetype/freetype/internal/tttypes.h
new file mode 100644
index 0000000..d6c1d62
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/internal/tttypes.h
@@ -0,0 +1,1440 @@
+/***************************************************************************/
+/*                                                                         */
+/*  tttypes.h                                                              */
+/*                                                                         */
+/*    Basic SFNT/TrueType type definitions and interface (specification    */
+/*    only).                                                               */
+/*                                                                         */
+/*  Copyright 1996-2002, 2004-2008, 2012-2013 by                           */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __TTTYPES_H__
+#define __TTTYPES_H__
+
+
+#include "../../ft2build.h"
+#include "../tttables.h"
+#include "ftobjs.h"
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#include "../ftmm.h"
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***             REQUIRED TRUETYPE/OPENTYPE TABLES DEFINITIONS         ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TTC_HeaderRec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    TrueType collection header.  This table contains the offsets of    */
+  /*    the font headers of each distinct TrueType face in the file.       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    tag     :: Must be `ttc ' to indicate a TrueType collection.       */
+  /*                                                                       */
+  /*    version :: The version number.                                     */
+  /*                                                                       */
+  /*    count   :: The number of faces in the collection.  The             */
+  /*               specification says this should be an unsigned long, but */
+  /*               we use a signed long since we need the value -1 for     */
+  /*               specific purposes.                                      */
+  /*                                                                       */
+  /*    offsets :: The offsets of the font headers, one per face.          */
+  /*                                                                       */
+  typedef struct  TTC_HeaderRec_
+  {
+    FT_ULong   tag;
+    FT_Fixed   version;
+    FT_Long    count;
+    FT_ULong*  offsets;
+
+  } TTC_HeaderRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    SFNT_HeaderRec                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    SFNT file format header.                                           */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    format_tag     :: The font format tag.                             */
+  /*                                                                       */
+  /*    num_tables     :: The number of tables in file.                    */
+  /*                                                                       */
+  /*    search_range   :: Must be `16 * (max power of 2 <= num_tables)'.   */
+  /*                                                                       */
+  /*    entry_selector :: Must be log2 of `search_range / 16'.             */
+  /*                                                                       */
+  /*    range_shift    :: Must be `num_tables * 16 - search_range'.        */
+  /*                                                                       */
+  typedef struct  SFNT_HeaderRec_
+  {
+    FT_ULong   format_tag;
+    FT_UShort  num_tables;
+    FT_UShort  search_range;
+    FT_UShort  entry_selector;
+    FT_UShort  range_shift;
+
+    FT_ULong   offset;  /* not in file */
+
+  } SFNT_HeaderRec, *SFNT_Header;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_TableRec                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This structure describes a given table of a TrueType font.         */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    Tag      :: A four-bytes tag describing the table.                 */
+  /*                                                                       */
+  /*    CheckSum :: The table checksum.  This value can be ignored.        */
+  /*                                                                       */
+  /*    Offset   :: The offset of the table from the start of the TrueType */
+  /*                font in its resource.                                  */
+  /*                                                                       */
+  /*    Length   :: The table length (in bytes).                           */
+  /*                                                                       */
+  typedef struct  TT_TableRec_
+  {
+    FT_ULong  Tag;        /*        table type */
+    FT_ULong  CheckSum;   /*    table checksum */
+    FT_ULong  Offset;     /* table file offset */
+    FT_ULong  Length;     /*      table length */
+
+  } TT_TableRec, *TT_Table;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_LongMetricsRec                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure modeling the long metrics of the `hmtx' and `vmtx'     */
+  /*    TrueType tables.  The values are expressed in font units.          */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    advance :: The advance width or height for the glyph.              */
+  /*                                                                       */
+  /*    bearing :: The left-side or top-side bearing for the glyph.        */
+  /*                                                                       */
+  typedef struct  TT_LongMetricsRec_
+  {
+    FT_UShort  advance;
+    FT_Short   bearing;
+
+  } TT_LongMetricsRec, *TT_LongMetrics;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    TT_ShortMetrics                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple type to model the short metrics of the `hmtx' and `vmtx'  */
+  /*    tables.                                                            */
+  /*                                                                       */
+  typedef FT_Short  TT_ShortMetrics;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_NameEntryRec                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure modeling TrueType name records.  Name records are used */
+  /*    to store important strings like family name, style name,           */
+  /*    copyright, etc. in _localized_ versions (i.e., language, encoding, */
+  /*    etc).                                                              */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    platformID   :: The ID of the name's encoding platform.            */
+  /*                                                                       */
+  /*    encodingID   :: The platform-specific ID for the name's encoding.  */
+  /*                                                                       */
+  /*    languageID   :: The platform-specific ID for the name's language.  */
+  /*                                                                       */
+  /*    nameID       :: The ID specifying what kind of name this is.       */
+  /*                                                                       */
+  /*    stringLength :: The length of the string in bytes.                 */
+  /*                                                                       */
+  /*    stringOffset :: The offset to the string in the `name' table.      */
+  /*                                                                       */
+  /*    string       :: A pointer to the string's bytes.  Note that these  */
+  /*                    are usually UTF-16 encoded characters.             */
+  /*                                                                       */
+  typedef struct  TT_NameEntryRec_
+  {
+    FT_UShort  platformID;
+    FT_UShort  encodingID;
+    FT_UShort  languageID;
+    FT_UShort  nameID;
+    FT_UShort  stringLength;
+    FT_ULong   stringOffset;
+
+    /* this last field is not defined in the spec */
+    /* but used by the FreeType engine            */
+
+    FT_Byte*   string;
+
+  } TT_NameEntryRec, *TT_NameEntry;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_NameTableRec                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure modeling the TrueType name table.                      */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    format         :: The format of the name table.                    */
+  /*                                                                       */
+  /*    numNameRecords :: The number of names in table.                    */
+  /*                                                                       */
+  /*    storageOffset  :: The offset of the name table in the `name'       */
+  /*                      TrueType table.                                  */
+  /*                                                                       */
+  /*    names          :: An array of name records.                        */
+  /*                                                                       */
+  /*    stream         :: the file's input stream.                         */
+  /*                                                                       */
+  typedef struct  TT_NameTableRec_
+  {
+    FT_UShort         format;
+    FT_UInt           numNameRecords;
+    FT_UInt           storageOffset;
+    TT_NameEntryRec*  names;
+    FT_Stream         stream;
+
+  } TT_NameTableRec, *TT_NameTable;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***             OPTIONAL TRUETYPE/OPENTYPE TABLES DEFINITIONS         ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_GaspRangeRec                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A tiny structure used to model a gasp range according to the       */
+  /*    TrueType specification.                                            */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    maxPPEM  :: The maximum ppem value to which `gaspFlag' applies.    */
+  /*                                                                       */
+  /*    gaspFlag :: A flag describing the grid-fitting and anti-aliasing   */
+  /*                modes to be used.                                      */
+  /*                                                                       */
+  typedef struct  TT_GaspRangeRec_
+  {
+    FT_UShort  maxPPEM;
+    FT_UShort  gaspFlag;
+
+  } TT_GaspRangeRec, *TT_GaspRange;
+
+
+#define TT_GASP_GRIDFIT  0x01
+#define TT_GASP_DOGRAY   0x02
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_GaspRec                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure modeling the TrueType `gasp' table used to specify     */
+  /*    grid-fitting and anti-aliasing behaviour.                          */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    version    :: The version number.                                  */
+  /*                                                                       */
+  /*    numRanges  :: The number of gasp ranges in table.                  */
+  /*                                                                       */
+  /*    gaspRanges :: An array of gasp ranges.                             */
+  /*                                                                       */
+  typedef struct  TT_Gasp_
+  {
+    FT_UShort     version;
+    FT_UShort     numRanges;
+    TT_GaspRange  gaspRanges;
+
+  } TT_GaspRec;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***                    EMBEDDED BITMAPS SUPPORT                       ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_SBit_MetricsRec                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to hold the big metrics of a given glyph bitmap   */
+  /*    in a TrueType or OpenType font.  These are usually found in the    */
+  /*    `EBDT' (Microsoft) or `bloc' (Apple) table.                        */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    height       :: The glyph height in pixels.                        */
+  /*                                                                       */
+  /*    width        :: The glyph width in pixels.                         */
+  /*                                                                       */
+  /*    horiBearingX :: The horizontal left bearing.                       */
+  /*                                                                       */
+  /*    horiBearingY :: The horizontal top bearing.                        */
+  /*                                                                       */
+  /*    horiAdvance  :: The horizontal advance.                            */
+  /*                                                                       */
+  /*    vertBearingX :: The vertical left bearing.                         */
+  /*                                                                       */
+  /*    vertBearingY :: The vertical top bearing.                          */
+  /*                                                                       */
+  /*    vertAdvance  :: The vertical advance.                              */
+  /*                                                                       */
+  typedef struct  TT_SBit_MetricsRec_
+  {
+    FT_Byte  height;
+    FT_Byte  width;
+
+    FT_Char  horiBearingX;
+    FT_Char  horiBearingY;
+    FT_Byte  horiAdvance;
+
+    FT_Char  vertBearingX;
+    FT_Char  vertBearingY;
+    FT_Byte  vertAdvance;
+
+  } TT_SBit_MetricsRec, *TT_SBit_Metrics;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_SBit_SmallMetricsRec                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to hold the small metrics of a given glyph bitmap */
+  /*    in a TrueType or OpenType font.  These are usually found in the    */
+  /*    `EBDT' (Microsoft) or the `bdat' (Apple) table.                    */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    height   :: The glyph height in pixels.                            */
+  /*                                                                       */
+  /*    width    :: The glyph width in pixels.                             */
+  /*                                                                       */
+  /*    bearingX :: The left-side bearing.                                 */
+  /*                                                                       */
+  /*    bearingY :: The top-side bearing.                                  */
+  /*                                                                       */
+  /*    advance  :: The advance width or height.                           */
+  /*                                                                       */
+  typedef struct  TT_SBit_Small_Metrics_
+  {
+    FT_Byte  height;
+    FT_Byte  width;
+
+    FT_Char  bearingX;
+    FT_Char  bearingY;
+    FT_Byte  advance;
+
+  } TT_SBit_SmallMetricsRec, *TT_SBit_SmallMetrics;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_SBit_LineMetricsRec                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to describe the text line metrics of a given      */
+  /*    bitmap strike, for either a horizontal or vertical layout.         */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    ascender                :: The ascender in pixels.                 */
+  /*                                                                       */
+  /*    descender               :: The descender in pixels.                */
+  /*                                                                       */
+  /*    max_width               :: The maximum glyph width in pixels.      */
+  /*                                                                       */
+  /*    caret_slope_enumerator  :: Rise of the caret slope, typically set  */
+  /*                               to 1 for non-italic fonts.              */
+  /*                                                                       */
+  /*    caret_slope_denominator :: Rise of the caret slope, typically set  */
+  /*                               to 0 for non-italic fonts.              */
+  /*                                                                       */
+  /*    caret_offset            :: Offset in pixels to move the caret for  */
+  /*                               proper positioning.                     */
+  /*                                                                       */
+  /*    min_origin_SB           :: Minimum of horiBearingX (resp.          */
+  /*                               vertBearingY).                          */
+  /*    min_advance_SB          :: Minimum of                              */
+  /*                                                                       */
+  /*                                 horizontal advance -                  */
+  /*                                   ( horiBearingX + width )            */
+  /*                                                                       */
+  /*                               resp.                                   */
+  /*                                                                       */
+  /*                                 vertical advance -                    */
+  /*                                   ( vertBearingY + height )           */
+  /*                                                                       */
+  /*    max_before_BL           :: Maximum of horiBearingY (resp.          */
+  /*                               vertBearingY).                          */
+  /*                                                                       */
+  /*    min_after_BL            :: Minimum of                              */
+  /*                                                                       */
+  /*                                 horiBearingY - height                 */
+  /*                                                                       */
+  /*                               resp.                                   */
+  /*                                                                       */
+  /*                                 vertBearingX - width                  */
+  /*                                                                       */
+  /*    pads                    :: Unused (to make the size of the record  */
+  /*                               a multiple of 32 bits.                  */
+  /*                                                                       */
+  typedef struct  TT_SBit_LineMetricsRec_
+  {
+    FT_Char  ascender;
+    FT_Char  descender;
+    FT_Byte  max_width;
+    FT_Char  caret_slope_numerator;
+    FT_Char  caret_slope_denominator;
+    FT_Char  caret_offset;
+    FT_Char  min_origin_SB;
+    FT_Char  min_advance_SB;
+    FT_Char  max_before_BL;
+    FT_Char  min_after_BL;
+    FT_Char  pads[2];
+
+  } TT_SBit_LineMetricsRec, *TT_SBit_LineMetrics;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_SBit_RangeRec                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A TrueType/OpenType subIndexTable as defined in the `EBLC'         */
+  /*    (Microsoft) or `bloc' (Apple) tables.                              */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    first_glyph   :: The first glyph index in the range.               */
+  /*                                                                       */
+  /*    last_glyph    :: The last glyph index in the range.                */
+  /*                                                                       */
+  /*    index_format  :: The format of index table.  Valid values are 1    */
+  /*                     to 5.                                             */
+  /*                                                                       */
+  /*    image_format  :: The format of `EBDT' image data.                  */
+  /*                                                                       */
+  /*    image_offset  :: The offset to image data in `EBDT'.               */
+  /*                                                                       */
+  /*    image_size    :: For index formats 2 and 5.  This is the size in   */
+  /*                     bytes of each glyph bitmap.                       */
+  /*                                                                       */
+  /*    big_metrics   :: For index formats 2 and 5.  This is the big       */
+  /*                     metrics for each glyph bitmap.                    */
+  /*                                                                       */
+  /*    num_glyphs    :: For index formats 4 and 5.  This is the number of */
+  /*                     glyphs in the code array.                         */
+  /*                                                                       */
+  /*    glyph_offsets :: For index formats 1 and 3.                        */
+  /*                                                                       */
+  /*    glyph_codes   :: For index formats 4 and 5.                        */
+  /*                                                                       */
+  /*    table_offset  :: The offset of the index table in the `EBLC'       */
+  /*                     table.  Only used during strike loading.          */
+  /*                                                                       */
+  typedef struct  TT_SBit_RangeRec_
+  {
+    FT_UShort           first_glyph;
+    FT_UShort           last_glyph;
+
+    FT_UShort           index_format;
+    FT_UShort           image_format;
+    FT_ULong            image_offset;
+
+    FT_ULong            image_size;
+    TT_SBit_MetricsRec  metrics;
+    FT_ULong            num_glyphs;
+
+    FT_ULong*           glyph_offsets;
+    FT_UShort*          glyph_codes;
+
+    FT_ULong            table_offset;
+
+  } TT_SBit_RangeRec, *TT_SBit_Range;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_SBit_StrikeRec                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used describe a given bitmap strike in the `EBLC'      */
+  /*    (Microsoft) or `bloc' (Apple) tables.                              */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*   num_index_ranges :: The number of index ranges.                     */
+  /*                                                                       */
+  /*   index_ranges     :: An array of glyph index ranges.                 */
+  /*                                                                       */
+  /*   color_ref        :: Unused.  `color_ref' is put in for future       */
+  /*                       enhancements, but these fields are already      */
+  /*                       in use by other platforms (e.g. Newton).        */
+  /*                       For details, please see                         */
+  /*                                                                       */
+  /*                         http://fonts.apple.com/                       */
+  /*                                TTRefMan/RM06/Chap6bloc.html           */
+  /*                                                                       */
+  /*   hori             :: The line metrics for horizontal layouts.        */
+  /*                                                                       */
+  /*   vert             :: The line metrics for vertical layouts.          */
+  /*                                                                       */
+  /*   start_glyph      :: The lowest glyph index for this strike.         */
+  /*                                                                       */
+  /*   end_glyph        :: The highest glyph index for this strike.        */
+  /*                                                                       */
+  /*   x_ppem           :: The number of horizontal pixels per EM.         */
+  /*                                                                       */
+  /*   y_ppem           :: The number of vertical pixels per EM.           */
+  /*                                                                       */
+  /*   bit_depth        :: The bit depth.  Valid values are 1, 2, 4,       */
+  /*                       and 8.                                          */
+  /*                                                                       */
+  /*   flags            :: Is this a vertical or horizontal strike?  For   */
+  /*                       details, please see                             */
+  /*                                                                       */
+  /*                         http://fonts.apple.com/                       */
+  /*                                TTRefMan/RM06/Chap6bloc.html           */
+  /*                                                                       */
+  typedef struct  TT_SBit_StrikeRec_
+  {
+    FT_Int                  num_ranges;
+    TT_SBit_Range           sbit_ranges;
+    FT_ULong                ranges_offset;
+
+    FT_ULong                color_ref;
+
+    TT_SBit_LineMetricsRec  hori;
+    TT_SBit_LineMetricsRec  vert;
+
+    FT_UShort               start_glyph;
+    FT_UShort               end_glyph;
+
+    FT_Byte                 x_ppem;
+    FT_Byte                 y_ppem;
+
+    FT_Byte                 bit_depth;
+    FT_Char                 flags;
+
+  } TT_SBit_StrikeRec, *TT_SBit_Strike;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_SBit_ComponentRec                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A simple structure to describe a compound sbit element.            */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    glyph_code :: The element's glyph index.                           */
+  /*                                                                       */
+  /*    x_offset   :: The element's left bearing.                          */
+  /*                                                                       */
+  /*    y_offset   :: The element's top bearing.                           */
+  /*                                                                       */
+  typedef struct  TT_SBit_ComponentRec_
+  {
+    FT_UShort  glyph_code;
+    FT_Char    x_offset;
+    FT_Char    y_offset;
+
+  } TT_SBit_ComponentRec, *TT_SBit_Component;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_SBit_ScaleRec                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used describe a given bitmap scaling table, as defined */
+  /*    in the `EBSC' table.                                               */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    hori              :: The horizontal line metrics.                  */
+  /*                                                                       */
+  /*    vert              :: The vertical line metrics.                    */
+  /*                                                                       */
+  /*    x_ppem            :: The number of horizontal pixels per EM.       */
+  /*                                                                       */
+  /*    y_ppem            :: The number of vertical pixels per EM.         */
+  /*                                                                       */
+  /*    x_ppem_substitute :: Substitution x_ppem value.                    */
+  /*                                                                       */
+  /*    y_ppem_substitute :: Substitution y_ppem value.                    */
+  /*                                                                       */
+  typedef struct  TT_SBit_ScaleRec_
+  {
+    TT_SBit_LineMetricsRec  hori;
+    TT_SBit_LineMetricsRec  vert;
+
+    FT_Byte                 x_ppem;
+    FT_Byte                 y_ppem;
+
+    FT_Byte                 x_ppem_substitute;
+    FT_Byte                 y_ppem_substitute;
+
+  } TT_SBit_ScaleRec, *TT_SBit_Scale;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***                  POSTSCRIPT GLYPH NAMES SUPPORT                   ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_Post_20Rec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Postscript names sub-table, format 2.0.  Stores the PS name of     */
+  /*    each glyph in the font face.                                       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    num_glyphs    :: The number of named glyphs in the table.          */
+  /*                                                                       */
+  /*    num_names     :: The number of PS names stored in the table.       */
+  /*                                                                       */
+  /*    glyph_indices :: The indices of the glyphs in the names arrays.    */
+  /*                                                                       */
+  /*    glyph_names   :: The PS names not in Mac Encoding.                 */
+  /*                                                                       */
+  typedef struct  TT_Post_20Rec_
+  {
+    FT_UShort   num_glyphs;
+    FT_UShort   num_names;
+    FT_UShort*  glyph_indices;
+    FT_Char**   glyph_names;
+
+  } TT_Post_20Rec, *TT_Post_20;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_Post_25Rec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Postscript names sub-table, format 2.5.  Stores the PS name of     */
+  /*    each glyph in the font face.                                       */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    num_glyphs :: The number of glyphs in the table.                   */
+  /*                                                                       */
+  /*    offsets    :: An array of signed offsets in a normal Mac           */
+  /*                  Postscript name encoding.                            */
+  /*                                                                       */
+  typedef struct  TT_Post_25_
+  {
+    FT_UShort  num_glyphs;
+    FT_Char*   offsets;
+
+  } TT_Post_25Rec, *TT_Post_25;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_Post_NamesRec                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Postscript names table, either format 2.0 or 2.5.                  */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    loaded    :: A flag to indicate whether the PS names are loaded.   */
+  /*                                                                       */
+  /*    format_20 :: The sub-table used for format 2.0.                    */
+  /*                                                                       */
+  /*    format_25 :: The sub-table used for format 2.5.                    */
+  /*                                                                       */
+  typedef struct  TT_Post_NamesRec_
+  {
+    FT_Bool  loaded;
+
+    union
+    {
+      TT_Post_20Rec  format_20;
+      TT_Post_25Rec  format_25;
+
+    } names;
+
+  } TT_Post_NamesRec, *TT_Post_Names;
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***                    GX VARIATION TABLE SUPPORT                     ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+  typedef struct GX_BlendRec_  *GX_Blend;
+#endif
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***              EMBEDDED BDF PROPERTIES TABLE SUPPORT                ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+  /*
+   * These types are used to support a `BDF ' table that isn't part of the
+   * official TrueType specification.  It is mainly used in SFNT-based
+   * bitmap fonts that were generated from a set of BDF fonts.
+   *
+   * The format of the table is as follows.
+   *
+   *   USHORT   version      `BDF ' table version number, should be 0x0001.
+   *   USHORT   strikeCount  Number of strikes (bitmap sizes) in this table.
+   *   ULONG    stringTable  Offset (from start of BDF table) to string
+   *                         table.
+   *
+   * This is followed by an array of `strikeCount' descriptors, having the
+   * following format.
+   *
+   *   USHORT   ppem         Vertical pixels per EM for this strike.
+   *   USHORT   numItems     Number of items for this strike (properties and
+   *                         atoms).  Maximum is 255.
+   *
+   * This array in turn is followed by `strikeCount' value sets.  Each
+   * `value set' is an array of `numItems' items with the following format.
+   *
+   *   ULONG    item_name    Offset in string table to item name.
+   *   USHORT   item_type    The item type.  Possible values are
+   *                            0 => string (e.g., COMMENT)
+   *                            1 => atom   (e.g., FONT or even SIZE)
+   *                            2 => int32
+   *                            3 => uint32
+   *                         0x10 => A flag to indicate a properties.  This
+   *                                 is ORed with the above values.
+   *   ULONG    item_value   For strings  => Offset into string table without
+   *                                         the corresponding double quotes.
+   *                         For atoms    => Offset into string table.
+   *                         For integers => Direct value.
+   *
+   * All strings in the string table consist of bytes and are
+   * zero-terminated.
+   *
+   */
+
+#ifdef TT_CONFIG_OPTION_BDF
+
+  typedef struct  TT_BDFRec_
+  {
+    FT_Byte*   table;
+    FT_Byte*   table_end;
+    FT_Byte*   strings;
+    FT_ULong   strings_size;
+    FT_UInt    num_strikes;
+    FT_Bool    loaded;
+
+  } TT_BDFRec, *TT_BDF;
+
+#endif /* TT_CONFIG_OPTION_BDF */
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /***                  ORIGINAL TT_FACE CLASS DEFINITION                ***/
+  /***                                                                   ***/
+  /***                                                                   ***/
+  /*************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This structure/class is defined here because it is common to the      */
+  /* following formats: TTF, OpenType-TT, and OpenType-CFF.                */
+  /*                                                                       */
+  /* Note, however, that the classes TT_Size and TT_GlyphSlot are not      */
+  /* shared between font drivers, and are thus defined in `ttobjs.h'.      */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Type>                                                                */
+  /*    TT_Face                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a TrueType face/font object.  A TT_Face encapsulates   */
+  /*    the resolution and scaling independent parts of a TrueType font    */
+  /*    resource.                                                          */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The TT_Face structure is also used as a `parent class' for the     */
+  /*    OpenType-CFF class (T2_Face).                                      */
+  /*                                                                       */
+  typedef struct TT_FaceRec_*  TT_Face;
+
+
+  /* a function type used for the truetype bytecode interpreter hooks */
+  typedef FT_Error
+  (*TT_Interpreter)( void*  exec_context );
+
+  /* forward declaration */
+  typedef struct TT_LoaderRec_*  TT_Loader;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Loader_GotoTableFunc                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Seeks a stream to the start of a given TrueType table.             */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face   :: A handle to the target face object.                      */
+  /*                                                                       */
+  /*    tag    :: A 4-byte tag used to name the table.                     */
+  /*                                                                       */
+  /*    stream :: The input stream.                                        */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    length :: The length of the table in bytes.  Set to 0 if not       */
+  /*              needed.                                                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The stream cursor must be at the font file's origin.               */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Loader_GotoTableFunc)( TT_Face    face,
+                              FT_ULong   tag,
+                              FT_Stream  stream,
+                              FT_ULong*  length );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Loader_StartGlyphFunc                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Seeks a stream to the start of a given glyph element, and opens a  */
+  /*    frame for it.                                                      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    loader      :: The current TrueType glyph loader object.           */
+  /*                                                                       */
+  /*    glyph index :: The index of the glyph to access.                   */
+  /*                                                                       */
+  /*    offset      :: The offset of the glyph according to the            */
+  /*                   `locations' table.                                  */
+  /*                                                                       */
+  /*    byte_count  :: The size of the frame in bytes.                     */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function is normally equivalent to FT_STREAM_SEEK(offset)     */
+  /*    followed by FT_FRAME_ENTER(byte_count) with the loader's stream,   */
+  /*    but alternative formats (e.g. compressed ones) might use something */
+  /*    different.                                                         */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Loader_StartGlyphFunc)( TT_Loader  loader,
+                               FT_UInt    glyph_index,
+                               FT_ULong   offset,
+                               FT_UInt    byte_count );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Loader_ReadGlyphFunc                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Reads one glyph element (its header, a simple glyph, or a          */
+  /*    composite) from the loader's current stream frame.                 */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    loader :: The current TrueType glyph loader object.                */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  typedef FT_Error
+  (*TT_Loader_ReadGlyphFunc)( TT_Loader  loader );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <FuncType>                                                            */
+  /*    TT_Loader_EndGlyphFunc                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Closes the current loader stream frame for the glyph.              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    loader :: The current TrueType glyph loader object.                */
+  /*                                                                       */
+  typedef void
+  (*TT_Loader_EndGlyphFunc)( TT_Loader  loader );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                         TrueType Face Type                            */
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_Face                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The TrueType face class.  These objects model the resolution and   */
+  /*    point-size independent data found in a TrueType font file.         */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    root                 :: The base FT_Face structure, managed by the */
+  /*                            base layer.                                */
+  /*                                                                       */
+  /*    ttc_header           :: The TrueType collection header, used when  */
+  /*                            the file is a `ttc' rather than a `ttf'.   */
+  /*                            For ordinary font files, the field         */
+  /*                            `ttc_header.count' is set to 0.            */
+  /*                                                                       */
+  /*    format_tag           :: The font format tag.                       */
+  /*                                                                       */
+  /*    num_tables           :: The number of TrueType tables in this font */
+  /*                            file.                                      */
+  /*                                                                       */
+  /*    dir_tables           :: The directory of TrueType tables for this  */
+  /*                            font file.                                 */
+  /*                                                                       */
+  /*    header               :: The font's font header (`head' table).     */
+  /*                            Read on font opening.                      */
+  /*                                                                       */
+  /*    horizontal           :: The font's horizontal header (`hhea'       */
+  /*                            table).  This field also contains the      */
+  /*                            associated horizontal metrics table        */
+  /*                            (`hmtx').                                  */
+  /*                                                                       */
+  /*    max_profile          :: The font's maximum profile table.  Read on */
+  /*                            font opening.  Note that some maximum      */
+  /*                            values cannot be taken directly from this  */
+  /*                            table.  We thus define additional fields   */
+  /*                            below to hold the computed maxima.         */
+  /*                                                                       */
+  /*    vertical_info        :: A boolean which is set when the font file  */
+  /*                            contains vertical metrics.  If not, the    */
+  /*                            value of the `vertical' field is           */
+  /*                            undefined.                                 */
+  /*                                                                       */
+  /*    vertical             :: The font's vertical header (`vhea' table). */
+  /*                            This field also contains the associated    */
+  /*                            vertical metrics table (`vmtx'), if found. */
+  /*                            IMPORTANT: The contents of this field is   */
+  /*                            undefined if the `verticalInfo' field is   */
+  /*                            unset.                                     */
+  /*                                                                       */
+  /*    num_names            :: The number of name records within this     */
+  /*                            TrueType font.                             */
+  /*                                                                       */
+  /*    name_table           :: The table of name records (`name').        */
+  /*                                                                       */
+  /*    os2                  :: The font's OS/2 table (`OS/2').            */
+  /*                                                                       */
+  /*    postscript           :: The font's PostScript table (`post'        */
+  /*                            table).  The PostScript glyph names are    */
+  /*                            not loaded by the driver on face opening.  */
+  /*                            See the `ttpost' module for more details.  */
+  /*                                                                       */
+  /*    cmap_table           :: Address of the face's `cmap' SFNT table    */
+  /*                            in memory (it's an extracted frame).       */
+  /*                                                                       */
+  /*    cmap_size            :: The size in bytes of the `cmap_table'      */
+  /*                            described above.                           */
+  /*                                                                       */
+  /*    goto_table           :: A function called by each TrueType table   */
+  /*                            loader to position a stream's cursor to    */
+  /*                            the start of a given table according to    */
+  /*                            its tag.  It defaults to TT_Goto_Face but  */
+  /*                            can be different for strange formats (e.g. */
+  /*                            Type 42).                                  */
+  /*                                                                       */
+  /*    access_glyph_frame   :: A function used to access the frame of a   */
+  /*                            given glyph within the face's font file.   */
+  /*                                                                       */
+  /*    forget_glyph_frame   :: A function used to forget the frame of a   */
+  /*                            given glyph when all data has been loaded. */
+  /*                                                                       */
+  /*    read_glyph_header    :: A function used to read a glyph header.    */
+  /*                            It must be called between an `access' and  */
+  /*                            `forget'.                                  */
+  /*                                                                       */
+  /*    read_simple_glyph    :: A function used to read a simple glyph.    */
+  /*                            It must be called after the header was     */
+  /*                            read, and before the `forget'.             */
+  /*                                                                       */
+  /*    read_composite_glyph :: A function used to read a composite glyph. */
+  /*                            It must be called after the header was     */
+  /*                            read, and before the `forget'.             */
+  /*                                                                       */
+  /*    sfnt                 :: A pointer to the SFNT service.             */
+  /*                                                                       */
+  /*    psnames              :: A pointer to the PostScript names service. */
+  /*                                                                       */
+  /*    hdmx                 :: The face's horizontal device metrics       */
+  /*                            (`hdmx' table).  This table is optional in */
+  /*                            TrueType/OpenType fonts.                   */
+  /*                                                                       */
+  /*    gasp                 :: The grid-fitting and scaling properties    */
+  /*                            table (`gasp').  This table is optional in */
+  /*                            TrueType/OpenType fonts.                   */
+  /*                                                                       */
+  /*    pclt                 :: The `pclt' SFNT table.                     */
+  /*                                                                       */
+  /*    num_sbit_strikes     :: The number of sbit strikes, i.e., bitmap   */
+  /*                            sizes, embedded in this font.              */
+  /*                                                                       */
+  /*    sbit_strikes         :: An array of sbit strikes embedded in this  */
+  /*                            font.  This table is optional in a         */
+  /*                            TrueType/OpenType font.                    */
+  /*                                                                       */
+  /*    num_sbit_scales      :: The number of sbit scales for this font.   */
+  /*                                                                       */
+  /*    sbit_scales          :: Array of sbit scales embedded in this      */
+  /*                            font.  This table is optional in a         */
+  /*                            TrueType/OpenType font.                    */
+  /*                                                                       */
+  /*    postscript_names     :: A table used to store the Postscript names */
+  /*                            of  the glyphs for this font.  See the     */
+  /*                            file  `ttconfig.h' for comments on the     */
+  /*                            TT_CONFIG_OPTION_POSTSCRIPT_NAMES option.  */
+  /*                                                                       */
+  /*    num_locations        :: The number of glyph locations in this      */
+  /*                            TrueType file.  This should be             */
+  /*                            identical to the number of glyphs.         */
+  /*                            Ignored for Type 2 fonts.                  */
+  /*                                                                       */
+  /*    glyph_locations      :: An array of longs.  These are offsets to   */
+  /*                            glyph data within the `glyf' table.        */
+  /*                            Ignored for Type 2 font faces.             */
+  /*                                                                       */
+  /*    glyf_len             :: The length of the `glyf' table.  Needed    */
+  /*                            for malformed `loca' tables.               */
+  /*                                                                       */
+  /*    font_program_size    :: Size in bytecodes of the face's font       */
+  /*                            program.  0 if none defined.  Ignored for  */
+  /*                            Type 2 fonts.                              */
+  /*                                                                       */
+  /*    font_program         :: The face's font program (bytecode stream)  */
+  /*                            executed at load time, also used during    */
+  /*                            glyph rendering.  Comes from the `fpgm'    */
+  /*                            table.  Ignored for Type 2 font fonts.     */
+  /*                                                                       */
+  /*    cvt_program_size     :: The size in bytecodes of the face's cvt    */
+  /*                            program.  Ignored for Type 2 fonts.        */
+  /*                                                                       */
+  /*    cvt_program          :: The face's cvt program (bytecode stream)   */
+  /*                            executed each time an instance/size is     */
+  /*                            changed/reset.  Comes from the `prep'      */
+  /*                            table.  Ignored for Type 2 fonts.          */
+  /*                                                                       */
+  /*    cvt_size             :: Size of the control value table (in        */
+  /*                            entries).   Ignored for Type 2 fonts.      */
+  /*                                                                       */
+  /*    cvt                  :: The face's original control value table.   */
+  /*                            Coordinates are expressed in unscaled font */
+  /*                            units.  Comes from the `cvt ' table.       */
+  /*                            Ignored for Type 2 fonts.                  */
+  /*                                                                       */
+  /*    num_kern_pairs       :: The number of kerning pairs present in the */
+  /*                            font file.  The engine only loads the      */
+  /*                            first horizontal format 0 kern table it    */
+  /*                            finds in the font file.  Ignored for       */
+  /*                            Type 2 fonts.                              */
+  /*                                                                       */
+  /*    kern_table_index     :: The index of the kerning table in the font */
+  /*                            kerning directory.  Ignored for Type 2     */
+  /*                            fonts.                                     */
+  /*                                                                       */
+  /*    interpreter          :: A pointer to the TrueType bytecode         */
+  /*                            interpreters field is also used to hook    */
+  /*                            the debugger in `ttdebug'.                 */
+  /*                                                                       */
+  /*    unpatented_hinting   :: If true, use only unpatented methods in    */
+  /*                            the bytecode interpreter.                  */
+  /*                                                                       */
+  /*    doblend              :: A boolean which is set if the font should  */
+  /*                            be blended (this is for GX var).           */
+  /*                                                                       */
+  /*    blend                :: Contains the data needed to control GX     */
+  /*                            variation tables (rather like Multiple     */
+  /*                            Master data).                              */
+  /*                                                                       */
+  /*    extra                :: Reserved for third-party font drivers.     */
+  /*                                                                       */
+  /*    postscript_name      :: The PS name of the font.  Used by the      */
+  /*                            postscript name service.                   */
+  /*                                                                       */
+  typedef struct  TT_FaceRec_
+  {
+    FT_FaceRec            root;
+
+    TTC_HeaderRec         ttc_header;
+
+    FT_ULong              format_tag;
+    FT_UShort             num_tables;
+    TT_Table              dir_tables;
+
+    TT_Header             header;       /* TrueType header table          */
+    TT_HoriHeader         horizontal;   /* TrueType horizontal header     */
+
+    TT_MaxProfile         max_profile;
+
+    FT_Bool               vertical_info;
+    TT_VertHeader         vertical;     /* TT Vertical header, if present */
+
+    FT_UShort             num_names;    /* number of name records  */
+    TT_NameTableRec       name_table;   /* name table              */
+
+    TT_OS2                os2;          /* TrueType OS/2 table            */
+    TT_Postscript         postscript;   /* TrueType Postscript table      */
+
+    FT_Byte*              cmap_table;   /* extracted `cmap' table */
+    FT_ULong              cmap_size;
+
+    TT_Loader_GotoTableFunc   goto_table;
+
+    TT_Loader_StartGlyphFunc  access_glyph_frame;
+    TT_Loader_EndGlyphFunc    forget_glyph_frame;
+    TT_Loader_ReadGlyphFunc   read_glyph_header;
+    TT_Loader_ReadGlyphFunc   read_simple_glyph;
+    TT_Loader_ReadGlyphFunc   read_composite_glyph;
+
+    /* a typeless pointer to the SFNT_Interface table used to load */
+    /* the basic TrueType tables in the face object                */
+    void*                 sfnt;
+
+    /* a typeless pointer to the FT_Service_PsCMapsRec table used to */
+    /* handle glyph names <-> unicode & Mac values                   */
+    void*                 psnames;
+
+
+    /***********************************************************************/
+    /*                                                                     */
+    /* Optional TrueType/OpenType tables                                   */
+    /*                                                                     */
+    /***********************************************************************/
+
+    /* grid-fitting and scaling table */
+    TT_GaspRec            gasp;                 /* the `gasp' table */
+
+    /* PCL 5 table */
+    TT_PCLT               pclt;
+
+    /* embedded bitmaps support */
+    FT_ULong              num_sbit_scales;
+    TT_SBit_Scale         sbit_scales;
+
+    /* postscript names table */
+    TT_Post_NamesRec      postscript_names;
+
+
+    /***********************************************************************/
+    /*                                                                     */
+    /* TrueType-specific fields (ignored by the OTF-Type2 driver)          */
+    /*                                                                     */
+    /***********************************************************************/
+
+    /* the font program, if any */
+    FT_ULong              font_program_size;
+    FT_Byte*              font_program;
+
+    /* the cvt program, if any */
+    FT_ULong              cvt_program_size;
+    FT_Byte*              cvt_program;
+
+    /* the original, unscaled, control value table */
+    FT_ULong              cvt_size;
+    FT_Short*             cvt;
+
+    /* A pointer to the bytecode interpreter to use.  This is also */
+    /* used to hook the debugger for the `ttdebug' utility.        */
+    TT_Interpreter        interpreter;
+
+#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING
+    /* Use unpatented hinting only. */
+    FT_Bool               unpatented_hinting;
+#endif
+
+    /***********************************************************************/
+    /*                                                                     */
+    /* Other tables or fields. This is used by derivative formats like     */
+    /* OpenType.                                                           */
+    /*                                                                     */
+    /***********************************************************************/
+
+    FT_Generic            extra;
+
+    const char*           postscript_name;
+
+    FT_ULong              glyf_len;
+
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+    FT_Bool               doblend;
+    GX_Blend              blend;
+#endif
+
+    /* since version 2.2 */
+
+    FT_Byte*              horz_metrics;
+    FT_ULong              horz_metrics_size;
+
+    FT_Byte*              vert_metrics;
+    FT_ULong              vert_metrics_size;
+
+    FT_ULong              num_locations; /* in broken TTF, gid > 0xFFFF */
+    FT_Byte*              glyph_locations;
+
+    FT_Byte*              hdmx_table;
+    FT_ULong              hdmx_table_size;
+    FT_UInt               hdmx_record_count;
+    FT_ULong              hdmx_record_size;
+    FT_Byte*              hdmx_record_sizes;
+
+    FT_Byte*              sbit_table;
+    FT_ULong              sbit_table_size;
+    FT_UInt               sbit_num_strikes;
+
+    FT_Byte*              kern_table;
+    FT_ULong              kern_table_size;
+    FT_UInt               num_kern_tables;
+    FT_UInt32             kern_avail_bits;
+    FT_UInt32             kern_order_bits;
+
+#ifdef TT_CONFIG_OPTION_BDF
+    TT_BDFRec             bdf;
+#endif /* TT_CONFIG_OPTION_BDF */
+
+    /* since 2.3.0 */
+    FT_ULong              horz_metrics_offset;
+    FT_ULong              vert_metrics_offset;
+
+#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
+    /* since 2.4.12 */
+    FT_ULong              sph_found_func_flags; /* special functions found */
+                                                /* for this face           */
+    FT_Bool               sph_compatibility_mode;
+#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
+
+  } TT_FaceRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*  <Struct>                                                             */
+  /*     TT_GlyphZoneRec                                                   */
+  /*                                                                       */
+  /*  <Description>                                                        */
+  /*     A glyph zone is used to load, scale and hint glyph outline        */
+  /*     coordinates.                                                      */
+  /*                                                                       */
+  /*  <Fields>                                                             */
+  /*     memory       :: A handle to the memory manager.                   */
+  /*                                                                       */
+  /*     max_points   :: The maximum size in points of the zone.           */
+  /*                                                                       */
+  /*     max_contours :: Max size in links contours of the zone.           */
+  /*                                                                       */
+  /*     n_points     :: The current number of points in the zone.         */
+  /*                                                                       */
+  /*     n_contours   :: The current number of contours in the zone.       */
+  /*                                                                       */
+  /*     org          :: The original glyph coordinates (font              */
+  /*                     units/scaled).                                    */
+  /*                                                                       */
+  /*     cur          :: The current glyph coordinates (scaled/hinted).    */
+  /*                                                                       */
+  /*     tags         :: The point control tags.                           */
+  /*                                                                       */
+  /*     contours     :: The contours end points.                          */
+  /*                                                                       */
+  /*     first_point  :: Offset of the current subglyph's first point.     */
+  /*                                                                       */
+  typedef struct  TT_GlyphZoneRec_
+  {
+    FT_Memory   memory;
+    FT_UShort   max_points;
+    FT_UShort   max_contours;
+    FT_UShort   n_points;    /* number of points in zone    */
+    FT_Short    n_contours;  /* number of contours          */
+
+    FT_Vector*  org;         /* original point coordinates  */
+    FT_Vector*  cur;         /* current point coordinates   */
+    FT_Vector*  orus;        /* original (unscaled) point coordinates */
+
+    FT_Byte*    tags;        /* current touch flags         */
+    FT_UShort*  contours;    /* contour end points          */
+
+    FT_UShort   first_point; /* offset of first (#0) point  */
+
+  } TT_GlyphZoneRec, *TT_GlyphZone;
+
+
+  /* handle to execution context */
+  typedef struct TT_ExecContextRec_*  TT_ExecContext;
+
+  /* glyph loader structure */
+  typedef struct  TT_LoaderRec_
+  {
+    FT_Face          face;
+    FT_Size          size;
+    FT_GlyphSlot     glyph;
+    FT_GlyphLoader   gloader;
+
+    FT_ULong         load_flags;
+    FT_UInt          glyph_index;
+
+    FT_Stream        stream;
+    FT_Int           byte_len;
+
+    FT_Short         n_contours;
+    FT_BBox          bbox;
+    FT_Int           left_bearing;
+    FT_Int           advance;
+    FT_Int           linear;
+    FT_Bool          linear_def;
+    FT_Bool          preserve_pps;
+    FT_Vector        pp1;
+    FT_Vector        pp2;
+
+    FT_ULong         glyf_offset;
+
+    /* the zone where we load our glyphs */
+    TT_GlyphZoneRec  base;
+    TT_GlyphZoneRec  zone;
+
+    TT_ExecContext   exec;
+    FT_Byte*         instructions;
+    FT_ULong         ins_pos;
+
+    /* for possible extensibility in other formats */
+    void*            other;
+
+    /* since version 2.1.8 */
+    FT_Int           top_bearing;
+    FT_Int           vadvance;
+    FT_Vector        pp3;
+    FT_Vector        pp4;
+
+    /* since version 2.2.1 */
+    FT_Byte*         cursor;
+    FT_Byte*         limit;
+
+  } TT_LoaderRec;
+
+
+FT_END_HEADER
+
+#endif /* __TTTYPES_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/t1tables.h b/core/include/thirdparties/freetype/freetype/t1tables.h
new file mode 100644
index 0000000..6530094
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/t1tables.h
@@ -0,0 +1,662 @@
+/***************************************************************************/
+/*                                                                         */
+/*  t1tables.h                                                             */
+/*                                                                         */
+/*    Basic Type 1/Type 2 tables definitions and interface (specification  */
+/*    only).                                                               */
+/*                                                                         */
+/*  Copyright 1996-2004, 2006, 2008, 2009, 2011 by                         */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __T1TABLES_H__
+#define __T1TABLES_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    type1_tables                                                       */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    Type 1 Tables                                                      */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    Type~1 (PostScript) specific font tables.                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the definition of Type 1-specific tables,    */
+  /*    including structures related to other PostScript font formats.     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */
+  /* structures in order to support Multiple Master fonts.               */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    PS_FontInfoRec                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a Type~1 or Type~2 FontInfo dictionary.  */
+  /*    Note that for Multiple Master fonts, each instance has its own     */
+  /*    FontInfo dictionary.                                               */
+  /*                                                                       */
+  typedef struct  PS_FontInfoRec_
+  {
+    FT_String*  version;
+    FT_String*  notice;
+    FT_String*  full_name;
+    FT_String*  family_name;
+    FT_String*  weight;
+    FT_Long     italic_angle;
+    FT_Bool     is_fixed_pitch;
+    FT_Short    underline_position;
+    FT_UShort   underline_thickness;
+
+  } PS_FontInfoRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    PS_FontInfo                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a @PS_FontInfoRec structure.                           */
+  /*                                                                       */
+  typedef struct PS_FontInfoRec_*  PS_FontInfo;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    T1_FontInfo                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This type is equivalent to @PS_FontInfoRec.  It is deprecated but  */
+  /*    kept to maintain source compatibility between various versions of  */
+  /*    FreeType.                                                          */
+  /*                                                                       */
+  typedef PS_FontInfoRec  T1_FontInfo;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    PS_PrivateRec                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a Type~1 or Type~2 private dictionary.   */
+  /*    Note that for Multiple Master fonts, each instance has its own     */
+  /*    Private dictionary.                                                */
+  /*                                                                       */
+  typedef struct  PS_PrivateRec_
+  {
+    FT_Int     unique_id;
+    FT_Int     lenIV;
+
+    FT_Byte    num_blue_values;
+    FT_Byte    num_other_blues;
+    FT_Byte    num_family_blues;
+    FT_Byte    num_family_other_blues;
+
+    FT_Short   blue_values[14];
+    FT_Short   other_blues[10];
+
+    FT_Short   family_blues      [14];
+    FT_Short   family_other_blues[10];
+
+    FT_Fixed   blue_scale;
+    FT_Int     blue_shift;
+    FT_Int     blue_fuzz;
+
+    FT_UShort  standard_width[1];
+    FT_UShort  standard_height[1];
+
+    FT_Byte    num_snap_widths;
+    FT_Byte    num_snap_heights;
+    FT_Bool    force_bold;
+    FT_Bool    round_stem_up;
+
+    FT_Short   snap_widths [13];  /* including std width  */
+    FT_Short   snap_heights[13];  /* including std height */
+
+    FT_Fixed   expansion_factor;
+
+    FT_Long    language_group;
+    FT_Long    password;
+
+    FT_Short   min_feature[2];
+
+  } PS_PrivateRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    PS_Private                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a @PS_PrivateRec structure.                            */
+  /*                                                                       */
+  typedef struct PS_PrivateRec_*  PS_Private;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    T1_Private                                                         */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*   This type is equivalent to @PS_PrivateRec.  It is deprecated but    */
+  /*   kept to maintain source compatibility between various versions of   */
+  /*   FreeType.                                                           */
+  /*                                                                       */
+  typedef PS_PrivateRec  T1_Private;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    T1_Blend_Flags                                                     */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A set of flags used to indicate which fields are present in a      */
+  /*    given blend dictionary (font info or private).  Used to support    */
+  /*    Multiple Masters fonts.                                            */
+  /*                                                                       */
+  typedef enum  T1_Blend_Flags_
+  {
+    /*# required fields in a FontInfo blend dictionary */
+    T1_BLEND_UNDERLINE_POSITION = 0,
+    T1_BLEND_UNDERLINE_THICKNESS,
+    T1_BLEND_ITALIC_ANGLE,
+
+    /*# required fields in a Private blend dictionary */
+    T1_BLEND_BLUE_VALUES,
+    T1_BLEND_OTHER_BLUES,
+    T1_BLEND_STANDARD_WIDTH,
+    T1_BLEND_STANDARD_HEIGHT,
+    T1_BLEND_STEM_SNAP_WIDTHS,
+    T1_BLEND_STEM_SNAP_HEIGHTS,
+    T1_BLEND_BLUE_SCALE,
+    T1_BLEND_BLUE_SHIFT,
+    T1_BLEND_FAMILY_BLUES,
+    T1_BLEND_FAMILY_OTHER_BLUES,
+    T1_BLEND_FORCE_BOLD,
+
+    /*# never remove */
+    T1_BLEND_MAX
+
+  } T1_Blend_Flags;
+
+  /* */
+
+
+  /*# backwards compatible definitions */
+#define t1_blend_underline_position   T1_BLEND_UNDERLINE_POSITION
+#define t1_blend_underline_thickness  T1_BLEND_UNDERLINE_THICKNESS
+#define t1_blend_italic_angle         T1_BLEND_ITALIC_ANGLE
+#define t1_blend_blue_values          T1_BLEND_BLUE_VALUES
+#define t1_blend_other_blues          T1_BLEND_OTHER_BLUES
+#define t1_blend_standard_widths      T1_BLEND_STANDARD_WIDTH
+#define t1_blend_standard_height      T1_BLEND_STANDARD_HEIGHT
+#define t1_blend_stem_snap_widths     T1_BLEND_STEM_SNAP_WIDTHS
+#define t1_blend_stem_snap_heights    T1_BLEND_STEM_SNAP_HEIGHTS
+#define t1_blend_blue_scale           T1_BLEND_BLUE_SCALE
+#define t1_blend_blue_shift           T1_BLEND_BLUE_SHIFT
+#define t1_blend_family_blues         T1_BLEND_FAMILY_BLUES
+#define t1_blend_family_other_blues   T1_BLEND_FAMILY_OTHER_BLUES
+#define t1_blend_force_bold           T1_BLEND_FORCE_BOLD
+#define t1_blend_max                  T1_BLEND_MAX
+
+
+  /* maximum number of Multiple Masters designs, as defined in the spec */
+#define T1_MAX_MM_DESIGNS     16
+
+  /* maximum number of Multiple Masters axes, as defined in the spec */
+#define T1_MAX_MM_AXIS        4
+
+  /* maximum number of elements in a design map */
+#define T1_MAX_MM_MAP_POINTS  20
+
+
+  /* this structure is used to store the BlendDesignMap entry for an axis */
+  typedef struct  PS_DesignMap_
+  {
+    FT_Byte    num_points;
+    FT_Long*   design_points;
+    FT_Fixed*  blend_points;
+
+  } PS_DesignMapRec, *PS_DesignMap;
+
+  /* backwards-compatible definition */
+  typedef PS_DesignMapRec  T1_DesignMap;
+
+
+  typedef struct  PS_BlendRec_
+  {
+    FT_UInt          num_designs;
+    FT_UInt          num_axis;
+
+    FT_String*       axis_names[T1_MAX_MM_AXIS];
+    FT_Fixed*        design_pos[T1_MAX_MM_DESIGNS];
+    PS_DesignMapRec  design_map[T1_MAX_MM_AXIS];
+
+    FT_Fixed*        weight_vector;
+    FT_Fixed*        default_weight_vector;
+
+    PS_FontInfo      font_infos[T1_MAX_MM_DESIGNS + 1];
+    PS_Private       privates  [T1_MAX_MM_DESIGNS + 1];
+
+    FT_ULong         blend_bitflags;
+
+    FT_BBox*         bboxes    [T1_MAX_MM_DESIGNS + 1];
+
+    /* since 2.3.0 */
+
+    /* undocumented, optional: the default design instance;   */
+    /* corresponds to default_weight_vector --                */
+    /* num_default_design_vector == 0 means it is not present */
+    /* in the font and associated metrics files               */
+    FT_UInt          default_design_vector[T1_MAX_MM_DESIGNS];
+    FT_UInt          num_default_design_vector;
+
+  } PS_BlendRec, *PS_Blend;
+
+
+  /* backwards-compatible definition */
+  typedef PS_BlendRec  T1_Blend;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    CID_FaceDictRec                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to represent data in a CID top-level dictionary.  */
+  /*                                                                       */
+  typedef struct  CID_FaceDictRec_
+  {
+    PS_PrivateRec  private_dict;
+
+    FT_UInt        len_buildchar;
+    FT_Fixed       forcebold_threshold;
+    FT_Pos         stroke_width;
+    FT_Fixed       expansion_factor;
+
+    FT_Byte        paint_type;
+    FT_Byte        font_type;
+    FT_Matrix      font_matrix;
+    FT_Vector      font_offset;
+
+    FT_UInt        num_subrs;
+    FT_ULong       subrmap_offset;
+    FT_Int         sd_bytes;
+
+  } CID_FaceDictRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    CID_FaceDict                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a @CID_FaceDictRec structure.                          */
+  /*                                                                       */
+  typedef struct CID_FaceDictRec_*  CID_FaceDict;
+
+  /* */
+
+
+  /* backwards-compatible definition */
+  typedef CID_FaceDictRec  CID_FontDict;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    CID_FaceInfoRec                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to represent CID Face information.                */
+  /*                                                                       */
+  typedef struct  CID_FaceInfoRec_
+  {
+    FT_String*      cid_font_name;
+    FT_Fixed        cid_version;
+    FT_Int          cid_font_type;
+
+    FT_String*      registry;
+    FT_String*      ordering;
+    FT_Int          supplement;
+
+    PS_FontInfoRec  font_info;
+    FT_BBox         font_bbox;
+    FT_ULong        uid_base;
+
+    FT_Int          num_xuid;
+    FT_ULong        xuid[16];
+
+    FT_ULong        cidmap_offset;
+    FT_Int          fd_bytes;
+    FT_Int          gd_bytes;
+    FT_ULong        cid_count;
+
+    FT_Int          num_dicts;
+    CID_FaceDict    font_dicts;
+
+    FT_ULong        data_offset;
+
+  } CID_FaceInfoRec;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    CID_FaceInfo                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A handle to a @CID_FaceInfoRec structure.                          */
+  /*                                                                       */
+  typedef struct CID_FaceInfoRec_*  CID_FaceInfo;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    CID_Info                                                           */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*   This type is equivalent to @CID_FaceInfoRec.  It is deprecated but  */
+  /*   kept to maintain source compatibility between various versions of   */
+  /*   FreeType.                                                           */
+  /*                                                                       */
+  typedef CID_FaceInfoRec  CID_Info;
+
+
+  /************************************************************************
+   *
+   * @function:
+   *    FT_Has_PS_Glyph_Names
+   *
+   * @description:
+   *    Return true if a given face provides reliable PostScript glyph
+   *    names.  This is similar to using the @FT_HAS_GLYPH_NAMES macro,
+   *    except that certain fonts (mostly TrueType) contain incorrect
+   *    glyph name tables.
+   *
+   *    When this function returns true, the caller is sure that the glyph
+   *    names returned by @FT_Get_Glyph_Name are reliable.
+   *
+   * @input:
+   *    face ::
+   *       face handle
+   *
+   * @return:
+   *    Boolean.  True if glyph names are reliable.
+   *
+   */
+  FT_EXPORT( FT_Int )
+  FT_Has_PS_Glyph_Names( FT_Face  face );
+
+
+  /************************************************************************
+   *
+   * @function:
+   *    FT_Get_PS_Font_Info
+   *
+   * @description:
+   *    Retrieve the @PS_FontInfoRec structure corresponding to a given
+   *    PostScript font.
+   *
+   * @input:
+   *    face ::
+   *       PostScript face handle.
+   *
+   * @output:
+   *    afont_info ::
+   *       Output font info structure pointer.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   *
+   * @note:
+   *    The string pointers within the font info structure are owned by
+   *    the face and don't need to be freed by the caller.
+   *
+   *    If the font's format is not PostScript-based, this function will
+   *    return the `FT_Err_Invalid_Argument' error code.
+   *
+   */
+  FT_EXPORT( FT_Error )
+  FT_Get_PS_Font_Info( FT_Face      face,
+                       PS_FontInfo  afont_info );
+
+
+  /************************************************************************
+   *
+   * @function:
+   *    FT_Get_PS_Font_Private
+   *
+   * @description:
+   *    Retrieve the @PS_PrivateRec structure corresponding to a given
+   *    PostScript font.
+   *
+   * @input:
+   *    face ::
+   *       PostScript face handle.
+   *
+   * @output:
+   *    afont_private ::
+   *       Output private dictionary structure pointer.
+   *
+   * @return:
+   *    FreeType error code.  0~means success.
+   *
+   * @note:
+   *    The string pointers within the @PS_PrivateRec structure are owned by
+   *    the face and don't need to be freed by the caller.
+   *
+   *    If the font's format is not PostScript-based, this function returns
+   *    the `FT_Err_Invalid_Argument' error code.
+   *
+   */
+  FT_EXPORT( FT_Error )
+  FT_Get_PS_Font_Private( FT_Face     face,
+                          PS_Private  afont_private );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    T1_EncodingType                                                    */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An enumeration describing the `Encoding' entry in a Type 1         */
+  /*    dictionary.                                                        */
+  /*                                                                       */
+  typedef enum  T1_EncodingType_
+  {
+    T1_ENCODING_TYPE_NONE = 0,
+    T1_ENCODING_TYPE_ARRAY,
+    T1_ENCODING_TYPE_STANDARD,
+    T1_ENCODING_TYPE_ISOLATIN1,
+    T1_ENCODING_TYPE_EXPERT
+
+  } T1_EncodingType;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    PS_Dict_Keys                                                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An enumeration used in calls to @FT_Get_PS_Font_Value to identify  */
+  /*    the Type~1 dictionary entry to retrieve.                           */
+  /*                                                                       */
+  typedef enum  PS_Dict_Keys_
+  {
+    /* conventionally in the font dictionary */
+    PS_DICT_FONT_TYPE,              /* FT_Byte         */
+    PS_DICT_FONT_MATRIX,            /* FT_Fixed        */
+    PS_DICT_FONT_BBOX,              /* FT_Fixed        */
+    PS_DICT_PAINT_TYPE,             /* FT_Byte         */
+    PS_DICT_FONT_NAME,              /* FT_String*      */
+    PS_DICT_UNIQUE_ID,              /* FT_Int          */
+    PS_DICT_NUM_CHAR_STRINGS,       /* FT_Int          */
+    PS_DICT_CHAR_STRING_KEY,        /* FT_String*      */
+    PS_DICT_CHAR_STRING,            /* FT_String*      */
+    PS_DICT_ENCODING_TYPE,          /* T1_EncodingType */
+    PS_DICT_ENCODING_ENTRY,         /* FT_String*      */
+
+    /* conventionally in the font Private dictionary */
+    PS_DICT_NUM_SUBRS,              /* FT_Int     */
+    PS_DICT_SUBR,                   /* FT_String* */
+    PS_DICT_STD_HW,                 /* FT_UShort  */
+    PS_DICT_STD_VW,                 /* FT_UShort  */
+    PS_DICT_NUM_BLUE_VALUES,        /* FT_Byte    */
+    PS_DICT_BLUE_VALUE,             /* FT_Short   */
+    PS_DICT_BLUE_FUZZ,              /* FT_Int     */
+    PS_DICT_NUM_OTHER_BLUES,        /* FT_Byte    */
+    PS_DICT_OTHER_BLUE,             /* FT_Short   */
+    PS_DICT_NUM_FAMILY_BLUES,       /* FT_Byte    */
+    PS_DICT_FAMILY_BLUE,            /* FT_Short   */
+    PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte    */
+    PS_DICT_FAMILY_OTHER_BLUE,      /* FT_Short   */
+    PS_DICT_BLUE_SCALE,             /* FT_Fixed   */
+    PS_DICT_BLUE_SHIFT,             /* FT_Int     */
+    PS_DICT_NUM_STEM_SNAP_H,        /* FT_Byte    */
+    PS_DICT_STEM_SNAP_H,            /* FT_Short   */
+    PS_DICT_NUM_STEM_SNAP_V,        /* FT_Byte    */
+    PS_DICT_STEM_SNAP_V,            /* FT_Short   */
+    PS_DICT_FORCE_BOLD,             /* FT_Bool    */
+    PS_DICT_RND_STEM_UP,            /* FT_Bool    */
+    PS_DICT_MIN_FEATURE,            /* FT_Short   */
+    PS_DICT_LEN_IV,                 /* FT_Int     */
+    PS_DICT_PASSWORD,               /* FT_Long    */
+    PS_DICT_LANGUAGE_GROUP,         /* FT_Long    */
+
+    /* conventionally in the font FontInfo dictionary */
+    PS_DICT_VERSION,                /* FT_String* */
+    PS_DICT_NOTICE,                 /* FT_String* */
+    PS_DICT_FULL_NAME,              /* FT_String* */
+    PS_DICT_FAMILY_NAME,            /* FT_String* */
+    PS_DICT_WEIGHT,                 /* FT_String* */
+    PS_DICT_IS_FIXED_PITCH,         /* FT_Bool    */
+    PS_DICT_UNDERLINE_POSITION,     /* FT_Short   */
+    PS_DICT_UNDERLINE_THICKNESS,    /* FT_UShort  */
+    PS_DICT_FS_TYPE,                /* FT_UShort  */
+    PS_DICT_ITALIC_ANGLE,           /* FT_Long    */
+
+    PS_DICT_MAX = PS_DICT_ITALIC_ANGLE
+
+  } PS_Dict_Keys;
+
+
+  /************************************************************************
+   *
+   * @function:
+   *    FT_Get_PS_Font_Value
+   *
+   * @description:
+   *    Retrieve the value for the supplied key from a PostScript font.
+   *
+   * @input:
+   *    face ::
+   *       PostScript face handle.
+   *
+   *    key ::
+   *       An enumeration value representing the dictionary key to retrieve.
+   *
+   *    idx ::
+   *       For array values, this specifies the index to be returned.
+   *
+   *    value ::
+   *       A pointer to memory into which to write the value.
+   *
+   *    valen_len ::
+   *       The size, in bytes, of the memory supplied for the value.
+   *
+   * @output:
+   *    value ::
+   *       The value matching the above key, if it exists.
+   *
+   * @return:
+   *    The amount of memory (in bytes) required to hold the requested
+   *    value (if it exists, -1 otherwise).
+   *
+   * @note:
+   *    The values returned are not pointers into the internal structures of
+   *    the face, but are `fresh' copies, so that the memory containing them
+   *    belongs to the calling application.  This also enforces the
+   *    `read-only' nature of these values, i.e., this function cannot be
+   *    used to manipulate the face.
+   *
+   *    `value' is a void pointer because the values returned can be of
+   *    various types.
+   *
+   *    If either `value' is NULL or `value_len' is too small, just the
+   *    required memory size for the requested entry is returned.
+   *
+   *    The `idx' parameter is used, not only to retrieve elements of, for
+   *    example, the FontMatrix or FontBBox, but also to retrieve name keys
+   *    from the CharStrings dictionary, and the charstrings themselves.  It
+   *    is ignored for atomic values.
+   *
+   *    PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000.  To
+   *    get the value as in the font stream, you need to divide by
+   *    65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).
+   *
+   *    IMPORTANT: Only key/value pairs read by the FreeType interpreter can
+   *    be retrieved.  So, for example, PostScript procedures such as NP,
+   *    ND, and RD are not available.  Arbitrary keys are, obviously, not be
+   *    available either.
+   *
+   *    If the font's format is not PostScript-based, this function returns
+   *    the `FT_Err_Invalid_Argument' error code.
+   *
+   */
+  FT_EXPORT( FT_Long )
+  FT_Get_PS_Font_Value( FT_Face       face,
+                        PS_Dict_Keys  key,
+                        FT_UInt       idx,
+                        void         *value,
+                        FT_Long       value_len );
+
+  /* */
+
+FT_END_HEADER
+
+#endif /* __T1TABLES_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ttnameid.h b/core/include/thirdparties/freetype/freetype/ttnameid.h
new file mode 100644
index 0000000..862bf92
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ttnameid.h
@@ -0,0 +1,1237 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ttnameid.h                                                             */
+/*                                                                         */
+/*    TrueType name ID definitions (specification only).                   */
+/*                                                                         */
+/*  Copyright 1996-2004, 2006-2008, 2012 by                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __TTNAMEID_H__
+#define __TTNAMEID_H__
+
+
+#include "../ft2build.h"
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    truetype_tables                                                    */
+  /*                                                                       */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Possible values for the `platform' identifier code in the name        */
+  /* records of the TTF `name' table.                                      */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /***********************************************************************
+   *
+   * @enum:
+   *   TT_PLATFORM_XXX
+   *
+   * @description:
+   *   A list of valid values for the `platform_id' identifier code in
+   *   @FT_CharMapRec and @FT_SfntName structures.
+   *
+   * @values:
+   *   TT_PLATFORM_APPLE_UNICODE ::
+   *     Used by Apple to indicate a Unicode character map and/or name entry.
+   *     See @TT_APPLE_ID_XXX for corresponding `encoding_id' values.  Note
+   *     that name entries in this format are coded as big-endian UCS-2
+   *     character codes _only_.
+   *
+   *   TT_PLATFORM_MACINTOSH ::
+   *     Used by Apple to indicate a MacOS-specific charmap and/or name entry.
+   *     See @TT_MAC_ID_XXX for corresponding `encoding_id' values.  Note that
+   *     most TrueType fonts contain an Apple roman charmap to be usable on
+   *     MacOS systems (even if they contain a Microsoft charmap as well).
+   *
+   *   TT_PLATFORM_ISO ::
+   *     This value was used to specify ISO/IEC 10646 charmaps.  It is however
+   *     now deprecated.  See @TT_ISO_ID_XXX for a list of corresponding
+   *     `encoding_id' values.
+   *
+   *   TT_PLATFORM_MICROSOFT ::
+   *     Used by Microsoft to indicate Windows-specific charmaps.  See
+   *     @TT_MS_ID_XXX for a list of corresponding `encoding_id' values.
+   *     Note that most fonts contain a Unicode charmap using
+   *     (TT_PLATFORM_MICROSOFT, @TT_MS_ID_UNICODE_CS).
+   *
+   *   TT_PLATFORM_CUSTOM ::
+   *     Used to indicate application-specific charmaps.
+   *
+   *   TT_PLATFORM_ADOBE ::
+   *     This value isn't part of any font format specification, but is used
+   *     by FreeType to report Adobe-specific charmaps in an @FT_CharMapRec
+   *     structure.  See @TT_ADOBE_ID_XXX.
+   */
+
+#define TT_PLATFORM_APPLE_UNICODE  0
+#define TT_PLATFORM_MACINTOSH      1
+#define TT_PLATFORM_ISO            2 /* deprecated */
+#define TT_PLATFORM_MICROSOFT      3
+#define TT_PLATFORM_CUSTOM         4
+#define TT_PLATFORM_ADOBE          7 /* artificial */
+
+
+  /***********************************************************************
+   *
+   * @enum:
+   *   TT_APPLE_ID_XXX
+   *
+   * @description:
+   *   A list of valid values for the `encoding_id' for
+   *   @TT_PLATFORM_APPLE_UNICODE charmaps and name entries.
+   *
+   * @values:
+   *   TT_APPLE_ID_DEFAULT ::
+   *     Unicode version 1.0.
+   *
+   *   TT_APPLE_ID_UNICODE_1_1 ::
+   *     Unicode 1.1; specifies Hangul characters starting at U+34xx.
+   *
+   *   TT_APPLE_ID_ISO_10646 ::
+   *     Deprecated (identical to preceding).
+   *
+   *   TT_APPLE_ID_UNICODE_2_0 ::
+   *     Unicode 2.0 and beyond (UTF-16 BMP only).
+   *
+   *   TT_APPLE_ID_UNICODE_32 ::
+   *     Unicode 3.1 and beyond, using UTF-32.
+   *
+   *   TT_APPLE_ID_VARIANT_SELECTOR ::
+   *     From Adobe, not Apple.  Not a normal cmap.  Specifies variations
+   *     on a real cmap.
+   */
+
+#define TT_APPLE_ID_DEFAULT           0 /* Unicode 1.0 */
+#define TT_APPLE_ID_UNICODE_1_1       1 /* specify Hangul at U+34xx */
+#define TT_APPLE_ID_ISO_10646         2 /* deprecated */
+#define TT_APPLE_ID_UNICODE_2_0       3 /* or later */
+#define TT_APPLE_ID_UNICODE_32        4 /* 2.0 or later, full repertoire */
+#define TT_APPLE_ID_VARIANT_SELECTOR  5 /* variation selector data */
+
+
+  /***********************************************************************
+   *
+   * @enum:
+   *   TT_MAC_ID_XXX
+   *
+   * @description:
+   *   A list of valid values for the `encoding_id' for
+   *   @TT_PLATFORM_MACINTOSH charmaps and name entries.
+   *
+   * @values:
+   *   TT_MAC_ID_ROMAN ::
+   *   TT_MAC_ID_JAPANESE ::
+   *   TT_MAC_ID_TRADITIONAL_CHINESE ::
+   *   TT_MAC_ID_KOREAN ::
+   *   TT_MAC_ID_ARABIC ::
+   *   TT_MAC_ID_HEBREW ::
+   *   TT_MAC_ID_GREEK ::
+   *   TT_MAC_ID_RUSSIAN ::
+   *   TT_MAC_ID_RSYMBOL ::
+   *   TT_MAC_ID_DEVANAGARI ::
+   *   TT_MAC_ID_GURMUKHI ::
+   *   TT_MAC_ID_GUJARATI ::
+   *   TT_MAC_ID_ORIYA ::
+   *   TT_MAC_ID_BENGALI ::
+   *   TT_MAC_ID_TAMIL ::
+   *   TT_MAC_ID_TELUGU ::
+   *   TT_MAC_ID_KANNADA ::
+   *   TT_MAC_ID_MALAYALAM ::
+   *   TT_MAC_ID_SINHALESE ::
+   *   TT_MAC_ID_BURMESE ::
+   *   TT_MAC_ID_KHMER ::
+   *   TT_MAC_ID_THAI ::
+   *   TT_MAC_ID_LAOTIAN ::
+   *   TT_MAC_ID_GEORGIAN ::
+   *   TT_MAC_ID_ARMENIAN ::
+   *   TT_MAC_ID_MALDIVIAN ::
+   *   TT_MAC_ID_SIMPLIFIED_CHINESE ::
+   *   TT_MAC_ID_TIBETAN ::
+   *   TT_MAC_ID_MONGOLIAN ::
+   *   TT_MAC_ID_GEEZ ::
+   *   TT_MAC_ID_SLAVIC ::
+   *   TT_MAC_ID_VIETNAMESE ::
+   *   TT_MAC_ID_SINDHI ::
+   *   TT_MAC_ID_UNINTERP ::
+   */
+
+#define TT_MAC_ID_ROMAN                 0
+#define TT_MAC_ID_JAPANESE              1
+#define TT_MAC_ID_TRADITIONAL_CHINESE   2
+#define TT_MAC_ID_KOREAN                3
+#define TT_MAC_ID_ARABIC                4
+#define TT_MAC_ID_HEBREW                5
+#define TT_MAC_ID_GREEK                 6
+#define TT_MAC_ID_RUSSIAN               7
+#define TT_MAC_ID_RSYMBOL               8
+#define TT_MAC_ID_DEVANAGARI            9
+#define TT_MAC_ID_GURMUKHI             10
+#define TT_MAC_ID_GUJARATI             11
+#define TT_MAC_ID_ORIYA                12
+#define TT_MAC_ID_BENGALI              13
+#define TT_MAC_ID_TAMIL                14
+#define TT_MAC_ID_TELUGU               15
+#define TT_MAC_ID_KANNADA              16
+#define TT_MAC_ID_MALAYALAM            17
+#define TT_MAC_ID_SINHALESE            18
+#define TT_MAC_ID_BURMESE              19
+#define TT_MAC_ID_KHMER                20
+#define TT_MAC_ID_THAI                 21
+#define TT_MAC_ID_LAOTIAN              22
+#define TT_MAC_ID_GEORGIAN             23
+#define TT_MAC_ID_ARMENIAN             24
+#define TT_MAC_ID_MALDIVIAN            25
+#define TT_MAC_ID_SIMPLIFIED_CHINESE   25
+#define TT_MAC_ID_TIBETAN              26
+#define TT_MAC_ID_MONGOLIAN            27
+#define TT_MAC_ID_GEEZ                 28
+#define TT_MAC_ID_SLAVIC               29
+#define TT_MAC_ID_VIETNAMESE           30
+#define TT_MAC_ID_SINDHI               31
+#define TT_MAC_ID_UNINTERP             32
+
+
+  /***********************************************************************
+   *
+   * @enum:
+   *   TT_ISO_ID_XXX
+   *
+   * @description:
+   *   A list of valid values for the `encoding_id' for
+   *   @TT_PLATFORM_ISO charmaps and name entries.
+   *
+   *   Their use is now deprecated.
+   *
+   * @values:
+   *   TT_ISO_ID_7BIT_ASCII ::
+   *     ASCII.
+   *   TT_ISO_ID_10646 ::
+   *     ISO/10646.
+   *   TT_ISO_ID_8859_1 ::
+   *     Also known as Latin-1.
+   */
+
+#define TT_ISO_ID_7BIT_ASCII  0
+#define TT_ISO_ID_10646       1
+#define TT_ISO_ID_8859_1      2
+
+
+  /***********************************************************************
+   *
+   * @enum:
+   *   TT_MS_ID_XXX
+   *
+   * @description:
+   *   A list of valid values for the `encoding_id' for
+   *   @TT_PLATFORM_MICROSOFT charmaps and name entries.
+   *
+   * @values:
+   *   TT_MS_ID_SYMBOL_CS ::
+   *     Corresponds to Microsoft symbol encoding. See
+   *     @FT_ENCODING_MS_SYMBOL.
+   *
+   *   TT_MS_ID_UNICODE_CS ::
+   *     Corresponds to a Microsoft WGL4 charmap, matching Unicode.  See
+   *     @FT_ENCODING_UNICODE.
+   *
+   *   TT_MS_ID_SJIS ::
+   *     Corresponds to SJIS Japanese encoding.  See @FT_ENCODING_SJIS.
+   *
+   *   TT_MS_ID_GB2312 ::
+   *     Corresponds to Simplified Chinese as used in Mainland China.  See
+   *     @FT_ENCODING_GB2312.
+   *
+   *   TT_MS_ID_BIG_5 ::
+   *     Corresponds to Traditional Chinese as used in Taiwan and Hong Kong.
+   *     See @FT_ENCODING_BIG5.
+   *
+   *   TT_MS_ID_WANSUNG ::
+   *     Corresponds to Korean Wansung encoding.  See @FT_ENCODING_WANSUNG.
+   *
+   *   TT_MS_ID_JOHAB ::
+   *     Corresponds to Johab encoding.  See @FT_ENCODING_JOHAB.
+   *
+   *   TT_MS_ID_UCS_4 ::
+   *     Corresponds to UCS-4 or UTF-32 charmaps.  This has been added to
+   *     the OpenType specification version 1.4 (mid-2001.)
+   */
+
+#define TT_MS_ID_SYMBOL_CS    0
+#define TT_MS_ID_UNICODE_CS   1
+#define TT_MS_ID_SJIS         2
+#define TT_MS_ID_GB2312       3
+#define TT_MS_ID_BIG_5        4
+#define TT_MS_ID_WANSUNG      5
+#define TT_MS_ID_JOHAB        6
+#define TT_MS_ID_UCS_4       10
+
+
+  /***********************************************************************
+   *
+   * @enum:
+   *   TT_ADOBE_ID_XXX
+   *
+   * @description:
+   *   A list of valid values for the `encoding_id' for
+   *   @TT_PLATFORM_ADOBE charmaps.  This is a FreeType-specific extension!
+   *
+   * @values:
+   *   TT_ADOBE_ID_STANDARD ::
+   *     Adobe standard encoding.
+   *   TT_ADOBE_ID_EXPERT ::
+   *     Adobe expert encoding.
+   *   TT_ADOBE_ID_CUSTOM ::
+   *     Adobe custom encoding.
+   *   TT_ADOBE_ID_LATIN_1 ::
+   *     Adobe Latin~1 encoding.
+   */
+
+#define TT_ADOBE_ID_STANDARD  0
+#define TT_ADOBE_ID_EXPERT    1
+#define TT_ADOBE_ID_CUSTOM    2
+#define TT_ADOBE_ID_LATIN_1   3
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Possible values of the language identifier field in the name records  */
+  /* of the TTF `name' table if the `platform' identifier code is          */
+  /* TT_PLATFORM_MACINTOSH.  These values are also used as return values   */
+  /* for function @FT_Get_CMap_Language_ID.                                */
+  /*                                                                       */
+  /* The canonical source for the Apple assigned Language ID's is at       */
+  /*                                                                       */
+  /*   https://developer.apple.com/fonts/TTRefMan/RM06/Chap6name.html      */
+  /*                                                                       */
+#define TT_MAC_LANGID_ENGLISH                       0
+#define TT_MAC_LANGID_FRENCH                        1
+#define TT_MAC_LANGID_GERMAN                        2
+#define TT_MAC_LANGID_ITALIAN                       3
+#define TT_MAC_LANGID_DUTCH                         4
+#define TT_MAC_LANGID_SWEDISH                       5
+#define TT_MAC_LANGID_SPANISH                       6
+#define TT_MAC_LANGID_DANISH                        7
+#define TT_MAC_LANGID_PORTUGUESE                    8
+#define TT_MAC_LANGID_NORWEGIAN                     9
+#define TT_MAC_LANGID_HEBREW                       10
+#define TT_MAC_LANGID_JAPANESE                     11
+#define TT_MAC_LANGID_ARABIC                       12
+#define TT_MAC_LANGID_FINNISH                      13
+#define TT_MAC_LANGID_GREEK                        14
+#define TT_MAC_LANGID_ICELANDIC                    15
+#define TT_MAC_LANGID_MALTESE                      16
+#define TT_MAC_LANGID_TURKISH                      17
+#define TT_MAC_LANGID_CROATIAN                     18
+#define TT_MAC_LANGID_CHINESE_TRADITIONAL          19
+#define TT_MAC_LANGID_URDU                         20
+#define TT_MAC_LANGID_HINDI                        21
+#define TT_MAC_LANGID_THAI                         22
+#define TT_MAC_LANGID_KOREAN                       23
+#define TT_MAC_LANGID_LITHUANIAN                   24
+#define TT_MAC_LANGID_POLISH                       25
+#define TT_MAC_LANGID_HUNGARIAN                    26
+#define TT_MAC_LANGID_ESTONIAN                     27
+#define TT_MAC_LANGID_LETTISH                      28
+#define TT_MAC_LANGID_SAAMISK                      29
+#define TT_MAC_LANGID_FAEROESE                     30
+#define TT_MAC_LANGID_FARSI                        31
+#define TT_MAC_LANGID_RUSSIAN                      32
+#define TT_MAC_LANGID_CHINESE_SIMPLIFIED           33
+#define TT_MAC_LANGID_FLEMISH                      34
+#define TT_MAC_LANGID_IRISH                        35
+#define TT_MAC_LANGID_ALBANIAN                     36
+#define TT_MAC_LANGID_ROMANIAN                     37
+#define TT_MAC_LANGID_CZECH                        38
+#define TT_MAC_LANGID_SLOVAK                       39
+#define TT_MAC_LANGID_SLOVENIAN                    40
+#define TT_MAC_LANGID_YIDDISH                      41
+#define TT_MAC_LANGID_SERBIAN                      42
+#define TT_MAC_LANGID_MACEDONIAN                   43
+#define TT_MAC_LANGID_BULGARIAN                    44
+#define TT_MAC_LANGID_UKRAINIAN                    45
+#define TT_MAC_LANGID_BYELORUSSIAN                 46
+#define TT_MAC_LANGID_UZBEK                        47
+#define TT_MAC_LANGID_KAZAKH                       48
+#define TT_MAC_LANGID_AZERBAIJANI                  49
+#define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT  49
+#define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT    50
+#define TT_MAC_LANGID_ARMENIAN                     51
+#define TT_MAC_LANGID_GEORGIAN                     52
+#define TT_MAC_LANGID_MOLDAVIAN                    53
+#define TT_MAC_LANGID_KIRGHIZ                      54
+#define TT_MAC_LANGID_TAJIKI                       55
+#define TT_MAC_LANGID_TURKMEN                      56
+#define TT_MAC_LANGID_MONGOLIAN                    57
+#define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT   57
+#define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT    58
+#define TT_MAC_LANGID_PASHTO                       59
+#define TT_MAC_LANGID_KURDISH                      60
+#define TT_MAC_LANGID_KASHMIRI                     61
+#define TT_MAC_LANGID_SINDHI                       62
+#define TT_MAC_LANGID_TIBETAN                      63
+#define TT_MAC_LANGID_NEPALI                       64
+#define TT_MAC_LANGID_SANSKRIT                     65
+#define TT_MAC_LANGID_MARATHI                      66
+#define TT_MAC_LANGID_BENGALI                      67
+#define TT_MAC_LANGID_ASSAMESE                     68
+#define TT_MAC_LANGID_GUJARATI                     69
+#define TT_MAC_LANGID_PUNJABI                      70
+#define TT_MAC_LANGID_ORIYA                        71
+#define TT_MAC_LANGID_MALAYALAM                    72
+#define TT_MAC_LANGID_KANNADA                      73
+#define TT_MAC_LANGID_TAMIL                        74
+#define TT_MAC_LANGID_TELUGU                       75
+#define TT_MAC_LANGID_SINHALESE                    76
+#define TT_MAC_LANGID_BURMESE                      77
+#define TT_MAC_LANGID_KHMER                        78
+#define TT_MAC_LANGID_LAO                          79
+#define TT_MAC_LANGID_VIETNAMESE                   80
+#define TT_MAC_LANGID_INDONESIAN                   81
+#define TT_MAC_LANGID_TAGALOG                      82
+#define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT           83
+#define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT          84
+#define TT_MAC_LANGID_AMHARIC                      85
+#define TT_MAC_LANGID_TIGRINYA                     86
+#define TT_MAC_LANGID_GALLA                        87
+#define TT_MAC_LANGID_SOMALI                       88
+#define TT_MAC_LANGID_SWAHILI                      89
+#define TT_MAC_LANGID_RUANDA                       90
+#define TT_MAC_LANGID_RUNDI                        91
+#define TT_MAC_LANGID_CHEWA                        92
+#define TT_MAC_LANGID_MALAGASY                     93
+#define TT_MAC_LANGID_ESPERANTO                    94
+#define TT_MAC_LANGID_WELSH                       128
+#define TT_MAC_LANGID_BASQUE                      129
+#define TT_MAC_LANGID_CATALAN                     130
+#define TT_MAC_LANGID_LATIN                       131
+#define TT_MAC_LANGID_QUECHUA                     132
+#define TT_MAC_LANGID_GUARANI                     133
+#define TT_MAC_LANGID_AYMARA                      134
+#define TT_MAC_LANGID_TATAR                       135
+#define TT_MAC_LANGID_UIGHUR                      136
+#define TT_MAC_LANGID_DZONGKHA                    137
+#define TT_MAC_LANGID_JAVANESE                    138
+#define TT_MAC_LANGID_SUNDANESE                   139
+
+
+#if 0  /* these seem to be errors that have been dropped */
+
+#define TT_MAC_LANGID_SCOTTISH_GAELIC             140
+#define TT_MAC_LANGID_IRISH_GAELIC                141
+
+#endif
+
+
+  /* The following codes are new as of 2000-03-10 */
+#define TT_MAC_LANGID_GALICIAN                    140
+#define TT_MAC_LANGID_AFRIKAANS                   141
+#define TT_MAC_LANGID_BRETON                      142
+#define TT_MAC_LANGID_INUKTITUT                   143
+#define TT_MAC_LANGID_SCOTTISH_GAELIC             144
+#define TT_MAC_LANGID_MANX_GAELIC                 145
+#define TT_MAC_LANGID_IRISH_GAELIC                146
+#define TT_MAC_LANGID_TONGAN                      147
+#define TT_MAC_LANGID_GREEK_POLYTONIC             148
+#define TT_MAC_LANGID_GREELANDIC                  149
+#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT    150
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Possible values of the language identifier field in the name records  */
+  /* of the TTF `name' table if the `platform' identifier code is          */
+  /* TT_PLATFORM_MICROSOFT.                                                */
+  /*                                                                       */
+  /* The canonical source for the MS assigned LCIDs is                     */
+  /*                                                                       */
+  /*   http://www.microsoft.com/globaldev/reference/lcid-all.mspx          */
+  /*                                                                       */
+
+#define TT_MS_LANGID_ARABIC_GENERAL                    0x0001
+#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA               0x0401
+#define TT_MS_LANGID_ARABIC_IRAQ                       0x0801
+#define TT_MS_LANGID_ARABIC_EGYPT                      0x0c01
+#define TT_MS_LANGID_ARABIC_LIBYA                      0x1001
+#define TT_MS_LANGID_ARABIC_ALGERIA                    0x1401
+#define TT_MS_LANGID_ARABIC_MOROCCO                    0x1801
+#define TT_MS_LANGID_ARABIC_TUNISIA                    0x1c01
+#define TT_MS_LANGID_ARABIC_OMAN                       0x2001
+#define TT_MS_LANGID_ARABIC_YEMEN                      0x2401
+#define TT_MS_LANGID_ARABIC_SYRIA                      0x2801
+#define TT_MS_LANGID_ARABIC_JORDAN                     0x2c01
+#define TT_MS_LANGID_ARABIC_LEBANON                    0x3001
+#define TT_MS_LANGID_ARABIC_KUWAIT                     0x3401
+#define TT_MS_LANGID_ARABIC_UAE                        0x3801
+#define TT_MS_LANGID_ARABIC_BAHRAIN                    0x3c01
+#define TT_MS_LANGID_ARABIC_QATAR                      0x4001
+#define TT_MS_LANGID_BULGARIAN_BULGARIA                0x0402
+#define TT_MS_LANGID_CATALAN_SPAIN                     0x0403
+#define TT_MS_LANGID_CHINESE_GENERAL                   0x0004
+#define TT_MS_LANGID_CHINESE_TAIWAN                    0x0404
+#define TT_MS_LANGID_CHINESE_PRC                       0x0804
+#define TT_MS_LANGID_CHINESE_HONG_KONG                 0x0c04
+#define TT_MS_LANGID_CHINESE_SINGAPORE                 0x1004
+
+#if 1  /* this looks like the correct value */
+#define TT_MS_LANGID_CHINESE_MACAU                     0x1404
+#else  /* but beware, Microsoft may change its mind...
+          the most recent Word reference has the following: */
+#define TT_MS_LANGID_CHINESE_MACAU  TT_MS_LANGID_CHINESE_HONG_KONG
+#endif
+
+#if 0  /* used only with .NET `cultures'; commented out */
+#define TT_MS_LANGID_CHINESE_TRADITIONAL               0x7C04
+#endif
+
+#define TT_MS_LANGID_CZECH_CZECH_REPUBLIC              0x0405
+#define TT_MS_LANGID_DANISH_DENMARK                    0x0406
+#define TT_MS_LANGID_GERMAN_GERMANY                    0x0407
+#define TT_MS_LANGID_GERMAN_SWITZERLAND                0x0807
+#define TT_MS_LANGID_GERMAN_AUSTRIA                    0x0c07
+#define TT_MS_LANGID_GERMAN_LUXEMBOURG                 0x1007
+#define TT_MS_LANGID_GERMAN_LIECHTENSTEI               0x1407
+#define TT_MS_LANGID_GREEK_GREECE                      0x0408
+
+  /* don't ask what this one means... It is commented out currently. */
+#if 0
+#define TT_MS_LANGID_GREEK_GREECE2                     0x2008
+#endif
+
+#define TT_MS_LANGID_ENGLISH_GENERAL                   0x0009
+#define TT_MS_LANGID_ENGLISH_UNITED_STATES             0x0409
+#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM            0x0809
+#define TT_MS_LANGID_ENGLISH_AUSTRALIA                 0x0c09
+#define TT_MS_LANGID_ENGLISH_CANADA                    0x1009
+#define TT_MS_LANGID_ENGLISH_NEW_ZEALAND               0x1409
+#define TT_MS_LANGID_ENGLISH_IRELAND                   0x1809
+#define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA              0x1c09
+#define TT_MS_LANGID_ENGLISH_JAMAICA                   0x2009
+#define TT_MS_LANGID_ENGLISH_CARIBBEAN                 0x2409
+#define TT_MS_LANGID_ENGLISH_BELIZE                    0x2809
+#define TT_MS_LANGID_ENGLISH_TRINIDAD                  0x2c09
+#define TT_MS_LANGID_ENGLISH_ZIMBABWE                  0x3009
+#define TT_MS_LANGID_ENGLISH_PHILIPPINES               0x3409
+#define TT_MS_LANGID_ENGLISH_INDONESIA                 0x3809
+#define TT_MS_LANGID_ENGLISH_HONG_KONG                 0x3c09
+#define TT_MS_LANGID_ENGLISH_INDIA                     0x4009
+#define TT_MS_LANGID_ENGLISH_MALAYSIA                  0x4409
+#define TT_MS_LANGID_ENGLISH_SINGAPORE                 0x4809
+#define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT    0x040a
+#define TT_MS_LANGID_SPANISH_MEXICO                    0x080a
+#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT  0x0c0a
+#define TT_MS_LANGID_SPANISH_GUATEMALA                 0x100a
+#define TT_MS_LANGID_SPANISH_COSTA_RICA                0x140a
+#define TT_MS_LANGID_SPANISH_PANAMA                    0x180a
+#define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC        0x1c0a
+#define TT_MS_LANGID_SPANISH_VENEZUELA                 0x200a
+#define TT_MS_LANGID_SPANISH_COLOMBIA                  0x240a
+#define TT_MS_LANGID_SPANISH_PERU                      0x280a
+#define TT_MS_LANGID_SPANISH_ARGENTINA                 0x2c0a
+#define TT_MS_LANGID_SPANISH_ECUADOR                   0x300a
+#define TT_MS_LANGID_SPANISH_CHILE                     0x340a
+#define TT_MS_LANGID_SPANISH_URUGUAY                   0x380a
+#define TT_MS_LANGID_SPANISH_PARAGUAY                  0x3c0a
+#define TT_MS_LANGID_SPANISH_BOLIVIA                   0x400a
+#define TT_MS_LANGID_SPANISH_EL_SALVADOR               0x440a
+#define TT_MS_LANGID_SPANISH_HONDURAS                  0x480a
+#define TT_MS_LANGID_SPANISH_NICARAGUA                 0x4c0a
+#define TT_MS_LANGID_SPANISH_PUERTO_RICO               0x500a
+#define TT_MS_LANGID_SPANISH_UNITED_STATES             0x540a
+  /* The following ID blatantly violate MS specs by using a */
+  /* sublanguage > 0x1F.                                    */
+#define TT_MS_LANGID_SPANISH_LATIN_AMERICA             0xE40aU
+#define TT_MS_LANGID_FINNISH_FINLAND                   0x040b
+#define TT_MS_LANGID_FRENCH_FRANCE                     0x040c
+#define TT_MS_LANGID_FRENCH_BELGIUM                    0x080c
+#define TT_MS_LANGID_FRENCH_CANADA                     0x0c0c
+#define TT_MS_LANGID_FRENCH_SWITZERLAND                0x100c
+#define TT_MS_LANGID_FRENCH_LUXEMBOURG                 0x140c
+#define TT_MS_LANGID_FRENCH_MONACO                     0x180c
+#define TT_MS_LANGID_FRENCH_WEST_INDIES                0x1c0c
+#define TT_MS_LANGID_FRENCH_REUNION                    0x200c
+#define TT_MS_LANGID_FRENCH_CONGO                      0x240c
+  /* which was formerly: */
+#define TT_MS_LANGID_FRENCH_ZAIRE  TT_MS_LANGID_FRENCH_CONGO
+#define TT_MS_LANGID_FRENCH_SENEGAL                    0x280c
+#define TT_MS_LANGID_FRENCH_CAMEROON                   0x2c0c
+#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE              0x300c
+#define TT_MS_LANGID_FRENCH_MALI                       0x340c
+#define TT_MS_LANGID_FRENCH_MOROCCO                    0x380c
+#define TT_MS_LANGID_FRENCH_HAITI                      0x3c0c
+  /* and another violation of the spec (see 0xE40aU) */
+#define TT_MS_LANGID_FRENCH_NORTH_AFRICA               0xE40cU
+#define TT_MS_LANGID_HEBREW_ISRAEL                     0x040d
+#define TT_MS_LANGID_HUNGARIAN_HUNGARY                 0x040e
+#define TT_MS_LANGID_ICELANDIC_ICELAND                 0x040f
+#define TT_MS_LANGID_ITALIAN_ITALY                     0x0410
+#define TT_MS_LANGID_ITALIAN_SWITZERLAND               0x0810
+#define TT_MS_LANGID_JAPANESE_JAPAN                    0x0411
+#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA     0x0412
+#define TT_MS_LANGID_KOREAN_JOHAB_KOREA                0x0812
+#define TT_MS_LANGID_DUTCH_NETHERLANDS                 0x0413
+#define TT_MS_LANGID_DUTCH_BELGIUM                     0x0813
+#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL           0x0414
+#define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK          0x0814
+#define TT_MS_LANGID_POLISH_POLAND                     0x0415
+#define TT_MS_LANGID_PORTUGUESE_BRAZIL                 0x0416
+#define TT_MS_LANGID_PORTUGUESE_PORTUGAL               0x0816
+#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND        0x0417
+#define TT_MS_LANGID_ROMANIAN_ROMANIA                  0x0418
+#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA                0x0818
+#define TT_MS_LANGID_RUSSIAN_RUSSIA                    0x0419
+#define TT_MS_LANGID_RUSSIAN_MOLDAVIA                  0x0819
+#define TT_MS_LANGID_CROATIAN_CROATIA                  0x041a
+#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN              0x081a
+#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC           0x0c1a
+
+#if 0  /* this used to be this value, but it looks like we were wrong */
+#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA        0x101a
+#else  /* current sources say */
+#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA       0x101a
+#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA        0x141a
+       /* and XPsp2 Platform SDK added (2004-07-26) */
+       /* Names are shortened to be significant within 40 chars. */
+#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN         0x181a
+#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC      0x181a
+#endif
+
+#define TT_MS_LANGID_SLOVAK_SLOVAKIA                   0x041b
+#define TT_MS_LANGID_ALBANIAN_ALBANIA                  0x041c
+#define TT_MS_LANGID_SWEDISH_SWEDEN                    0x041d
+#define TT_MS_LANGID_SWEDISH_FINLAND                   0x081d
+#define TT_MS_LANGID_THAI_THAILAND                     0x041e
+#define TT_MS_LANGID_TURKISH_TURKEY                    0x041f
+#define TT_MS_LANGID_URDU_PAKISTAN                     0x0420
+#define TT_MS_LANGID_URDU_INDIA                        0x0820
+#define TT_MS_LANGID_INDONESIAN_INDONESIA              0x0421
+#define TT_MS_LANGID_UKRAINIAN_UKRAINE                 0x0422
+#define TT_MS_LANGID_BELARUSIAN_BELARUS                0x0423
+#define TT_MS_LANGID_SLOVENE_SLOVENIA                  0x0424
+#define TT_MS_LANGID_ESTONIAN_ESTONIA                  0x0425
+#define TT_MS_LANGID_LATVIAN_LATVIA                    0x0426
+#define TT_MS_LANGID_LITHUANIAN_LITHUANIA              0x0427
+#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA      0x0827
+#define TT_MS_LANGID_TAJIK_TAJIKISTAN                  0x0428
+#define TT_MS_LANGID_FARSI_IRAN                        0x0429
+#define TT_MS_LANGID_VIETNAMESE_VIET_NAM               0x042a
+#define TT_MS_LANGID_ARMENIAN_ARMENIA                  0x042b
+#define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN            0x042c
+#define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC         0x082c
+#define TT_MS_LANGID_BASQUE_SPAIN                      0x042d
+#define TT_MS_LANGID_SORBIAN_GERMANY                   0x042e
+#define TT_MS_LANGID_MACEDONIAN_MACEDONIA              0x042f
+#define TT_MS_LANGID_SUTU_SOUTH_AFRICA                 0x0430
+#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA               0x0431
+#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA               0x0432
+#define TT_MS_LANGID_VENDA_SOUTH_AFRICA                0x0433
+#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA                0x0434
+#define TT_MS_LANGID_ZULU_SOUTH_AFRICA                 0x0435
+#define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA            0x0436
+#define TT_MS_LANGID_GEORGIAN_GEORGIA                  0x0437
+#define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS           0x0438
+#define TT_MS_LANGID_HINDI_INDIA                       0x0439
+#define TT_MS_LANGID_MALTESE_MALTA                     0x043a
+  /* Added by XPsp2 Platform SDK (2004-07-26) */
+#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY              0x043b
+#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN              0x083b
+#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND             0x0C3b
+#define TT_MS_LANGID_SAMI_LULE_NORWAY                  0x103b
+#define TT_MS_LANGID_SAMI_LULE_SWEDEN                  0x143b
+#define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY              0x183b
+#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN              0x1C3b
+#define TT_MS_LANGID_SAMI_SKOLT_FINLAND                0x203b
+#define TT_MS_LANGID_SAMI_INARI_FINLAND                0x243b
+  /* ... and we also keep our old identifier... */
+#define TT_MS_LANGID_SAAMI_LAPONIA                     0x043b
+
+#if 0 /* this seems to be a previous inversion */
+#define TT_MS_LANGID_IRISH_GAELIC_IRELAND              0x043c
+#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM    0x083c
+#else
+#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM    0x083c
+#define TT_MS_LANGID_IRISH_GAELIC_IRELAND              0x043c
+#endif
+
+#define TT_MS_LANGID_YIDDISH_GERMANY                   0x043d
+#define TT_MS_LANGID_MALAY_MALAYSIA                    0x043e
+#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM           0x083e
+#define TT_MS_LANGID_KAZAK_KAZAKSTAN                   0x043f
+#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN /* Cyrillic*/ 0x0440
+  /* alias declared in Windows 2000 */
+#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \
+          TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN
+
+#define TT_MS_LANGID_SWAHILI_KENYA                     0x0441
+#define TT_MS_LANGID_TURKMEN_TURKMENISTAN              0x0442
+#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN            0x0443
+#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC         0x0843
+#define TT_MS_LANGID_TATAR_TATARSTAN                   0x0444
+#define TT_MS_LANGID_BENGALI_INDIA                     0x0445
+#define TT_MS_LANGID_BENGALI_BANGLADESH                0x0845
+#define TT_MS_LANGID_PUNJABI_INDIA                     0x0446
+#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN           0x0846
+#define TT_MS_LANGID_GUJARATI_INDIA                    0x0447
+#define TT_MS_LANGID_ORIYA_INDIA                       0x0448
+#define TT_MS_LANGID_TAMIL_INDIA                       0x0449
+#define TT_MS_LANGID_TELUGU_INDIA                      0x044a
+#define TT_MS_LANGID_KANNADA_INDIA                     0x044b
+#define TT_MS_LANGID_MALAYALAM_INDIA                   0x044c
+#define TT_MS_LANGID_ASSAMESE_INDIA                    0x044d
+#define TT_MS_LANGID_MARATHI_INDIA                     0x044e
+#define TT_MS_LANGID_SANSKRIT_INDIA                    0x044f
+#define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450
+#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN      0x0850
+#define TT_MS_LANGID_TIBETAN_CHINA                     0x0451
+  /* Don't use the next constant!  It has            */
+  /*   (1) the wrong spelling (Dzonghka)             */
+  /*   (2) Microsoft doesn't officially define it -- */
+  /*       at least it is not in the List of Local   */
+  /*       ID Values.                                */
+  /*   (3) Dzongkha is not the same language as      */
+  /*       Tibetan, so merging it is wrong anyway.   */
+  /*                                                 */
+  /* TT_MS_LANGID_TIBETAN_BHUTAN is correct, BTW.    */
+#define TT_MS_LANGID_DZONGHKA_BHUTAN                   0x0851
+
+#if 0
+  /* the following used to be defined */
+#define TT_MS_LANGID_TIBETAN_BHUTAN                    0x0451
+  /* ... but it was changed; */
+#else
+  /* So we will continue to #define it, but with the correct value */
+#define TT_MS_LANGID_TIBETAN_BHUTAN   TT_MS_LANGID_DZONGHKA_BHUTAN
+#endif
+
+#define TT_MS_LANGID_WELSH_WALES                       0x0452
+#define TT_MS_LANGID_KHMER_CAMBODIA                    0x0453
+#define TT_MS_LANGID_LAO_LAOS                          0x0454
+#define TT_MS_LANGID_BURMESE_MYANMAR                   0x0455
+#define TT_MS_LANGID_GALICIAN_SPAIN                    0x0456
+#define TT_MS_LANGID_KONKANI_INDIA                     0x0457
+#define TT_MS_LANGID_MANIPURI_INDIA  /* Bengali */     0x0458
+#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */         0x0459
+#define TT_MS_LANGID_SINDHI_PAKISTAN                   0x0859
+  /* Missing a LCID for Sindhi in Devanagari script */
+#define TT_MS_LANGID_SYRIAC_SYRIA                      0x045a
+#define TT_MS_LANGID_SINHALESE_SRI_LANKA               0x045b
+#define TT_MS_LANGID_CHEROKEE_UNITED_STATES            0x045c
+#define TT_MS_LANGID_INUKTITUT_CANADA                  0x045d
+#define TT_MS_LANGID_AMHARIC_ETHIOPIA                  0x045e
+#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */    0x045f
+#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN           0x085f
+  /* Missing a LCID for Tifinagh script */
+#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */    0x0460
+  /* Spelled this way by XPsp2 Platform SDK (2004-07-26) */
+  /* script is yet unclear... might be Arabic, Nagari or Sharada */
+#define TT_MS_LANGID_KASHMIRI_SASIA                    0x0860
+  /* ... and aliased (by MS) for compatibility reasons. */
+#define TT_MS_LANGID_KASHMIRI_INDIA TT_MS_LANGID_KASHMIRI_SASIA
+#define TT_MS_LANGID_NEPALI_NEPAL                      0x0461
+#define TT_MS_LANGID_NEPALI_INDIA                      0x0861
+#define TT_MS_LANGID_FRISIAN_NETHERLANDS               0x0462
+#define TT_MS_LANGID_PASHTO_AFGHANISTAN                0x0463
+#define TT_MS_LANGID_FILIPINO_PHILIPPINES              0x0464
+#define TT_MS_LANGID_DHIVEHI_MALDIVES                  0x0465
+  /* alias declared in Windows 2000 */
+#define TT_MS_LANGID_DIVEHI_MALDIVES  TT_MS_LANGID_DHIVEHI_MALDIVES
+#define TT_MS_LANGID_EDO_NIGERIA                       0x0466
+#define TT_MS_LANGID_FULFULDE_NIGERIA                  0x0467
+#define TT_MS_LANGID_HAUSA_NIGERIA                     0x0468
+#define TT_MS_LANGID_IBIBIO_NIGERIA                    0x0469
+#define TT_MS_LANGID_YORUBA_NIGERIA                    0x046a
+#define TT_MS_LANGID_QUECHUA_BOLIVIA                   0x046b
+#define TT_MS_LANGID_QUECHUA_ECUADOR                   0x086b
+#define TT_MS_LANGID_QUECHUA_PERU                      0x0c6b
+#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA               0x046c
+  /* Also spelled by XPsp2 Platform SDK (2004-07-26) */
+#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \
+          TT_MS_LANGID_SEPEDI_SOUTH_AFRICA
+  /* language codes 0x046d, 0x046e and 0x046f are (still) unknown. */
+#define TT_MS_LANGID_IGBO_NIGERIA                      0x0470
+#define TT_MS_LANGID_KANURI_NIGERIA                    0x0471
+#define TT_MS_LANGID_OROMO_ETHIOPIA                    0x0472
+#define TT_MS_LANGID_TIGRIGNA_ETHIOPIA                 0x0473
+#define TT_MS_LANGID_TIGRIGNA_ERYTHREA                 0x0873
+  /* also spelled in the `Passport SDK' list as: */
+#define TT_MS_LANGID_TIGRIGNA_ERYTREA  TT_MS_LANGID_TIGRIGNA_ERYTHREA
+#define TT_MS_LANGID_GUARANI_PARAGUAY                  0x0474
+#define TT_MS_LANGID_HAWAIIAN_UNITED_STATES            0x0475
+#define TT_MS_LANGID_LATIN                             0x0476
+#define TT_MS_LANGID_SOMALI_SOMALIA                    0x0477
+  /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */
+  /*       not written (but OTOH the peculiar writing system is worth     */
+  /*       studying).                                                     */
+#define TT_MS_LANGID_YI_CHINA                          0x0478
+#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES   0x0479
+  /* language codes from 0x047a to 0x047f are (still) unknown. */
+#define TT_MS_LANGID_UIGHUR_CHINA                      0x0480
+#define TT_MS_LANGID_MAORI_NEW_ZEALAND                 0x0481
+
+#if 0  /* not deemed useful for fonts */
+#define TT_MS_LANGID_HUMAN_INTERFACE_DEVICE            0x04ff
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Possible values of the `name' identifier field in the name records of */
+  /* the TTF `name' table.  These values are platform independent.         */
+  /*                                                                       */
+#define TT_NAME_ID_COPYRIGHT            0
+#define TT_NAME_ID_FONT_FAMILY          1
+#define TT_NAME_ID_FONT_SUBFAMILY       2
+#define TT_NAME_ID_UNIQUE_ID            3
+#define TT_NAME_ID_FULL_NAME            4
+#define TT_NAME_ID_VERSION_STRING       5
+#define TT_NAME_ID_PS_NAME              6
+#define TT_NAME_ID_TRADEMARK            7
+
+  /* the following values are from the OpenType spec */
+#define TT_NAME_ID_MANUFACTURER         8
+#define TT_NAME_ID_DESIGNER             9
+#define TT_NAME_ID_DESCRIPTION          10
+#define TT_NAME_ID_VENDOR_URL           11
+#define TT_NAME_ID_DESIGNER_URL         12
+#define TT_NAME_ID_LICENSE              13
+#define TT_NAME_ID_LICENSE_URL          14
+  /* number 15 is reserved */
+#define TT_NAME_ID_PREFERRED_FAMILY     16
+#define TT_NAME_ID_PREFERRED_SUBFAMILY  17
+#define TT_NAME_ID_MAC_FULL_NAME        18
+
+  /* The following code is new as of 2000-01-21 */
+#define TT_NAME_ID_SAMPLE_TEXT          19
+
+  /* This is new in OpenType 1.3 */
+#define TT_NAME_ID_CID_FINDFONT_NAME    20
+
+  /* This is new in OpenType 1.5 */
+#define TT_NAME_ID_WWS_FAMILY           21
+#define TT_NAME_ID_WWS_SUBFAMILY        22
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Bit mask values for the Unicode Ranges from the TTF `OS2 ' table.     */
+  /*                                                                       */
+  /* Updated 08-Nov-2008.                                                  */
+  /*                                                                       */
+
+  /* Bit  0   Basic Latin */
+#define TT_UCR_BASIC_LATIN                     (1L <<  0) /* U+0020-U+007E */
+  /* Bit  1   C1 Controls and Latin-1 Supplement */
+#define TT_UCR_LATIN1_SUPPLEMENT               (1L <<  1) /* U+0080-U+00FF */
+  /* Bit  2   Latin Extended-A */
+#define TT_UCR_LATIN_EXTENDED_A                (1L <<  2) /* U+0100-U+017F */
+  /* Bit  3   Latin Extended-B */
+#define TT_UCR_LATIN_EXTENDED_B                (1L <<  3) /* U+0180-U+024F */
+  /* Bit  4   IPA Extensions                 */
+  /*          Phonetic Extensions            */
+  /*          Phonetic Extensions Supplement */
+#define TT_UCR_IPA_EXTENSIONS                  (1L <<  4) /* U+0250-U+02AF */
+                                                          /* U+1D00-U+1D7F */
+                                                          /* U+1D80-U+1DBF */
+  /* Bit  5   Spacing Modifier Letters */
+  /*          Modifier Tone Letters    */
+#define TT_UCR_SPACING_MODIFIER                (1L <<  5) /* U+02B0-U+02FF */
+                                                          /* U+A700-U+A71F */
+  /* Bit  6   Combining Diacritical Marks            */
+  /*          Combining Diacritical Marks Supplement */
+#define TT_UCR_COMBINING_DIACRITICS            (1L <<  6) /* U+0300-U+036F */
+                                                          /* U+1DC0-U+1DFF */
+  /* Bit  7   Greek and Coptic */
+#define TT_UCR_GREEK                           (1L <<  7) /* U+0370-U+03FF */
+  /* Bit  8   Coptic */
+#define TT_UCR_COPTIC                          (1L <<  8) /* U+2C80-U+2CFF */
+  /* Bit  9   Cyrillic            */
+  /*          Cyrillic Supplement */
+  /*          Cyrillic Extended-A */
+  /*          Cyrillic Extended-B */
+#define TT_UCR_CYRILLIC                        (1L <<  9) /* U+0400-U+04FF */
+                                                          /* U+0500-U+052F */
+                                                          /* U+2DE0-U+2DFF */
+                                                          /* U+A640-U+A69F */
+  /* Bit 10   Armenian */
+#define TT_UCR_ARMENIAN                        (1L << 10) /* U+0530-U+058F */
+  /* Bit 11   Hebrew */
+#define TT_UCR_HEBREW                          (1L << 11) /* U+0590-U+05FF */
+  /* Bit 12   Vai */
+#define TT_UCR_VAI                             (1L << 12) /* U+A500-U+A63F */
+  /* Bit 13   Arabic            */
+  /*          Arabic Supplement */
+#define TT_UCR_ARABIC                          (1L << 13) /* U+0600-U+06FF */
+                                                          /* U+0750-U+077F */
+  /* Bit 14   NKo */
+#define TT_UCR_NKO                             (1L << 14) /* U+07C0-U+07FF */
+  /* Bit 15   Devanagari */
+#define TT_UCR_DEVANAGARI                      (1L << 15) /* U+0900-U+097F */
+  /* Bit 16   Bengali */
+#define TT_UCR_BENGALI                         (1L << 16) /* U+0980-U+09FF */
+  /* Bit 17   Gurmukhi */
+#define TT_UCR_GURMUKHI                        (1L << 17) /* U+0A00-U+0A7F */
+  /* Bit 18   Gujarati */
+#define TT_UCR_GUJARATI                        (1L << 18) /* U+0A80-U+0AFF */
+  /* Bit 19   Oriya */
+#define TT_UCR_ORIYA                           (1L << 19) /* U+0B00-U+0B7F */
+  /* Bit 20   Tamil */
+#define TT_UCR_TAMIL                           (1L << 20) /* U+0B80-U+0BFF */
+  /* Bit 21   Telugu */
+#define TT_UCR_TELUGU                          (1L << 21) /* U+0C00-U+0C7F */
+  /* Bit 22   Kannada */
+#define TT_UCR_KANNADA                         (1L << 22) /* U+0C80-U+0CFF */
+  /* Bit 23   Malayalam */
+#define TT_UCR_MALAYALAM                       (1L << 23) /* U+0D00-U+0D7F */
+  /* Bit 24   Thai */
+#define TT_UCR_THAI                            (1L << 24) /* U+0E00-U+0E7F */
+  /* Bit 25   Lao */
+#define TT_UCR_LAO                             (1L << 25) /* U+0E80-U+0EFF */
+  /* Bit 26   Georgian            */
+  /*          Georgian Supplement */
+#define TT_UCR_GEORGIAN                        (1L << 26) /* U+10A0-U+10FF */
+                                                          /* U+2D00-U+2D2F */
+  /* Bit 27   Balinese */
+#define TT_UCR_BALINESE                        (1L << 27) /* U+1B00-U+1B7F */
+  /* Bit 28   Hangul Jamo */
+#define TT_UCR_HANGUL_JAMO                     (1L << 28) /* U+1100-U+11FF */
+  /* Bit 29   Latin Extended Additional */
+  /*          Latin Extended-C          */
+  /*          Latin Extended-D          */
+#define TT_UCR_LATIN_EXTENDED_ADDITIONAL       (1L << 29) /* U+1E00-U+1EFF */
+                                                          /* U+2C60-U+2C7F */
+                                                          /* U+A720-U+A7FF */
+  /* Bit 30   Greek Extended */
+#define TT_UCR_GREEK_EXTENDED                  (1L << 30) /* U+1F00-U+1FFF */
+  /* Bit 31   General Punctuation      */
+  /*          Supplemental Punctuation */
+#define TT_UCR_GENERAL_PUNCTUATION             (1L << 31) /* U+2000-U+206F */
+                                                          /* U+2E00-U+2E7F */
+  /* Bit 32   Superscripts And Subscripts */
+#define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS         (1L <<  0) /* U+2070-U+209F */
+  /* Bit 33   Currency Symbols */
+#define TT_UCR_CURRENCY_SYMBOLS                (1L <<  1) /* U+20A0-U+20CF */
+  /* Bit 34   Combining Diacritical Marks For Symbols */
+#define TT_UCR_COMBINING_DIACRITICS_SYMB       (1L <<  2) /* U+20D0-U+20FF */
+  /* Bit 35   Letterlike Symbols */
+#define TT_UCR_LETTERLIKE_SYMBOLS              (1L <<  3) /* U+2100-U+214F */
+  /* Bit 36   Number Forms */
+#define TT_UCR_NUMBER_FORMS                    (1L <<  4) /* U+2150-U+218F */
+  /* Bit 37   Arrows                           */
+  /*          Supplemental Arrows-A            */
+  /*          Supplemental Arrows-B            */
+  /*          Miscellaneous Symbols and Arrows */
+#define TT_UCR_ARROWS                          (1L <<  5) /* U+2190-U+21FF */
+                                                          /* U+27F0-U+27FF */
+                                                          /* U+2900-U+297F */
+                                                          /* U+2B00-U+2BFF */
+  /* Bit 38   Mathematical Operators               */
+  /*          Supplemental Mathematical Operators  */
+  /*          Miscellaneous Mathematical Symbols-A */
+  /*          Miscellaneous Mathematical Symbols-B */
+#define TT_UCR_MATHEMATICAL_OPERATORS          (1L <<  6) /* U+2200-U+22FF */
+                                                          /* U+2A00-U+2AFF */
+                                                          /* U+27C0-U+27EF */
+                                                          /* U+2980-U+29FF */
+  /* Bit 39 Miscellaneous Technical */
+#define TT_UCR_MISCELLANEOUS_TECHNICAL         (1L <<  7) /* U+2300-U+23FF */
+  /* Bit 40   Control Pictures */
+#define TT_UCR_CONTROL_PICTURES                (1L <<  8) /* U+2400-U+243F */
+  /* Bit 41   Optical Character Recognition */
+#define TT_UCR_OCR                             (1L <<  9) /* U+2440-U+245F */
+  /* Bit 42   Enclosed Alphanumerics */
+#define TT_UCR_ENCLOSED_ALPHANUMERICS          (1L << 10) /* U+2460-U+24FF */
+  /* Bit 43   Box Drawing */
+#define TT_UCR_BOX_DRAWING                     (1L << 11) /* U+2500-U+257F */
+  /* Bit 44   Block Elements */
+#define TT_UCR_BLOCK_ELEMENTS                  (1L << 12) /* U+2580-U+259F */
+  /* Bit 45   Geometric Shapes */
+#define TT_UCR_GEOMETRIC_SHAPES                (1L << 13) /* U+25A0-U+25FF */
+  /* Bit 46   Miscellaneous Symbols */
+#define TT_UCR_MISCELLANEOUS_SYMBOLS           (1L << 14) /* U+2600-U+26FF */
+  /* Bit 47   Dingbats */
+#define TT_UCR_DINGBATS                        (1L << 15) /* U+2700-U+27BF */
+  /* Bit 48   CJK Symbols and Punctuation */
+#define TT_UCR_CJK_SYMBOLS                     (1L << 16) /* U+3000-U+303F */
+  /* Bit 49   Hiragana */
+#define TT_UCR_HIRAGANA                        (1L << 17) /* U+3040-U+309F */
+  /* Bit 50   Katakana                     */
+  /*          Katakana Phonetic Extensions */
+#define TT_UCR_KATAKANA                        (1L << 18) /* U+30A0-U+30FF */
+                                                          /* U+31F0-U+31FF */
+  /* Bit 51   Bopomofo          */
+  /*          Bopomofo Extended */
+#define TT_UCR_BOPOMOFO                        (1L << 19) /* U+3100-U+312F */
+                                                          /* U+31A0-U+31BF */
+  /* Bit 52   Hangul Compatibility Jamo */
+#define TT_UCR_HANGUL_COMPATIBILITY_JAMO       (1L << 20) /* U+3130-U+318F */
+  /* Bit 53   Phags-Pa */
+#define TT_UCR_CJK_MISC                        (1L << 21) /* U+A840-U+A87F */
+#define TT_UCR_KANBUN  TT_UCR_CJK_MISC /* deprecated */
+#define TT_UCR_PHAGSPA
+  /* Bit 54   Enclosed CJK Letters and Months */
+#define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS     (1L << 22) /* U+3200-U+32FF */
+  /* Bit 55   CJK Compatibility */
+#define TT_UCR_CJK_COMPATIBILITY               (1L << 23) /* U+3300-U+33FF */
+  /* Bit 56   Hangul Syllables */
+#define TT_UCR_HANGUL                          (1L << 24) /* U+AC00-U+D7A3 */
+  /* Bit 57   High Surrogates              */
+  /*          High Private Use Surrogates  */
+  /*          Low Surrogates               */
+  /*                                       */
+  /* According to OpenType specs v.1.3+,   */
+  /* setting bit 57 implies that there is  */
+  /* at least one codepoint beyond the     */
+  /* Basic Multilingual Plane that is      */
+  /* supported by this font.  So it really */
+  /* means >= U+10000                      */
+#define TT_UCR_SURROGATES                      (1L << 25) /* U+D800-U+DB7F */
+                                                          /* U+DB80-U+DBFF */
+                                                          /* U+DC00-U+DFFF */
+#define TT_UCR_NON_PLANE_0  TT_UCR_SURROGATES
+  /* Bit 58  Phoenician */
+#define TT_UCR_PHOENICIAN                      (1L << 26) /*U+10900-U+1091F*/
+  /* Bit 59   CJK Unified Ideographs             */
+  /*          CJK Radicals Supplement            */
+  /*          Kangxi Radicals                    */
+  /*          Ideographic Description Characters */
+  /*          CJK Unified Ideographs Extension A */
+  /*          CJK Unified Ideographs Extension B */
+  /*          Kanbun                             */
+#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS          (1L << 27) /* U+4E00-U+9FFF */
+                                                          /* U+2E80-U+2EFF */
+                                                          /* U+2F00-U+2FDF */
+                                                          /* U+2FF0-U+2FFF */
+                                                          /* U+3400-U+4DB5 */
+                                                          /*U+20000-U+2A6DF*/
+                                                          /* U+3190-U+319F */
+  /* Bit 60   Private Use */
+#define TT_UCR_PRIVATE_USE                     (1L << 28) /* U+E000-U+F8FF */
+  /* Bit 61   CJK Strokes                             */
+  /*          CJK Compatibility Ideographs            */
+  /*          CJK Compatibility Ideographs Supplement */
+#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS    (1L << 29) /* U+31C0-U+31EF */
+                                                          /* U+F900-U+FAFF */
+                                                          /*U+2F800-U+2FA1F*/
+  /* Bit 62   Alphabetic Presentation Forms */
+#define TT_UCR_ALPHABETIC_PRESENTATION_FORMS   (1L << 30) /* U+FB00-U+FB4F */
+  /* Bit 63   Arabic Presentation Forms-A */
+#define TT_UCR_ARABIC_PRESENTATIONS_A          (1L << 31) /* U+FB50-U+FDFF */
+  /* Bit 64   Combining Half Marks */
+#define TT_UCR_COMBINING_HALF_MARKS            (1L <<  0) /* U+FE20-U+FE2F */
+  /* Bit 65   Vertical forms          */
+  /*          CJK Compatibility Forms */
+#define TT_UCR_CJK_COMPATIBILITY_FORMS         (1L <<  1) /* U+FE10-U+FE1F */
+                                                          /* U+FE30-U+FE4F */
+  /* Bit 66   Small Form Variants */
+#define TT_UCR_SMALL_FORM_VARIANTS             (1L <<  2) /* U+FE50-U+FE6F */
+  /* Bit 67   Arabic Presentation Forms-B */
+#define TT_UCR_ARABIC_PRESENTATIONS_B          (1L <<  3) /* U+FE70-U+FEFE */
+  /* Bit 68   Halfwidth and Fullwidth Forms */
+#define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS       (1L <<  4) /* U+FF00-U+FFEF */
+  /* Bit 69   Specials */
+#define TT_UCR_SPECIALS                        (1L <<  5) /* U+FFF0-U+FFFD */
+  /* Bit 70   Tibetan */
+#define TT_UCR_TIBETAN                         (1L <<  6) /* U+0F00-U+0FFF */
+  /* Bit 71   Syriac */
+#define TT_UCR_SYRIAC                          (1L <<  7) /* U+0700-U+074F */
+  /* Bit 72   Thaana */
+#define TT_UCR_THAANA                          (1L <<  8) /* U+0780-U+07BF */
+  /* Bit 73   Sinhala */
+#define TT_UCR_SINHALA                         (1L <<  9) /* U+0D80-U+0DFF */
+  /* Bit 74   Myanmar */
+#define TT_UCR_MYANMAR                         (1L << 10) /* U+1000-U+109F */
+  /* Bit 75   Ethiopic            */
+  /*          Ethiopic Supplement */
+  /*          Ethiopic Extended   */
+#define TT_UCR_ETHIOPIC                        (1L << 11) /* U+1200-U+137F */
+                                                          /* U+1380-U+139F */
+                                                          /* U+2D80-U+2DDF */
+  /* Bit 76   Cherokee */
+#define TT_UCR_CHEROKEE                        (1L << 12) /* U+13A0-U+13FF */
+  /* Bit 77   Unified Canadian Aboriginal Syllabics */
+#define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS   (1L << 13) /* U+1400-U+167F */
+  /* Bit 78   Ogham */
+#define TT_UCR_OGHAM                           (1L << 14) /* U+1680-U+169F */
+  /* Bit 79   Runic */
+#define TT_UCR_RUNIC                           (1L << 15) /* U+16A0-U+16FF */
+  /* Bit 80   Khmer         */
+  /*          Khmer Symbols */
+#define TT_UCR_KHMER                           (1L << 16) /* U+1780-U+17FF */
+                                                          /* U+19E0-U+19FF */
+  /* Bit 81   Mongolian */
+#define TT_UCR_MONGOLIAN                       (1L << 17) /* U+1800-U+18AF */
+  /* Bit 82   Braille Patterns */
+#define TT_UCR_BRAILLE                         (1L << 18) /* U+2800-U+28FF */
+  /* Bit 83   Yi Syllables */
+  /*          Yi Radicals  */
+#define TT_UCR_YI                              (1L << 19) /* U+A000-U+A48F */
+                                                          /* U+A490-U+A4CF */
+  /* Bit 84   Tagalog  */
+  /*          Hanunoo  */
+  /*          Buhid    */
+  /*          Tagbanwa */
+#define TT_UCR_PHILIPPINE                      (1L << 20) /* U+1700-U+171F */
+                                                          /* U+1720-U+173F */
+                                                          /* U+1740-U+175F */
+                                                          /* U+1760-U+177F */
+  /* Bit 85   Old Italic */
+#define TT_UCR_OLD_ITALIC                      (1L << 21) /*U+10300-U+1032F*/
+  /* Bit 86   Gothic */
+#define TT_UCR_GOTHIC                          (1L << 22) /*U+10330-U+1034F*/
+  /* Bit 87   Deseret */
+#define TT_UCR_DESERET                         (1L << 23) /*U+10400-U+1044F*/
+  /* Bit 88   Byzantine Musical Symbols      */
+  /*          Musical Symbols                */
+  /*          Ancient Greek Musical Notation */
+#define TT_UCR_MUSICAL_SYMBOLS                 (1L << 24) /*U+1D000-U+1D0FF*/
+                                                          /*U+1D100-U+1D1FF*/
+                                                          /*U+1D200-U+1D24F*/
+  /* Bit 89   Mathematical Alphanumeric Symbols */
+#define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS       (1L << 25) /*U+1D400-U+1D7FF*/
+  /* Bit 90   Private Use (plane 15) */
+  /*          Private Use (plane 16) */
+#define TT_UCR_PRIVATE_USE_SUPPLEMENTARY       (1L << 26) /*U+F0000-U+FFFFD*/
+                                                        /*U+100000-U+10FFFD*/
+  /* Bit 91   Variation Selectors            */
+  /*          Variation Selectors Supplement */
+#define TT_UCR_VARIATION_SELECTORS             (1L << 27) /* U+FE00-U+FE0F */
+                                                          /*U+E0100-U+E01EF*/
+  /* Bit 92   Tags */
+#define TT_UCR_TAGS                            (1L << 28) /*U+E0000-U+E007F*/
+  /* Bit 93   Limbu */
+#define TT_UCR_LIMBU                           (1L << 29) /* U+1900-U+194F */
+  /* Bit 94   Tai Le */
+#define TT_UCR_TAI_LE                          (1L << 30) /* U+1950-U+197F */
+  /* Bit 95   New Tai Lue */
+#define TT_UCR_NEW_TAI_LUE                     (1L << 31) /* U+1980-U+19DF */
+  /* Bit 96   Buginese */
+#define TT_UCR_BUGINESE                        (1L <<  0) /* U+1A00-U+1A1F */
+  /* Bit 97   Glagolitic */
+#define TT_UCR_GLAGOLITIC                      (1L <<  1) /* U+2C00-U+2C5F */
+  /* Bit 98   Tifinagh */
+#define TT_UCR_TIFINAGH                        (1L <<  2) /* U+2D30-U+2D7F */
+  /* Bit 99   Yijing Hexagram Symbols */
+#define TT_UCR_YIJING                          (1L <<  3) /* U+4DC0-U+4DFF */
+  /* Bit 100  Syloti Nagri */
+#define TT_UCR_SYLOTI_NAGRI                    (1L <<  4) /* U+A800-U+A82F */
+  /* Bit 101  Linear B Syllabary */
+  /*          Linear B Ideograms */
+  /*          Aegean Numbers     */
+#define TT_UCR_LINEAR_B                        (1L <<  5) /*U+10000-U+1007F*/
+                                                          /*U+10080-U+100FF*/
+                                                          /*U+10100-U+1013F*/
+  /* Bit 102  Ancient Greek Numbers */
+#define TT_UCR_ANCIENT_GREEK_NUMBERS           (1L <<  6) /*U+10140-U+1018F*/
+  /* Bit 103  Ugaritic */
+#define TT_UCR_UGARITIC                        (1L <<  7) /*U+10380-U+1039F*/
+  /* Bit 104  Old Persian */
+#define TT_UCR_OLD_PERSIAN                     (1L <<  8) /*U+103A0-U+103DF*/
+  /* Bit 105  Shavian */
+#define TT_UCR_SHAVIAN                         (1L <<  9) /*U+10450-U+1047F*/
+  /* Bit 106  Osmanya */
+#define TT_UCR_OSMANYA                         (1L << 10) /*U+10480-U+104AF*/
+  /* Bit 107  Cypriot Syllabary */
+#define TT_UCR_CYPRIOT_SYLLABARY               (1L << 11) /*U+10800-U+1083F*/
+  /* Bit 108  Kharoshthi */
+#define TT_UCR_KHAROSHTHI                      (1L << 12) /*U+10A00-U+10A5F*/
+  /* Bit 109  Tai Xuan Jing Symbols */
+#define TT_UCR_TAI_XUAN_JING                   (1L << 13) /*U+1D300-U+1D35F*/
+  /* Bit 110  Cuneiform                         */
+  /*          Cuneiform Numbers and Punctuation */
+#define TT_UCR_CUNEIFORM                       (1L << 14) /*U+12000-U+123FF*/
+                                                          /*U+12400-U+1247F*/
+  /* Bit 111  Counting Rod Numerals */
+#define TT_UCR_COUNTING_ROD_NUMERALS           (1L << 15) /*U+1D360-U+1D37F*/
+  /* Bit 112  Sundanese */
+#define TT_UCR_SUNDANESE                       (1L << 16) /* U+1B80-U+1BBF */
+  /* Bit 113  Lepcha */
+#define TT_UCR_LEPCHA                          (1L << 17) /* U+1C00-U+1C4F */
+  /* Bit 114  Ol Chiki */
+#define TT_UCR_OL_CHIKI                        (1L << 18) /* U+1C50-U+1C7F */
+  /* Bit 115  Saurashtra */
+#define TT_UCR_SAURASHTRA                      (1L << 19) /* U+A880-U+A8DF */
+  /* Bit 116  Kayah Li */
+#define TT_UCR_KAYAH_LI                        (1L << 20) /* U+A900-U+A92F */
+  /* Bit 117  Rejang */
+#define TT_UCR_REJANG                          (1L << 21) /* U+A930-U+A95F */
+  /* Bit 118  Cham */
+#define TT_UCR_CHAM                            (1L << 22) /* U+AA00-U+AA5F */
+  /* Bit 119  Ancient Symbols */
+#define TT_UCR_ANCIENT_SYMBOLS                 (1L << 23) /*U+10190-U+101CF*/
+  /* Bit 120  Phaistos Disc */
+#define TT_UCR_PHAISTOS_DISC                   (1L << 24) /*U+101D0-U+101FF*/
+  /* Bit 121  Carian */
+  /*          Lycian */
+  /*          Lydian */
+#define TT_UCR_OLD_ANATOLIAN                   (1L << 25) /*U+102A0-U+102DF*/
+                                                          /*U+10280-U+1029F*/
+                                                          /*U+10920-U+1093F*/
+  /* Bit 122  Domino Tiles  */
+  /*          Mahjong Tiles */
+#define TT_UCR_GAME_TILES                      (1L << 26) /*U+1F030-U+1F09F*/
+                                                          /*U+1F000-U+1F02F*/
+  /* Bit 123-127 Reserved for process-internal usage */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Some compilers have a very limited length of identifiers.             */
+  /*                                                                       */
+#if defined( __TURBOC__ ) && __TURBOC__ < 0x0410 || defined( __PACIFIC__ )
+#define HAVE_LIMIT_ON_IDENTS
+#endif
+
+
+#ifndef HAVE_LIMIT_ON_IDENTS
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Here some alias #defines in order to be clearer.                      */
+  /*                                                                       */
+  /* These are not always #defined to stay within the 31~character limit   */
+  /* which some compilers have.                                            */
+  /*                                                                       */
+  /* Credits go to Dave Hoo <dhoo@flash.net> for pointing out that modern  */
+  /* Borland compilers (read: from BC++ 3.1 on) can increase this limit.   */
+  /* If you get a warning with such a compiler, use the -i40 switch.       */
+  /*                                                                       */
+#define TT_UCR_ARABIC_PRESENTATION_FORMS_A      \
+         TT_UCR_ARABIC_PRESENTATIONS_A
+#define TT_UCR_ARABIC_PRESENTATION_FORMS_B      \
+         TT_UCR_ARABIC_PRESENTATIONS_B
+
+#define TT_UCR_COMBINING_DIACRITICAL_MARKS      \
+         TT_UCR_COMBINING_DIACRITICS
+#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \
+         TT_UCR_COMBINING_DIACRITICS_SYMB
+
+
+#endif /* !HAVE_LIMIT_ON_IDENTS */
+
+
+FT_END_HEADER
+
+#endif /* __TTNAMEID_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/tttables.h b/core/include/thirdparties/freetype/freetype/tttables.h
new file mode 100644
index 0000000..c620550
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/tttables.h
@@ -0,0 +1,777 @@
+/***************************************************************************/
+/*                                                                         */
+/*  tttables.h                                                             */
+/*                                                                         */
+/*    Basic SFNT/TrueType tables definitions and interface                 */
+/*    (specification only).                                                */
+/*                                                                         */
+/*  Copyright 1996-2005, 2008-2012 by                                      */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __TTTABLES_H__
+#define __TTTABLES_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Section>                                                             */
+  /*    truetype_tables                                                    */
+  /*                                                                       */
+  /* <Title>                                                               */
+  /*    TrueType Tables                                                    */
+  /*                                                                       */
+  /* <Abstract>                                                            */
+  /*    TrueType specific table types and functions.                       */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This section contains the definition of TrueType-specific tables   */
+  /*    as well as some routines used to access and process them.          */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_Header                                                          */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a TrueType font header table.  All       */
+  /*    fields follow the TrueType specification.                          */
+  /*                                                                       */
+  typedef struct  TT_Header_
+  {
+    FT_Fixed   Table_Version;
+    FT_Fixed   Font_Revision;
+
+    FT_Long    CheckSum_Adjust;
+    FT_Long    Magic_Number;
+
+    FT_UShort  Flags;
+    FT_UShort  Units_Per_EM;
+
+    FT_Long    Created [2];
+    FT_Long    Modified[2];
+
+    FT_Short   xMin;
+    FT_Short   yMin;
+    FT_Short   xMax;
+    FT_Short   yMax;
+
+    FT_UShort  Mac_Style;
+    FT_UShort  Lowest_Rec_PPEM;
+
+    FT_Short   Font_Direction;
+    FT_Short   Index_To_Loc_Format;
+    FT_Short   Glyph_Data_Format;
+
+  } TT_Header;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_HoriHeader                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a TrueType horizontal header, the `hhea' */
+  /*    table, as well as the corresponding horizontal metrics table,      */
+  /*    i.e., the `hmtx' table.                                            */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    Version                :: The table version.                       */
+  /*                                                                       */
+  /*    Ascender               :: The font's ascender, i.e., the distance  */
+  /*                              from the baseline to the top-most of all */
+  /*                              glyph points found in the font.          */
+  /*                                                                       */
+  /*                              This value is invalid in many fonts, as  */
+  /*                              it is usually set by the font designer,  */
+  /*                              and often reflects only a portion of the */
+  /*                              glyphs found in the font (maybe ASCII).  */
+  /*                                                                       */
+  /*                              You should use the `sTypoAscender' field */
+  /*                              of the OS/2 table instead if you want    */
+  /*                              the correct one.                         */
+  /*                                                                       */
+  /*    Descender              :: The font's descender, i.e., the distance */
+  /*                              from the baseline to the bottom-most of  */
+  /*                              all glyph points found in the font.  It  */
+  /*                              is negative.                             */
+  /*                                                                       */
+  /*                              This value is invalid in many fonts, as  */
+  /*                              it is usually set by the font designer,  */
+  /*                              and often reflects only a portion of the */
+  /*                              glyphs found in the font (maybe ASCII).  */
+  /*                                                                       */
+  /*                              You should use the `sTypoDescender'      */
+  /*                              field of the OS/2 table instead if you   */
+  /*                              want the correct one.                    */
+  /*                                                                       */
+  /*    Line_Gap               :: The font's line gap, i.e., the distance  */
+  /*                              to add to the ascender and descender to  */
+  /*                              get the BTB, i.e., the                   */
+  /*                              baseline-to-baseline distance for the    */
+  /*                              font.                                    */
+  /*                                                                       */
+  /*    advance_Width_Max      :: This field is the maximum of all advance */
+  /*                              widths found in the font.  It can be     */
+  /*                              used to compute the maximum width of an  */
+  /*                              arbitrary string of text.                */
+  /*                                                                       */
+  /*    min_Left_Side_Bearing  :: The minimum left side bearing of all     */
+  /*                              glyphs within the font.                  */
+  /*                                                                       */
+  /*    min_Right_Side_Bearing :: The minimum right side bearing of all    */
+  /*                              glyphs within the font.                  */
+  /*                                                                       */
+  /*    xMax_Extent            :: The maximum horizontal extent (i.e., the */
+  /*                              `width' of a glyph's bounding box) for   */
+  /*                              all glyphs in the font.                  */
+  /*                                                                       */
+  /*    caret_Slope_Rise       :: The rise coefficient of the cursor's     */
+  /*                              slope of the cursor (slope=rise/run).    */
+  /*                                                                       */
+  /*    caret_Slope_Run        :: The run coefficient of the cursor's      */
+  /*                              slope.                                   */
+  /*                                                                       */
+  /*    Reserved               :: 8~reserved bytes.                        */
+  /*                                                                       */
+  /*    metric_Data_Format     :: Always~0.                                */
+  /*                                                                       */
+  /*    number_Of_HMetrics     :: Number of HMetrics entries in the `hmtx' */
+  /*                              table -- this value can be smaller than  */
+  /*                              the total number of glyphs in the font.  */
+  /*                                                                       */
+  /*    long_metrics           :: A pointer into the `hmtx' table.         */
+  /*                                                                       */
+  /*    short_metrics          :: A pointer into the `hmtx' table.         */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should   */
+  /*               be identical except for the names of their fields which */
+  /*               are different.                                          */
+  /*                                                                       */
+  /*               This ensures that a single function in the `ttload'     */
+  /*               module is able to read both the horizontal and vertical */
+  /*               headers.                                                */
+  /*                                                                       */
+  typedef struct  TT_HoriHeader_
+  {
+    FT_Fixed   Version;
+    FT_Short   Ascender;
+    FT_Short   Descender;
+    FT_Short   Line_Gap;
+
+    FT_UShort  advance_Width_Max;      /* advance width maximum */
+
+    FT_Short   min_Left_Side_Bearing;  /* minimum left-sb       */
+    FT_Short   min_Right_Side_Bearing; /* minimum right-sb      */
+    FT_Short   xMax_Extent;            /* xmax extents          */
+    FT_Short   caret_Slope_Rise;
+    FT_Short   caret_Slope_Run;
+    FT_Short   caret_Offset;
+
+    FT_Short   Reserved[4];
+
+    FT_Short   metric_Data_Format;
+    FT_UShort  number_Of_HMetrics;
+
+    /* The following fields are not defined by the TrueType specification */
+    /* but they are used to connect the metrics header to the relevant    */
+    /* `HMTX' table.                                                      */
+
+    void*      long_metrics;
+    void*      short_metrics;
+
+  } TT_HoriHeader;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_VertHeader                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a TrueType vertical header, the `vhea'   */
+  /*    table, as well as the corresponding vertical metrics table, i.e.,  */
+  /*    the `vmtx' table.                                                  */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    Version                 :: The table version.                      */
+  /*                                                                       */
+  /*    Ascender                :: The font's ascender, i.e., the distance */
+  /*                               from the baseline to the top-most of    */
+  /*                               all glyph points found in the font.     */
+  /*                                                                       */
+  /*                               This value is invalid in many fonts, as */
+  /*                               it is usually set by the font designer, */
+  /*                               and often reflects only a portion of    */
+  /*                               the glyphs found in the font (maybe     */
+  /*                               ASCII).                                 */
+  /*                                                                       */
+  /*                               You should use the `sTypoAscender'      */
+  /*                               field of the OS/2 table instead if you  */
+  /*                               want the correct one.                   */
+  /*                                                                       */
+  /*    Descender               :: The font's descender, i.e., the         */
+  /*                               distance from the baseline to the       */
+  /*                               bottom-most of all glyph points found   */
+  /*                               in the font.  It is negative.           */
+  /*                                                                       */
+  /*                               This value is invalid in many fonts, as */
+  /*                               it is usually set by the font designer, */
+  /*                               and often reflects only a portion of    */
+  /*                               the glyphs found in the font (maybe     */
+  /*                               ASCII).                                 */
+  /*                                                                       */
+  /*                               You should use the `sTypoDescender'     */
+  /*                               field of the OS/2 table instead if you  */
+  /*                               want the correct one.                   */
+  /*                                                                       */
+  /*    Line_Gap                :: The font's line gap, i.e., the distance */
+  /*                               to add to the ascender and descender to */
+  /*                               get the BTB, i.e., the                  */
+  /*                               baseline-to-baseline distance for the   */
+  /*                               font.                                   */
+  /*                                                                       */
+  /*    advance_Height_Max      :: This field is the maximum of all        */
+  /*                               advance heights found in the font.  It  */
+  /*                               can be used to compute the maximum      */
+  /*                               height of an arbitrary string of text.  */
+  /*                                                                       */
+  /*    min_Top_Side_Bearing    :: The minimum top side bearing of all     */
+  /*                               glyphs within the font.                 */
+  /*                                                                       */
+  /*    min_Bottom_Side_Bearing :: The minimum bottom side bearing of all  */
+  /*                               glyphs within the font.                 */
+  /*                                                                       */
+  /*    yMax_Extent             :: The maximum vertical extent (i.e., the  */
+  /*                               `height' of a glyph's bounding box) for */
+  /*                               all glyphs in the font.                 */
+  /*                                                                       */
+  /*    caret_Slope_Rise        :: The rise coefficient of the cursor's    */
+  /*                               slope of the cursor (slope=rise/run).   */
+  /*                                                                       */
+  /*    caret_Slope_Run         :: The run coefficient of the cursor's     */
+  /*                               slope.                                  */
+  /*                                                                       */
+  /*    caret_Offset            :: The cursor's offset for slanted fonts.  */
+  /*                               This value is `reserved' in vmtx        */
+  /*                               version 1.0.                            */
+  /*                                                                       */
+  /*    Reserved                :: 8~reserved bytes.                       */
+  /*                                                                       */
+  /*    metric_Data_Format      :: Always~0.                               */
+  /*                                                                       */
+  /*    number_Of_HMetrics      :: Number of VMetrics entries in the       */
+  /*                               `vmtx' table -- this value can be       */
+  /*                               smaller than the total number of glyphs */
+  /*                               in the font.                            */
+  /*                                                                       */
+  /*    long_metrics           :: A pointer into the `vmtx' table.         */
+  /*                                                                       */
+  /*    short_metrics          :: A pointer into the `vmtx' table.         */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    IMPORTANT: The TT_HoriHeader and TT_VertHeader structures should   */
+  /*               be identical except for the names of their fields which */
+  /*               are different.                                          */
+  /*                                                                       */
+  /*               This ensures that a single function in the `ttload'     */
+  /*               module is able to read both the horizontal and vertical */
+  /*               headers.                                                */
+  /*                                                                       */
+  typedef struct  TT_VertHeader_
+  {
+    FT_Fixed   Version;
+    FT_Short   Ascender;
+    FT_Short   Descender;
+    FT_Short   Line_Gap;
+
+    FT_UShort  advance_Height_Max;      /* advance height maximum */
+
+    FT_Short   min_Top_Side_Bearing;    /* minimum left-sb or top-sb       */
+    FT_Short   min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb   */
+    FT_Short   yMax_Extent;             /* xmax or ymax extents            */
+    FT_Short   caret_Slope_Rise;
+    FT_Short   caret_Slope_Run;
+    FT_Short   caret_Offset;
+
+    FT_Short   Reserved[4];
+
+    FT_Short   metric_Data_Format;
+    FT_UShort  number_Of_VMetrics;
+
+    /* The following fields are not defined by the TrueType specification */
+    /* but they're used to connect the metrics header to the relevant     */
+    /* `HMTX' or `VMTX' table.                                            */
+
+    void*      long_metrics;
+    void*      short_metrics;
+
+  } TT_VertHeader;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_OS2                                                             */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a TrueType OS/2 table. This is the long  */
+  /*    table version.  All fields comply to the TrueType specification.   */
+  /*                                                                       */
+  /*    Note that we now support old Mac fonts which do not include an     */
+  /*    OS/2 table.  In this case, the `version' field is always set to    */
+  /*    0xFFFF.                                                            */
+  /*                                                                       */
+  typedef struct  TT_OS2_
+  {
+    FT_UShort  version;                /* 0x0001 - more or 0xFFFF */
+    FT_Short   xAvgCharWidth;
+    FT_UShort  usWeightClass;
+    FT_UShort  usWidthClass;
+    FT_Short   fsType;
+    FT_Short   ySubscriptXSize;
+    FT_Short   ySubscriptYSize;
+    FT_Short   ySubscriptXOffset;
+    FT_Short   ySubscriptYOffset;
+    FT_Short   ySuperscriptXSize;
+    FT_Short   ySuperscriptYSize;
+    FT_Short   ySuperscriptXOffset;
+    FT_Short   ySuperscriptYOffset;
+    FT_Short   yStrikeoutSize;
+    FT_Short   yStrikeoutPosition;
+    FT_Short   sFamilyClass;
+
+    FT_Byte    panose[10];
+
+    FT_ULong   ulUnicodeRange1;        /* Bits 0-31   */
+    FT_ULong   ulUnicodeRange2;        /* Bits 32-63  */
+    FT_ULong   ulUnicodeRange3;        /* Bits 64-95  */
+    FT_ULong   ulUnicodeRange4;        /* Bits 96-127 */
+
+    FT_Char    achVendID[4];
+
+    FT_UShort  fsSelection;
+    FT_UShort  usFirstCharIndex;
+    FT_UShort  usLastCharIndex;
+    FT_Short   sTypoAscender;
+    FT_Short   sTypoDescender;
+    FT_Short   sTypoLineGap;
+    FT_UShort  usWinAscent;
+    FT_UShort  usWinDescent;
+
+    /* only version 1 tables: */
+
+    FT_ULong   ulCodePageRange1;       /* Bits 0-31   */
+    FT_ULong   ulCodePageRange2;       /* Bits 32-63  */
+
+    /* only version 2 tables: */
+
+    FT_Short   sxHeight;
+    FT_Short   sCapHeight;
+    FT_UShort  usDefaultChar;
+    FT_UShort  usBreakChar;
+    FT_UShort  usMaxContext;
+
+  } TT_OS2;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_Postscript                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a TrueType PostScript table.  All fields */
+  /*    comply to the TrueType specification.  This structure does not     */
+  /*    reference the PostScript glyph names, which can be nevertheless    */
+  /*    accessed with the `ttpost' module.                                 */
+  /*                                                                       */
+  typedef struct  TT_Postscript_
+  {
+    FT_Fixed  FormatType;
+    FT_Fixed  italicAngle;
+    FT_Short  underlinePosition;
+    FT_Short  underlineThickness;
+    FT_ULong  isFixedPitch;
+    FT_ULong  minMemType42;
+    FT_ULong  maxMemType42;
+    FT_ULong  minMemType1;
+    FT_ULong  maxMemType1;
+
+    /* Glyph names follow in the file, but we don't   */
+    /* load them by default.  See the ttpost.c file.  */
+
+  } TT_Postscript;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_PCLT                                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A structure used to model a TrueType PCLT table.  All fields       */
+  /*    comply to the TrueType specification.                              */
+  /*                                                                       */
+  typedef struct  TT_PCLT_
+  {
+    FT_Fixed   Version;
+    FT_ULong   FontNumber;
+    FT_UShort  Pitch;
+    FT_UShort  xHeight;
+    FT_UShort  Style;
+    FT_UShort  TypeFamily;
+    FT_UShort  CapHeight;
+    FT_UShort  SymbolSet;
+    FT_Char    TypeFace[16];
+    FT_Char    CharacterComplement[8];
+    FT_Char    FileName[6];
+    FT_Char    StrokeWeight;
+    FT_Char    WidthType;
+    FT_Byte    SerifStyle;
+    FT_Byte    Reserved;
+
+  } TT_PCLT;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Struct>                                                              */
+  /*    TT_MaxProfile                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    The maximum profile is a table containing many max values which    */
+  /*    can be used to pre-allocate arrays.  This ensures that no memory   */
+  /*    allocation occurs during a glyph load.                             */
+  /*                                                                       */
+  /* <Fields>                                                              */
+  /*    version               :: The version number.                       */
+  /*                                                                       */
+  /*    numGlyphs             :: The number of glyphs in this TrueType     */
+  /*                             font.                                     */
+  /*                                                                       */
+  /*    maxPoints             :: The maximum number of points in a         */
+  /*                             non-composite TrueType glyph.  See also   */
+  /*                             the structure element                     */
+  /*                             `maxCompositePoints'.                     */
+  /*                                                                       */
+  /*    maxContours           :: The maximum number of contours in a       */
+  /*                             non-composite TrueType glyph.  See also   */
+  /*                             the structure element                     */
+  /*                             `maxCompositeContours'.                   */
+  /*                                                                       */
+  /*    maxCompositePoints    :: The maximum number of points in a         */
+  /*                             composite TrueType glyph.  See also the   */
+  /*                             structure element `maxPoints'.            */
+  /*                                                                       */
+  /*    maxCompositeContours  :: The maximum number of contours in a       */
+  /*                             composite TrueType glyph.  See also the   */
+  /*                             structure element `maxContours'.          */
+  /*                                                                       */
+  /*    maxZones              :: The maximum number of zones used for      */
+  /*                             glyph hinting.                            */
+  /*                                                                       */
+  /*    maxTwilightPoints     :: The maximum number of points in the       */
+  /*                             twilight zone used for glyph hinting.     */
+  /*                                                                       */
+  /*    maxStorage            :: The maximum number of elements in the     */
+  /*                             storage area used for glyph hinting.      */
+  /*                                                                       */
+  /*    maxFunctionDefs       :: The maximum number of function            */
+  /*                             definitions in the TrueType bytecode for  */
+  /*                             this font.                                */
+  /*                                                                       */
+  /*    maxInstructionDefs    :: The maximum number of instruction         */
+  /*                             definitions in the TrueType bytecode for  */
+  /*                             this font.                                */
+  /*                                                                       */
+  /*    maxStackElements      :: The maximum number of stack elements used */
+  /*                             during bytecode interpretation.           */
+  /*                                                                       */
+  /*    maxSizeOfInstructions :: The maximum number of TrueType opcodes    */
+  /*                             used for glyph hinting.                   */
+  /*                                                                       */
+  /*    maxComponentElements  :: The maximum number of simple (i.e., non-  */
+  /*                             composite) glyphs in a composite glyph.   */
+  /*                                                                       */
+  /*    maxComponentDepth     :: The maximum nesting depth of composite    */
+  /*                             glyphs.                                   */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This structure is only used during font loading.                   */
+  /*                                                                       */
+  typedef struct  TT_MaxProfile_
+  {
+    FT_Fixed   version;
+    FT_UShort  numGlyphs;
+    FT_UShort  maxPoints;
+    FT_UShort  maxContours;
+    FT_UShort  maxCompositePoints;
+    FT_UShort  maxCompositeContours;
+    FT_UShort  maxZones;
+    FT_UShort  maxTwilightPoints;
+    FT_UShort  maxStorage;
+    FT_UShort  maxFunctionDefs;
+    FT_UShort  maxInstructionDefs;
+    FT_UShort  maxStackElements;
+    FT_UShort  maxSizeOfInstructions;
+    FT_UShort  maxComponentElements;
+    FT_UShort  maxComponentDepth;
+
+  } TT_MaxProfile;
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Enum>                                                                */
+  /*    FT_Sfnt_Tag                                                        */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    An enumeration used to specify the index of an SFNT table.         */
+  /*    Used in the @FT_Get_Sfnt_Table API function.                       */
+  /*                                                                       */
+  typedef enum  FT_Sfnt_Tag_
+  {
+    ft_sfnt_head = 0,    /* TT_Header     */
+    ft_sfnt_maxp = 1,    /* TT_MaxProfile */
+    ft_sfnt_os2  = 2,    /* TT_OS2        */
+    ft_sfnt_hhea = 3,    /* TT_HoriHeader */
+    ft_sfnt_vhea = 4,    /* TT_VertHeader */
+    ft_sfnt_post = 5,    /* TT_Postscript */
+    ft_sfnt_pclt = 6,    /* TT_PCLT       */
+
+    sfnt_max   /* internal end mark */
+
+  } FT_Sfnt_Tag;
+
+  /* */
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Sfnt_Table                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return a pointer to a given SFNT table within a face.              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face :: A handle to the source.                                    */
+  /*                                                                       */
+  /*    tag  :: The index of the SFNT table.                               */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    A type-less pointer to the table.  This will be~0 in case of       */
+  /*    error, or if the corresponding table was not found *OR* loaded     */
+  /*    from the file.                                                     */
+  /*                                                                       */
+  /*    Use a typecast according to `tag' to access the structure          */
+  /*    elements.                                                          */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The table is owned by the face object and disappears with it.      */
+  /*                                                                       */
+  /*    This function is only useful to access SFNT tables that are loaded */
+  /*    by the sfnt, truetype, and opentype drivers.  See @FT_Sfnt_Tag for */
+  /*    a list.                                                            */
+  /*                                                                       */
+  /*    Here an example how to access the `vhea' table:                    */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      TT_VertHeader*  vert_header;                                     */
+  /*                                                                       */
+  /*                                                                       */
+  /*      vert_header =                                                    */
+  /*        (TT_VertHeader*)FT_Get_Sfnt_Table( face, ft_sfnt_vhea );       */
+  /*    }                                                                  */
+  /*                                                                       */
+  FT_EXPORT( void* )
+  FT_Get_Sfnt_Table( FT_Face      face,
+                     FT_Sfnt_Tag  tag );
+
+
+ /**************************************************************************
+  *
+  * @function:
+  *   FT_Load_Sfnt_Table
+  *
+  * @description:
+  *   Load any font table into client memory.
+  *
+  * @input:
+  *   face ::
+  *     A handle to the source face.
+  *
+  *   tag ::
+  *     The four-byte tag of the table to load.  Use the value~0 if you want
+  *     to access the whole font file.  Otherwise, you can use one of the
+  *     definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
+  *     one with @FT_MAKE_TAG.
+  *
+  *   offset ::
+  *     The starting offset in the table (or file if tag == 0).
+  *
+  * @output:
+  *   buffer ::
+  *     The target buffer address.  The client must ensure that the memory
+  *     array is big enough to hold the data.
+  *
+  * @inout:
+  *   length ::
+  *     If the `length' parameter is NULL, then try to load the whole table.
+  *     Return an error code if it fails.
+  *
+  *     Else, if `*length' is~0, exit immediately while returning the
+  *     table's (or file) full size in it.
+  *
+  *     Else the number of bytes to read from the table or file, from the
+  *     starting offset.
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   If you need to determine the table's length you should first call this
+  *   function with `*length' set to~0, as in the following example:
+  *
+  *     {
+  *       FT_ULong  length = 0;
+  *
+  *
+  *       error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length );
+  *       if ( error ) { ... table does not exist ... }
+  *
+  *       buffer = malloc( length );
+  *       if ( buffer == NULL ) { ... not enough memory ... }
+  *
+  *       error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
+  *       if ( error ) { ... could not load table ... }
+  *     }
+  */
+  FT_EXPORT( FT_Error )
+  FT_Load_Sfnt_Table( FT_Face    face,
+                      FT_ULong   tag,
+                      FT_Long    offset,
+                      FT_Byte*   buffer,
+                      FT_ULong*  length );
+
+
+ /**************************************************************************
+  *
+  * @function:
+  *   FT_Sfnt_Table_Info
+  *
+  * @description:
+  *   Return information on an SFNT table.
+  *
+  * @input:
+  *   face ::
+  *     A handle to the source face.
+  *
+  *   table_index ::
+  *     The index of an SFNT table.  The function returns
+  *     FT_Err_Table_Missing for an invalid value.
+  *
+  * @inout:
+  *   tag ::
+  *     The name tag of the SFNT table.  If the value is NULL, `table_index'
+  *     is ignored, and `length' returns the number of SFNT tables in the
+  *     font.
+  *
+  * @output:
+  *   length ::
+  *     The length of the SFNT table (or the number of SFNT tables, depending
+  *     on `tag').
+  *
+  * @return:
+  *   FreeType error code.  0~means success.
+  *
+  * @note:
+  *   While parsing fonts, FreeType handles SFNT tables with length zero as
+  *   missing.
+  *
+  */
+  FT_EXPORT( FT_Error )
+  FT_Sfnt_Table_Info( FT_Face    face,
+                      FT_UInt    table_index,
+                      FT_ULong  *tag,
+                      FT_ULong  *length );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_CMap_Language_ID                                            */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return TrueType/sfnt specific cmap language ID.  Definitions of    */
+  /*    language ID values are in `freetype/ttnameid.h'.                   */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    charmap ::                                                         */
+  /*      The target charmap.                                              */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The language ID of `charmap'.  If `charmap' doesn't belong to a    */
+  /*    TrueType/sfnt face, just return~0 as the default value.            */
+  /*                                                                       */
+  /*    For a format~14 cmap (to access Unicode IVS), the return value is  */
+  /*    0xFFFFFFFF.                                                        */
+  /*                                                                       */
+  FT_EXPORT( FT_ULong )
+  FT_Get_CMap_Language_ID( FT_CharMap  charmap );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_CMap_Format                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return TrueType/sfnt specific cmap format.                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    charmap ::                                                         */
+  /*      The target charmap.                                              */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The format of `charmap'.  If `charmap' doesn't belong to a         */
+  /*    TrueType/sfnt face, return -1.                                     */
+  /*                                                                       */
+  FT_EXPORT( FT_Long )
+  FT_Get_CMap_Format( FT_CharMap  charmap );
+
+  /* */
+
+
+FT_END_HEADER
+
+#endif /* __TTTABLES_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/tttags.h b/core/include/thirdparties/freetype/freetype/tttags.h
new file mode 100644
index 0000000..ac7de2a
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/tttags.h
@@ -0,0 +1,109 @@
+/***************************************************************************/
+/*                                                                         */
+/*  tttags.h                                                               */
+/*                                                                         */
+/*    Tags for TrueType and OpenType tables (specification only).          */
+/*                                                                         */
+/*  Copyright 1996-2001, 2004, 2005, 2007, 2008, 2013 by                   */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __TTAGS_H__
+#define __TTAGS_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+#define TTAG_avar  FT_MAKE_TAG( 'a', 'v', 'a', 'r' )
+#define TTAG_BASE  FT_MAKE_TAG( 'B', 'A', 'S', 'E' )
+#define TTAG_bdat  FT_MAKE_TAG( 'b', 'd', 'a', 't' )
+#define TTAG_BDF   FT_MAKE_TAG( 'B', 'D', 'F', ' ' )
+#define TTAG_bhed  FT_MAKE_TAG( 'b', 'h', 'e', 'd' )
+#define TTAG_bloc  FT_MAKE_TAG( 'b', 'l', 'o', 'c' )
+#define TTAG_bsln  FT_MAKE_TAG( 'b', 's', 'l', 'n' )
+#define TTAG_CBDT  FT_MAKE_TAG( 'C', 'B', 'D', 'T' )
+#define TTAG_CBLC  FT_MAKE_TAG( 'C', 'B', 'L', 'C' )
+#define TTAG_CFF   FT_MAKE_TAG( 'C', 'F', 'F', ' ' )
+#define TTAG_CID   FT_MAKE_TAG( 'C', 'I', 'D', ' ' )
+#define TTAG_cmap  FT_MAKE_TAG( 'c', 'm', 'a', 'p' )
+#define TTAG_cvar  FT_MAKE_TAG( 'c', 'v', 'a', 'r' )
+#define TTAG_cvt   FT_MAKE_TAG( 'c', 'v', 't', ' ' )
+#define TTAG_DSIG  FT_MAKE_TAG( 'D', 'S', 'I', 'G' )
+#define TTAG_EBDT  FT_MAKE_TAG( 'E', 'B', 'D', 'T' )
+#define TTAG_EBLC  FT_MAKE_TAG( 'E', 'B', 'L', 'C' )
+#define TTAG_EBSC  FT_MAKE_TAG( 'E', 'B', 'S', 'C' )
+#define TTAG_feat  FT_MAKE_TAG( 'f', 'e', 'a', 't' )
+#define TTAG_FOND  FT_MAKE_TAG( 'F', 'O', 'N', 'D' )
+#define TTAG_fpgm  FT_MAKE_TAG( 'f', 'p', 'g', 'm' )
+#define TTAG_fvar  FT_MAKE_TAG( 'f', 'v', 'a', 'r' )
+#define TTAG_gasp  FT_MAKE_TAG( 'g', 'a', 's', 'p' )
+#define TTAG_GDEF  FT_MAKE_TAG( 'G', 'D', 'E', 'F' )
+#define TTAG_glyf  FT_MAKE_TAG( 'g', 'l', 'y', 'f' )
+#define TTAG_GPOS  FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
+#define TTAG_GSUB  FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
+#define TTAG_gvar  FT_MAKE_TAG( 'g', 'v', 'a', 'r' )
+#define TTAG_hdmx  FT_MAKE_TAG( 'h', 'd', 'm', 'x' )
+#define TTAG_head  FT_MAKE_TAG( 'h', 'e', 'a', 'd' )
+#define TTAG_hhea  FT_MAKE_TAG( 'h', 'h', 'e', 'a' )
+#define TTAG_hmtx  FT_MAKE_TAG( 'h', 'm', 't', 'x' )
+#define TTAG_JSTF  FT_MAKE_TAG( 'J', 'S', 'T', 'F' )
+#define TTAG_just  FT_MAKE_TAG( 'j', 'u', 's', 't' )
+#define TTAG_kern  FT_MAKE_TAG( 'k', 'e', 'r', 'n' )
+#define TTAG_lcar  FT_MAKE_TAG( 'l', 'c', 'a', 'r' )
+#define TTAG_loca  FT_MAKE_TAG( 'l', 'o', 'c', 'a' )
+#define TTAG_LTSH  FT_MAKE_TAG( 'L', 'T', 'S', 'H' )
+#define TTAG_LWFN  FT_MAKE_TAG( 'L', 'W', 'F', 'N' )
+#define TTAG_MATH  FT_MAKE_TAG( 'M', 'A', 'T', 'H' )
+#define TTAG_maxp  FT_MAKE_TAG( 'm', 'a', 'x', 'p' )
+#define TTAG_META  FT_MAKE_TAG( 'M', 'E', 'T', 'A' )
+#define TTAG_MMFX  FT_MAKE_TAG( 'M', 'M', 'F', 'X' )
+#define TTAG_MMSD  FT_MAKE_TAG( 'M', 'M', 'S', 'D' )
+#define TTAG_mort  FT_MAKE_TAG( 'm', 'o', 'r', 't' )
+#define TTAG_morx  FT_MAKE_TAG( 'm', 'o', 'r', 'x' )
+#define TTAG_name  FT_MAKE_TAG( 'n', 'a', 'm', 'e' )
+#define TTAG_opbd  FT_MAKE_TAG( 'o', 'p', 'b', 'd' )
+#define TTAG_OS2   FT_MAKE_TAG( 'O', 'S', '/', '2' )
+#define TTAG_OTTO  FT_MAKE_TAG( 'O', 'T', 'T', 'O' )
+#define TTAG_PCLT  FT_MAKE_TAG( 'P', 'C', 'L', 'T' )
+#define TTAG_POST  FT_MAKE_TAG( 'P', 'O', 'S', 'T' )
+#define TTAG_post  FT_MAKE_TAG( 'p', 'o', 's', 't' )
+#define TTAG_prep  FT_MAKE_TAG( 'p', 'r', 'e', 'p' )
+#define TTAG_prop  FT_MAKE_TAG( 'p', 'r', 'o', 'p' )
+#define TTAG_sfnt  FT_MAKE_TAG( 's', 'f', 'n', 't' )
+#define TTAG_SING  FT_MAKE_TAG( 'S', 'I', 'N', 'G' )
+#define TTAG_trak  FT_MAKE_TAG( 't', 'r', 'a', 'k' )
+#define TTAG_true  FT_MAKE_TAG( 't', 'r', 'u', 'e' )
+#define TTAG_ttc   FT_MAKE_TAG( 't', 't', 'c', ' ' )
+#define TTAG_ttcf  FT_MAKE_TAG( 't', 't', 'c', 'f' )
+#define TTAG_TYP1  FT_MAKE_TAG( 'T', 'Y', 'P', '1' )
+#define TTAG_typ1  FT_MAKE_TAG( 't', 'y', 'p', '1' )
+#define TTAG_VDMX  FT_MAKE_TAG( 'V', 'D', 'M', 'X' )
+#define TTAG_vhea  FT_MAKE_TAG( 'v', 'h', 'e', 'a' )
+#define TTAG_vmtx  FT_MAKE_TAG( 'v', 'm', 't', 'x' )
+
+
+FT_END_HEADER
+
+#endif /* __TTAGS_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/freetype/ttunpat.h b/core/include/thirdparties/freetype/freetype/ttunpat.h
new file mode 100644
index 0000000..08e2759
--- /dev/null
+++ b/core/include/thirdparties/freetype/freetype/ttunpat.h
@@ -0,0 +1,59 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ttunpat.h                                                              */
+/*                                                                         */
+/*    Definitions for the unpatented TrueType hinting system               */
+/*                                                                         */
+/*  Copyright 2003, 2006 by                                                */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  Written by Graham Asher <graham.asher@btinternet.com>                  */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#ifndef __TTUNPAT_H__
+#define __TTUNPAT_H__
+
+
+#include "../ft2build.h"
+#include "freetype.h"
+
+#ifdef FREETYPE_H
+#error "freetype.h of FreeType 1 has been loaded!"
+#error "Please fix the directory search order for header files"
+#error "so that freetype.h of FreeType 2 is found first."
+#endif
+
+
+FT_BEGIN_HEADER
+
+
+ /***************************************************************************
+  *
+  * @constant:
+  *   FT_PARAM_TAG_UNPATENTED_HINTING
+  *
+  * @description:
+  *   A constant used as the tag of an @FT_Parameter structure to indicate
+  *   that unpatented methods only should be used by the TrueType bytecode
+  *   interpreter for a typeface opened by @FT_Open_Face.
+  *
+  */
+#define FT_PARAM_TAG_UNPATENTED_HINTING  FT_MAKE_TAG( 'u', 'n', 'p', 'a' )
+
+ /* */
+
+FT_END_HEADER
+
+
+#endif /* __TTUNPAT_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/freetype/ft2build.h b/core/include/thirdparties/freetype/ft2build.h
new file mode 100644
index 0000000..134007d
--- /dev/null
+++ b/core/include/thirdparties/freetype/ft2build.h
@@ -0,0 +1,40 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ft2build.h                                                             */
+/*                                                                         */
+/*    FreeType 2 build and setup macros.                                   */
+/*    (Generic version)                                                    */
+/*                                                                         */
+/*  Copyright 1996-2001, 2006 by                                           */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* This file corresponds to the default `ft2build.h' file for            */
+  /* FreeType 2.  It uses the `freetype' include root.                     */
+  /*                                                                       */
+  /* Note that specific platforms might use a different configuration.     */
+  /* See builds/unix/ft2unix.h for an example.                             */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FT2_BUILD_GENERIC_H__
+#define __FT2_BUILD_GENERIC_H__
+
+#include "foxitnames.h"

+#include "freetype/config/ftheader.h"
+
+#endif /* __FT2_BUILD_GENERIC_H__ */
+
+
+/* END */
diff --git a/core/include/thirdparties/libjpeg/jconfig.h b/core/include/thirdparties/libjpeg/jconfig.h
new file mode 100644
index 0000000..2f4da14
--- /dev/null
+++ b/core/include/thirdparties/libjpeg/jconfig.h
@@ -0,0 +1,45 @@
+/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */

+/* see jconfig.doc for explanations */

+

+#define HAVE_PROTOTYPES

+#define HAVE_UNSIGNED_CHAR

+#define HAVE_UNSIGNED_SHORT

+/* #define void char */

+/* #define const */

+#undef CHAR_IS_UNSIGNED

+#define HAVE_STDDEF_H

+#define HAVE_STDLIB_H

+#undef NEED_BSD_STRINGS

+#undef NEED_SYS_TYPES_H

+#undef NEED_FAR_POINTERS	/* we presume a 32-bit flat memory model */

+#undef NEED_SHORT_EXTERNAL_NAMES

+#undef INCOMPLETE_TYPES_BROKEN

+

+/* Define "boolean" as unsigned char, not int, per Windows custom */

+#ifndef __RPCNDR_H__		/* don't conflict if rpcndr.h already read */

+typedef unsigned char boolean;

+#endif

+#define HAVE_BOOLEAN		/* prevent jmorecfg.h from redefining it */

+

+

+#ifdef JPEG_INTERNALS

+

+#undef RIGHT_SHIFT_IS_UNSIGNED

+

+#endif /* JPEG_INTERNALS */

+

+#ifdef JPEG_CJPEG_DJPEG

+

+#define BMP_SUPPORTED		/* BMP image file format */

+#define GIF_SUPPORTED		/* GIF image file format */

+#define PPM_SUPPORTED		/* PBMPLUS PPM/PGM image file format */

+#undef RLE_SUPPORTED		/* Utah RLE image file format */

+#define TARGA_SUPPORTED		/* Targa image file format */

+

+#define TWO_FILE_COMMANDLINE	/* optional */

+#define USE_SETMODE		/* Microsoft has setmode() */

+#undef NEED_SIGNAL_CATCHER

+#undef DONT_USE_B_MODE

+#undef PROGRESS_REPORT		/* optional */

+

+#endif /* JPEG_CJPEG_DJPEG */

diff --git a/core/include/thirdparties/libjpeg/jerror.h b/core/include/thirdparties/libjpeg/jerror.h
new file mode 100644
index 0000000..a2b8f96
--- /dev/null
+++ b/core/include/thirdparties/libjpeg/jerror.h
@@ -0,0 +1,291 @@
+/*

+ * jerror.h

+ *

+ * Copyright (C) 1994-1997, Thomas G. Lane.

+ * This file is part of the Independent JPEG Group's software.

+ * For conditions of distribution and use, see the accompanying README file.

+ *

+ * This file defines the error and message codes for the JPEG library.

+ * Edit this file to add new codes, or to translate the message strings to

+ * some other language.

+ * A set of error-reporting macros are defined too.  Some applications using

+ * the JPEG library may wish to include this file to get the error codes

+ * and/or the macros.

+ */

+

+/*

+ * To define the enum list of message codes, include this file without

+ * defining macro JMESSAGE.  To create a message string table, include it

+ * again with a suitable JMESSAGE definition (see jerror.c for an example).

+ */

+#ifndef JMESSAGE

+#ifndef JERROR_H

+/* First time through, define the enum list */

+#define JMAKE_ENUM_LIST

+#else

+/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */

+#define JMESSAGE(code,string)

+#endif /* JERROR_H */

+#endif /* JMESSAGE */

+

+#ifdef JMAKE_ENUM_LIST

+

+typedef enum {

+

+#define JMESSAGE(code,string)	code ,

+

+#endif /* JMAKE_ENUM_LIST */

+

+JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */

+

+/* For maintenance convenience, list is alphabetical by message code name */

+JMESSAGE(JERR_ARITH_NOTIMPL,

+	 "Sorry, there are legal restrictions on arithmetic coding")

+JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix")

+JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")

+JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")

+JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")

+JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range")

+JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported")

+JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")

+JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")

+JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")

+JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length")

+JMESSAGE(JERR_BAD_LIB_VERSION,

+	 "Wrong JPEG library version: library is %d, caller expects %d")

+JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan")

+JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d")

+JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d")

+JMESSAGE(JERR_BAD_PROGRESSION,

+	 "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d")

+JMESSAGE(JERR_BAD_PROG_SCRIPT,

+	 "Invalid progressive parameters at scan script entry %d")

+JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors")

+JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d")

+JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d")

+JMESSAGE(JERR_BAD_STRUCT_SIZE,

+	 "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u")

+JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access")

+JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small")

+JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here")

+JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet")

+JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d")

+JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request")

+JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")

+JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")

+JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")

+JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")

+JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")

+JMESSAGE(JERR_EMS_READ, "Read from EMS failed")

+JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")

+JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan")

+JMESSAGE(JERR_FILE_READ, "Input file read error")

+JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?")

+JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet")

+JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow")

+JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry")

+JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels")

+JMESSAGE(JERR_INPUT_EMPTY, "Empty input file")

+JMESSAGE(JERR_INPUT_EOF, "Premature end of input file")

+JMESSAGE(JERR_MISMATCHED_QUANT_TABLE,

+	 "Cannot transcode due to multiple use of quantization table %d")

+JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data")

+JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change")

+JMESSAGE(JERR_NOTIMPL, "Not implemented yet")

+JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time")

+JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported")

+JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")

+JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image")

+JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")

+JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x")

+JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)")

+JMESSAGE(JERR_QUANT_COMPONENTS,

+	 "Cannot quantize more than %d color components")

+JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors")

+JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors")

+JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers")

+JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker")

+JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x")

+JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers")

+JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF")

+JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s")

+JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file")

+JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file")

+JMESSAGE(JERR_TFILE_WRITE,

+	 "Write failed on temporary file --- out of disk space?")

+JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines")

+JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x")

+JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up")

+JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation")

+JMESSAGE(JERR_XMS_READ, "Read from XMS failed")

+JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed")

+JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT)

+JMESSAGE(JMSG_VERSION, JVERSION)

+JMESSAGE(JTRC_16BIT_TABLES,

+	 "Caution: quantization tables are too coarse for baseline JPEG")

+JMESSAGE(JTRC_ADOBE,

+	 "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d")

+JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u")

+JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u")

+JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x")

+JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x")

+JMESSAGE(JTRC_DQT, "Define Quantization Table %d  precision %d")

+JMESSAGE(JTRC_DRI, "Define Restart Interval %u")

+JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u")

+JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u")

+JMESSAGE(JTRC_EOI, "End Of Image")

+JMESSAGE(JTRC_HUFFBITS, "        %3d %3d %3d %3d %3d %3d %3d %3d")

+JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d  %d")

+JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE,

+	 "Warning: thumbnail image size does not match data length %u")

+JMESSAGE(JTRC_JFIF_EXTENSION,

+	 "JFIF extension marker: type 0x%02x, length %u")

+JMESSAGE(JTRC_JFIF_THUMBNAIL, "    with %d x %d thumbnail image")

+JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u")

+JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x")

+JMESSAGE(JTRC_QUANTVALS, "        %4u %4u %4u %4u %4u %4u %4u %4u")

+JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors")

+JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors")

+JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization")

+JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d")

+JMESSAGE(JTRC_RST, "RST%d")

+JMESSAGE(JTRC_SMOOTH_NOTIMPL,

+	 "Smoothing not supported with nonstandard sampling ratios")

+JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d")

+JMESSAGE(JTRC_SOF_COMPONENT, "    Component %d: %dhx%dv q=%d")

+JMESSAGE(JTRC_SOI, "Start of Image")

+JMESSAGE(JTRC_SOS, "Start Of Scan: %d components")

+JMESSAGE(JTRC_SOS_COMPONENT, "    Component %d: dc=%d ac=%d")

+JMESSAGE(JTRC_SOS_PARAMS, "  Ss=%d, Se=%d, Ah=%d, Al=%d")

+JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s")

+JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s")

+JMESSAGE(JTRC_THUMB_JPEG,

+	 "JFIF extension marker: JPEG-compressed thumbnail image, length %u")

+JMESSAGE(JTRC_THUMB_PALETTE,

+	 "JFIF extension marker: palette thumbnail image, length %u")

+JMESSAGE(JTRC_THUMB_RGB,

+	 "JFIF extension marker: RGB thumbnail image, length %u")

+JMESSAGE(JTRC_UNKNOWN_IDS,

+	 "Unrecognized component IDs %d %d %d, assuming YCbCr")

+JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u")

+JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u")

+JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d")

+JMESSAGE(JWRN_BOGUS_PROGRESSION,

+	 "Inconsistent progression sequence for component %d coefficient %d")

+JMESSAGE(JWRN_EXTRANEOUS_DATA,

+	 "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x")

+JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment")

+JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code")

+JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d")

+JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file")

+JMESSAGE(JWRN_MUST_RESYNC,

+	 "Corrupt JPEG data: found marker 0x%02x instead of RST%d")

+JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG")

+JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines")

+

+#ifdef JMAKE_ENUM_LIST

+

+  JMSG_LASTMSGCODE

+} J_MESSAGE_CODE;

+

+#undef JMAKE_ENUM_LIST

+#endif /* JMAKE_ENUM_LIST */

+

+/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */

+#undef JMESSAGE

+

+

+#ifndef JERROR_H

+#define JERROR_H

+

+/* Macros to simplify using the error and trace message stuff */

+/* The first parameter is either type of cinfo pointer */

+

+/* Fatal errors (print message and exit) */

+#define ERREXIT(cinfo,code)  \

+  ((cinfo)->err->msg_code = (code), \

+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))

+#define ERREXIT1(cinfo,code,p1)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))

+#define ERREXIT2(cinfo,code,p1,p2)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (cinfo)->err->msg_parm.i[1] = (p2), \

+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))

+#define ERREXIT3(cinfo,code,p1,p2,p3)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (cinfo)->err->msg_parm.i[1] = (p2), \

+   (cinfo)->err->msg_parm.i[2] = (p3), \

+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))

+#define ERREXIT4(cinfo,code,p1,p2,p3,p4)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (cinfo)->err->msg_parm.i[1] = (p2), \

+   (cinfo)->err->msg_parm.i[2] = (p3), \

+   (cinfo)->err->msg_parm.i[3] = (p4), \

+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))

+#define ERREXITS(cinfo,code,str)  \

+  ((cinfo)->err->msg_code = (code), \

+   FXSYS_strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \

+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))

+

+#define MAKESTMT(stuff)		do { stuff } while (0)

+

+/* Nonfatal errors (we can keep going, but the data is probably corrupt) */

+#define WARNMS(cinfo,code)  \

+  ((cinfo)->err->msg_code = (code), \

+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))

+#define WARNMS1(cinfo,code,p1)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))

+#define WARNMS2(cinfo,code,p1,p2)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (cinfo)->err->msg_parm.i[1] = (p2), \

+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))

+

+/* Informational/debugging messages */

+#define TRACEMS(cinfo,lvl,code)  \

+  ((cinfo)->err->msg_code = (code), \

+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))

+#define TRACEMS1(cinfo,lvl,code,p1)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))

+#define TRACEMS2(cinfo,lvl,code,p1,p2)  \

+  ((cinfo)->err->msg_code = (code), \

+   (cinfo)->err->msg_parm.i[0] = (p1), \

+   (cinfo)->err->msg_parm.i[1] = (p2), \

+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))

+#define TRACEMS3(cinfo,lvl,code,p1,p2,p3)  \

+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \

+	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \

+	   (cinfo)->err->msg_code = (code); \

+	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )

+#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4)  \

+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \

+	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \

+	   (cinfo)->err->msg_code = (code); \

+	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )

+#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5)  \

+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \

+	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \

+	   _mp[4] = (p5); \

+	   (cinfo)->err->msg_code = (code); \

+	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )

+#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8)  \

+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \

+	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \

+	   _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \

+	   (cinfo)->err->msg_code = (code); \

+	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )

+#define TRACEMSS(cinfo,lvl,code,str)  \

+  ((cinfo)->err->msg_code = (code), \

+   FXSYS_strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \

+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))

+

+#endif /* JERROR_H */

diff --git a/core/include/thirdparties/libjpeg/jmorecfg.h b/core/include/thirdparties/libjpeg/jmorecfg.h
new file mode 100644
index 0000000..3602114
--- /dev/null
+++ b/core/include/thirdparties/libjpeg/jmorecfg.h
@@ -0,0 +1,376 @@
+/*

+ * jmorecfg.h

+ *

+ * Copyright (C) 1991-1997, Thomas G. Lane.

+ * This file is part of the Independent JPEG Group's software.

+ * For conditions of distribution and use, see the accompanying README file.

+ *

+ * This file contains additional configuration options that customize the

+ * JPEG software for special applications or support machine-dependent

+ * optimizations.  Most users will not need to touch this file.

+ */

+

+#ifdef _MSC_VER

+#pragma warning (disable : 4142)

+#endif

+

+/*

+ * Define BITS_IN_JSAMPLE as either

+ *   8   for 8-bit sample values (the usual setting)

+ *   12  for 12-bit sample values

+ * Only 8 and 12 are legal data precisions for lossy JPEG according to the

+ * JPEG standard, and the IJG code does not support anything else!

+ * We do not support run-time selection of data precision, sorry.

+ */

+

+#define BITS_IN_JSAMPLE  8	/* use 8 or 12 */

+

+

+/*

+ * Maximum number of components (color channels) allowed in JPEG image.

+ * To meet the letter of the JPEG spec, set this to 255.  However, darn

+ * few applications need more than 4 channels (maybe 5 for CMYK + alpha

+ * mask).  We recommend 10 as a reasonable compromise; use 4 if you are

+ * really short on memory.  (Each allowed component costs a hundred or so

+ * bytes of storage, whether actually used in an image or not.)

+ */

+

+#define MAX_COMPONENTS  10	/* maximum number of image components */

+

+

+/*

+ * Basic data types.

+ * You may need to change these if you have a machine with unusual data

+ * type sizes; for example, "char" not 8 bits, "short" not 16 bits,

+ * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,

+ * but it had better be at least 16.

+ */

+

+/* Representation of a single sample (pixel element value).

+ * We frequently allocate large arrays of these, so it's important to keep

+ * them small.  But if you have memory to burn and access to char or short

+ * arrays is very slow on your hardware, you might want to change these.

+ */

+

+#if BITS_IN_JSAMPLE == 8

+/* JSAMPLE should be the smallest type that will hold the values 0..255.

+ * You can use a signed char by having GETJSAMPLE mask it with 0xFF.

+ */

+

+#ifdef HAVE_UNSIGNED_CHAR

+

+typedef unsigned char JSAMPLE;

+#define GETJSAMPLE(value)  ((int) (value))

+

+#else /* not HAVE_UNSIGNED_CHAR */

+

+typedef char JSAMPLE;

+#ifdef CHAR_IS_UNSIGNED

+#define GETJSAMPLE(value)  ((int) (value))

+#else

+#define GETJSAMPLE(value)  ((int) (value) & 0xFF)

+#endif /* CHAR_IS_UNSIGNED */

+

+#endif /* HAVE_UNSIGNED_CHAR */

+

+#define MAXJSAMPLE	255

+#define CENTERJSAMPLE	128

+

+#endif /* BITS_IN_JSAMPLE == 8 */

+

+

+#if BITS_IN_JSAMPLE == 12

+/* JSAMPLE should be the smallest type that will hold the values 0..4095.

+ * On nearly all machines "short" will do nicely.

+ */

+

+typedef short JSAMPLE;

+#define GETJSAMPLE(value)  ((int) (value))

+

+#define MAXJSAMPLE	4095

+#define CENTERJSAMPLE	2048

+

+#endif /* BITS_IN_JSAMPLE == 12 */

+

+

+/* Representation of a DCT frequency coefficient.

+ * This should be a signed value of at least 16 bits; "short" is usually OK.

+ * Again, we allocate large arrays of these, but you can change to int

+ * if you have memory to burn and "short" is really slow.

+ */

+

+typedef short JCOEF;

+

+

+/* Compressed datastreams are represented as arrays of JOCTET.

+ * These must be EXACTLY 8 bits wide, at least once they are written to

+ * external storage.  Note that when using the stdio data source/destination

+ * managers, this is also the data type passed to fread/fwrite.

+ */

+

+#ifdef HAVE_UNSIGNED_CHAR

+

+typedef unsigned char JOCTET;

+#define GETJOCTET(value)  (value)

+

+#else /* not HAVE_UNSIGNED_CHAR */

+

+typedef char JOCTET;

+#ifdef CHAR_IS_UNSIGNED

+#define GETJOCTET(value)  (value)

+#else

+#define GETJOCTET(value)  ((value) & 0xFF)

+#endif /* CHAR_IS_UNSIGNED */

+

+#endif /* HAVE_UNSIGNED_CHAR */

+

+

+/* These typedefs are used for various table entries and so forth.

+ * They must be at least as wide as specified; but making them too big

+ * won't cost a huge amount of memory, so we don't provide special

+ * extraction code like we did for JSAMPLE.  (In other words, these

+ * typedefs live at a different point on the speed/space tradeoff curve.)

+ */

+

+#if _FX_OS_ != _FX_VXWORKS_

+

+/* UINT8 must hold at least the values 0..255. */

+

+#ifdef HAVE_UNSIGNED_CHAR

+typedef unsigned char UINT8;

+#else /* not HAVE_UNSIGNED_CHAR */

+#ifdef CHAR_IS_UNSIGNED

+typedef char UINT8;

+#else /* not CHAR_IS_UNSIGNED */

+typedef short UINT8;

+#endif /* CHAR_IS_UNSIGNED */

+#endif /* HAVE_UNSIGNED_CHAR */

+

+

+/* UINT16 must hold at least the values 0..65535. */

+

+#ifdef HAVE_UNSIGNED_SHORT

+typedef unsigned short UINT16;

+#else /* not HAVE_UNSIGNED_SHORT */

+typedef unsigned int UINT16;

+#endif /* HAVE_UNSIGNED_SHORT */

+

+/* INT16 must hold at least the values -32768..32767. */

+

+#ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */

+typedef short INT16;

+#endif

+

+/* INT32 must hold at least signed 32-bit values. */

+

+#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */

+typedef int INT32;

+#endif

+

+#endif 

+

+/* Datatype used for image dimensions.  The JPEG standard only supports

+ * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore

+ * "unsigned int" is sufficient on all machines.  However, if you need to

+ * handle larger images and you don't mind deviating from the spec, you

+ * can change this datatype.

+ */

+

+typedef unsigned int JDIMENSION;

+

+#define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */

+

+

+/* These macros are used in all function definitions and extern declarations.

+ * You could modify them if you need to change function linkage conventions;

+ * in particular, you'll need to do that to make the library a Windows DLL.

+ * Another application is to make all functions global for use with debuggers

+ * or code profilers that require it.

+ */

+

+/* a function called through method pointers: */

+#define METHODDEF(type)		static type

+/* a function used only in its module: */

+#define LOCAL(type)		static type

+/* a function referenced thru EXTERNs: */

+#define GLOBAL(type)		type

+

+#ifdef _FX_MANAGED_CODE_

+#define EXTERN(type)		extern "C" type

+#else

+/* a reference to a GLOBAL function: */

+#define EXTERN(type)		extern type

+#endif

+

+

+/* This macro is used to declare a "method", that is, a function pointer.

+ * We want to supply prototype parameters if the compiler can cope.

+ * Note that the arglist parameter must be parenthesized!

+ * Again, you can customize this if you need special linkage keywords.

+ */

+

+#ifdef HAVE_PROTOTYPES

+#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist

+#else

+#define JMETHOD(type,methodname,arglist)  type (*methodname) ()

+#endif

+

+

+/* Here is the pseudo-keyword for declaring pointers that must be "far"

+ * on 80x86 machines.  Most of the specialized coding for 80x86 is handled

+ * by just saying "FAR *" where such a pointer is needed.  In a few places

+ * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.

+ */

+

+#ifdef NEED_FAR_POINTERS

+#define FAR  far

+#else

+//#define FAR

+#endif

+

+

+/*

+ * On a few systems, type boolean and/or its values FALSE, TRUE may appear

+ * in standard header files.  Or you may have conflicts with application-

+ * specific header files that you want to include together with these files.

+ * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.

+ */

+

+#ifndef HAVE_BOOLEAN

+typedef int boolean;

+#endif

+#ifndef FALSE			/* in case these macros already exist */

+#define FALSE	0		/* values of boolean */

+#endif

+#ifndef TRUE

+#define TRUE	1

+#endif

+

+

+/*

+ * The remaining options affect code selection within the JPEG library,

+ * but they don't need to be visible to most applications using the library.

+ * To minimize application namespace pollution, the symbols won't be

+ * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.

+ */

+

+#ifdef JPEG_INTERNALS

+#define JPEG_INTERNAL_OPTIONS

+#endif

+

+#ifdef JPEG_INTERNAL_OPTIONS

+

+

+/*

+ * These defines indicate whether to include various optional functions.

+ * Undefining some of these symbols will produce a smaller but less capable

+ * library.  Note that you can leave certain source files out of the

+ * compilation/linking process if you've #undef'd the corresponding symbols.

+ * (You may HAVE to do that if your compiler doesn't like null source files.)

+ */

+

+/* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */

+

+/* Capability options common to encoder and decoder: */

+

+#define DCT_ISLOW_SUPPORTED	/* slow but accurate integer algorithm */

+#define DCT_IFAST_SUPPORTED	/* faster, less accurate integer method */

+#undef DCT_FLOAT_SUPPORTED	/* floating-point: accurate, fast on fast HW */

+

+/* Encoder capability options: */

+

+#undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */

+#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */

+#define C_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/

+#define ENTROPY_OPT_SUPPORTED	    /* Optimization of entropy coding parms? */

+/* Note: if you selected 12-bit data precision, it is dangerous to turn off

+ * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit

+ * precision, so jchuff.c normally uses entropy optimization to compute

+ * usable tables for higher precision.  If you don't want to do optimization,

+ * you'll have to supply different default Huffman tables.

+ * The exact same statements apply for progressive JPEG: the default tables

+ * don't work for progressive mode.  (This may get fixed, however.)

+ */

+#define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */

+

+/* Decoder capability options: */

+

+#undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */

+#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */

+#define D_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/

+#define SAVE_MARKERS_SUPPORTED	    /* jpeg_save_markers() needed? */

+#define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */

+#define IDCT_SCALING_SUPPORTED	    /* Output rescaling via IDCT? */

+#undef UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */

+#define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */

+#undef QUANT_1PASS_SUPPORTED	    /* 1-pass color quantization? */

+#undef QUANT_2PASS_SUPPORTED	    /* 2-pass color quantization? */

+

+/* more capability options later, no doubt */

+

+

+/*

+ * Ordering of RGB data in scanlines passed to or from the application.

+ * If your application wants to deal with data in the order B,G,R, just

+ * change these macros.  You can also deal with formats such as R,G,B,X

+ * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing

+ * the offsets will also change the order in which colormap data is organized.

+ * RESTRICTIONS:

+ * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.

+ * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not

+ *    useful if you are using JPEG color spaces other than YCbCr or grayscale.

+ * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE

+ *    is not 3 (they don't understand about dummy color components!).  So you

+ *    can't use color quantization if you change that value.

+ */

+

+#define RGB_RED		0	/* Offset of Red in an RGB scanline element */

+#define RGB_GREEN	1	/* Offset of Green */

+#define RGB_BLUE	2	/* Offset of Blue */

+#define RGB_PIXELSIZE	3	/* JSAMPLEs per RGB scanline element */

+

+

+/* Definitions for speed-related optimizations. */

+

+

+/* If your compiler supports inline functions, define INLINE

+ * as the inline keyword; otherwise define it as empty.

+ */

+

+#ifndef INLINE

+#ifdef __GNUC__			/* for instance, GNU C knows about inline */

+#define INLINE __inline__

+#endif

+#ifndef INLINE

+#define INLINE			/* default is to define it as empty */

+#endif

+#endif

+

+

+/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying

+ * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER

+ * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.

+ */

+

+#ifndef MULTIPLIER

+#define MULTIPLIER  int		/* type for fastest integer multiply */

+#endif

+

+

+/* FAST_FLOAT should be either float or double, whichever is done faster

+ * by your compiler.  (Note that this type is only used in the floating point

+ * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)

+ * Typically, float is faster in ANSI C compilers, while double is faster in

+ * pre-ANSI compilers (because they insist on converting to double anyway).

+ * The code below therefore chooses float if we have ANSI-style prototypes.

+ */

+

+#ifndef FAST_FLOAT

+#ifdef HAVE_PROTOTYPES

+#define FAST_FLOAT  float

+#else

+#define FAST_FLOAT  double

+#endif

+#endif

+

+#endif /* JPEG_INTERNAL_OPTIONS */

diff --git a/core/include/thirdparties/libjpeg/jpegint.h b/core/include/thirdparties/libjpeg/jpegint.h
new file mode 100644
index 0000000..685a361
--- /dev/null
+++ b/core/include/thirdparties/libjpeg/jpegint.h
@@ -0,0 +1,392 @@
+/*

+ * jpegint.h

+ *

+ * Copyright (C) 1991-1997, Thomas G. Lane.

+ * This file is part of the Independent JPEG Group's software.

+ * For conditions of distribution and use, see the accompanying README file.

+ *

+ * This file provides common declarations for the various JPEG modules.

+ * These declarations are considered internal to the JPEG library; most

+ * applications using the library shouldn't need to include this file.

+ */

+

+

+/* Declarations for both compression & decompression */

+

+typedef enum {			/* Operating modes for buffer controllers */

+	JBUF_PASS_THRU,		/* Plain stripwise operation */

+	/* Remaining modes require a full-image buffer to have been created */

+	JBUF_SAVE_SOURCE,	/* Run source subobject only, save output */

+	JBUF_CRANK_DEST,	/* Run dest subobject only, using saved data */

+	JBUF_SAVE_AND_PASS	/* Run both subobjects, save output */

+} J_BUF_MODE;

+

+/* Values of global_state field (jdapi.c has some dependencies on ordering!) */

+#define CSTATE_START	100	/* after create_compress */

+#define CSTATE_SCANNING	101	/* start_compress done, write_scanlines OK */

+#define CSTATE_RAW_OK	102	/* start_compress done, write_raw_data OK */

+#define CSTATE_WRCOEFS	103	/* jpeg_write_coefficients done */

+#define DSTATE_START	200	/* after create_decompress */

+#define DSTATE_INHEADER	201	/* reading header markers, no SOS yet */

+#define DSTATE_READY	202	/* found SOS, ready for start_decompress */

+#define DSTATE_PRELOAD	203	/* reading multiscan file in start_decompress*/

+#define DSTATE_PRESCAN	204	/* performing dummy pass for 2-pass quant */

+#define DSTATE_SCANNING	205	/* start_decompress done, read_scanlines OK */

+#define DSTATE_RAW_OK	206	/* start_decompress done, read_raw_data OK */

+#define DSTATE_BUFIMAGE	207	/* expecting jpeg_start_output */

+#define DSTATE_BUFPOST	208	/* looking for SOS/EOI in jpeg_finish_output */

+#define DSTATE_RDCOEFS	209	/* reading file in jpeg_read_coefficients */

+#define DSTATE_STOPPING	210	/* looking for EOI in jpeg_finish_decompress */

+

+

+/* Declarations for compression modules */

+

+/* Master control module */

+struct jpeg_comp_master {

+  JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));

+  JMETHOD(void, pass_startup, (j_compress_ptr cinfo));

+  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));

+

+  /* State variables made visible to other modules */

+  boolean call_pass_startup;	/* True if pass_startup must be called */

+  boolean is_last_pass;		/* True during last pass */

+};

+

+/* Main buffer control (downsampled-data buffer) */

+struct jpeg_c_main_controller {

+  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));

+  JMETHOD(void, process_data, (j_compress_ptr cinfo,

+			       JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,

+			       JDIMENSION in_rows_avail));

+};

+

+/* Compression preprocessing (downsampling input buffer control) */

+struct jpeg_c_prep_controller {

+  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));

+  JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,

+				   JSAMPARRAY input_buf,

+				   JDIMENSION *in_row_ctr,

+				   JDIMENSION in_rows_avail,

+				   JSAMPIMAGE output_buf,

+				   JDIMENSION *out_row_group_ctr,

+				   JDIMENSION out_row_groups_avail));

+};

+

+/* Coefficient buffer control */

+struct jpeg_c_coef_controller {

+  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));

+  JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,

+				   JSAMPIMAGE input_buf));

+};

+

+/* Colorspace conversion */

+struct jpeg_color_converter {

+  JMETHOD(void, start_pass, (j_compress_ptr cinfo));

+  JMETHOD(void, color_convert, (j_compress_ptr cinfo,

+				JSAMPARRAY input_buf, JSAMPIMAGE output_buf,

+				JDIMENSION output_row, int num_rows));

+};

+

+/* Downsampling */

+struct jpeg_downsampler {

+  JMETHOD(void, start_pass, (j_compress_ptr cinfo));

+  JMETHOD(void, downsample, (j_compress_ptr cinfo,

+			     JSAMPIMAGE input_buf, JDIMENSION in_row_index,

+			     JSAMPIMAGE output_buf,

+			     JDIMENSION out_row_group_index));

+

+  boolean need_context_rows;	/* TRUE if need rows above & below */

+};

+

+/* Forward DCT (also controls coefficient quantization) */

+struct jpeg_forward_dct {

+  JMETHOD(void, start_pass, (j_compress_ptr cinfo));

+  /* perhaps this should be an array??? */

+  JMETHOD(void, forward_DCT, (j_compress_ptr cinfo,

+			      jpeg_component_info * compptr,

+			      JSAMPARRAY sample_data, JBLOCKROW coef_blocks,

+			      JDIMENSION start_row, JDIMENSION start_col,

+			      JDIMENSION num_blocks));

+};

+

+/* Entropy encoding */

+struct jpeg_entropy_encoder {

+  JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));

+  JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));

+  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));

+};

+

+/* Marker writing */

+struct jpeg_marker_writer {

+  JMETHOD(void, write_file_header, (j_compress_ptr cinfo));

+  JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));

+  JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));

+  JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));

+  JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));

+  /* These routines are exported to allow insertion of extra markers */

+  /* Probably only COM and APPn markers should be written this way */

+  JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker,

+				      unsigned int datalen));

+  JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val));

+};

+

+

+/* Declarations for decompression modules */

+

+/* Master control module */

+struct jpeg_decomp_master {

+  JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));

+  JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));

+

+  /* State variables made visible to other modules */

+  boolean is_dummy_pass;	/* True during 1st pass for 2-pass quant */

+};

+

+/* Input control module */

+struct jpeg_input_controller {

+  JMETHOD(int, consume_input, (j_decompress_ptr cinfo));

+  JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));

+  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));

+  JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));

+

+  /* State variables made visible to other modules */

+  boolean has_multiple_scans;	/* True if file has multiple scans */

+  boolean eoi_reached;		/* True when EOI has been consumed */

+};

+

+/* Main buffer control (downsampled-data buffer) */

+struct jpeg_d_main_controller {

+  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));

+  JMETHOD(void, process_data, (j_decompress_ptr cinfo,

+			       JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,

+			       JDIMENSION out_rows_avail));

+};

+

+/* Coefficient buffer control */

+struct jpeg_d_coef_controller {

+  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));

+  JMETHOD(int, consume_data, (j_decompress_ptr cinfo));

+  JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));

+  JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,

+				 JSAMPIMAGE output_buf));

+  /* Pointer to array of coefficient virtual arrays, or NULL if none */

+  jvirt_barray_ptr *coef_arrays;

+};

+

+/* Decompression postprocessing (color quantization buffer control) */

+struct jpeg_d_post_controller {

+  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));

+  JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,

+				    JSAMPIMAGE input_buf,

+				    JDIMENSION *in_row_group_ctr,

+				    JDIMENSION in_row_groups_avail,

+				    JSAMPARRAY output_buf,

+				    JDIMENSION *out_row_ctr,

+				    JDIMENSION out_rows_avail));

+};

+

+/* Marker reading & parsing */

+struct jpeg_marker_reader {

+  JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));

+  /* Read markers until SOS or EOI.

+   * Returns same codes as are defined for jpeg_consume_input:

+   * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.

+   */

+  JMETHOD(int, read_markers, (j_decompress_ptr cinfo));

+  /* Read a restart marker --- exported for use by entropy decoder only */

+  jpeg_marker_parser_method read_restart_marker;

+

+  /* State of marker reader --- nominally internal, but applications

+   * supplying COM or APPn handlers might like to know the state.

+   */

+  boolean saw_SOI;		/* found SOI? */

+  boolean saw_SOF;		/* found SOF? */

+  int next_restart_num;		/* next restart number expected (0-7) */

+  unsigned int discarded_bytes;	/* # of bytes skipped looking for a marker */

+};

+

+/* Entropy decoding */

+struct jpeg_entropy_decoder {

+  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));

+  JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,

+				JBLOCKROW *MCU_data));

+

+  /* This is here to share code between baseline and progressive decoders; */

+  /* other modules probably should not use it */

+  boolean insufficient_data;	/* set TRUE after emitting warning */

+};

+

+/* Inverse DCT (also performs dequantization) */

+typedef JMETHOD(void, inverse_DCT_method_ptr,

+		(j_decompress_ptr cinfo, jpeg_component_info * compptr,

+		 JCOEFPTR coef_block,

+		 JSAMPARRAY output_buf, JDIMENSION output_col));

+

+struct jpeg_inverse_dct {

+  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));

+  /* It is useful to allow each component to have a separate IDCT method. */

+  inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];

+};

+

+/* Upsampling (note that upsampler must also call color converter) */

+struct jpeg_upsampler {

+  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));

+  JMETHOD(void, upsample, (j_decompress_ptr cinfo,

+			   JSAMPIMAGE input_buf,

+			   JDIMENSION *in_row_group_ctr,

+			   JDIMENSION in_row_groups_avail,

+			   JSAMPARRAY output_buf,

+			   JDIMENSION *out_row_ctr,

+			   JDIMENSION out_rows_avail));

+

+  boolean need_context_rows;	/* TRUE if need rows above & below */

+};

+

+/* Colorspace conversion */

+struct jpeg_color_deconverter {

+  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));

+  JMETHOD(void, color_convert, (j_decompress_ptr cinfo,

+				JSAMPIMAGE input_buf, JDIMENSION input_row,

+				JSAMPARRAY output_buf, int num_rows));

+};

+

+/* Color quantization or color precision reduction */

+struct jpeg_color_quantizer {

+  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));

+  JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,

+				 JSAMPARRAY input_buf, JSAMPARRAY output_buf,

+				 int num_rows));

+  JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));

+  JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));

+};

+

+

+/* Miscellaneous useful macros */

+

+#undef MAX

+#define MAX(a,b)	((a) > (b) ? (a) : (b))

+#undef MIN

+#define MIN(a,b)	((a) < (b) ? (a) : (b))

+

+

+/* We assume that right shift corresponds to signed division by 2 with

+ * rounding towards minus infinity.  This is correct for typical "arithmetic

+ * shift" instructions that shift in copies of the sign bit.  But some

+ * C compilers implement >> with an unsigned shift.  For these machines you

+ * must define RIGHT_SHIFT_IS_UNSIGNED.

+ * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.

+ * It is only applied with constant shift counts.  SHIFT_TEMPS must be

+ * included in the variables of any routine using RIGHT_SHIFT.

+ */

+

+#ifdef RIGHT_SHIFT_IS_UNSIGNED

+#define SHIFT_TEMPS	INT32 shift_temp;

+#define RIGHT_SHIFT(x,shft)  \

+	((shift_temp = (x)) < 0 ? \

+	 (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \

+	 (shift_temp >> (shft)))

+#else

+#define SHIFT_TEMPS

+#define RIGHT_SHIFT(x,shft)	((x) >> (shft))

+#endif

+

+

+/* Short forms of external names for systems with brain-damaged linkers. */

+

+#ifdef NEED_SHORT_EXTERNAL_NAMES

+#define jinit_compress_master	jICompress

+#define jinit_c_master_control	jICMaster

+#define jinit_c_main_controller	jICMainC

+#define jinit_c_prep_controller	jICPrepC

+#define jinit_c_coef_controller	jICCoefC

+#define jinit_color_converter	jICColor

+#define jinit_downsampler	jIDownsampler

+#define jinit_forward_dct	jIFDCT

+#define jinit_huff_encoder	jIHEncoder

+#define jinit_phuff_encoder	jIPHEncoder

+#define jinit_marker_writer	jIMWriter

+#define jinit_master_decompress	jIDMaster

+#define jinit_d_main_controller	jIDMainC

+#define jinit_d_coef_controller	jIDCoefC

+#define jinit_d_post_controller	jIDPostC

+#define jinit_input_controller	jIInCtlr

+#define jinit_marker_reader	jIMReader

+#define jinit_huff_decoder	jIHDecoder

+#define jinit_phuff_decoder	jIPHDecoder

+#define jinit_inverse_dct	jIIDCT

+#define jinit_upsampler		jIUpsampler

+#define jinit_color_deconverter	jIDColor

+#define jinit_1pass_quantizer	jI1Quant

+#define jinit_2pass_quantizer	jI2Quant

+#define jinit_merged_upsampler	jIMUpsampler

+#define jinit_memory_mgr	jIMemMgr

+#define jdiv_round_up		jDivRound

+#define jround_up		jRound

+#define jcopy_sample_rows	jCopySamples

+#define jcopy_block_row		jCopyBlocks

+#define jzero_far		jZeroFar

+#define jpeg_zigzag_order	jZIGTable

+#define jpeg_natural_order	jZAGTable

+#endif /* NEED_SHORT_EXTERNAL_NAMES */

+

+

+/* Compression module initialization routines */

+EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo));

+EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo,

+					 boolean transcode_only));

+EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo,

+					  boolean need_full_buffer));

+EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo,

+					  boolean need_full_buffer));

+EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo,

+					  boolean need_full_buffer));

+EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo));

+EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo));

+EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo));

+EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo));

+EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo));

+EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo));

+/* Decompression module initialization routines */

+EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo,

+					  boolean need_full_buffer));

+EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo,

+					  boolean need_full_buffer));

+EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo,

+					  boolean need_full_buffer));

+EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));

+EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo));

+/* Memory manager initialization */

+EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo));

+

+/* Utility routines in jutils.c */

+EXTERN(long) jdiv_round_up JPP((long a, long b));

+EXTERN(long) jround_up JPP((long a, long b));

+EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,

+				    JSAMPARRAY output_array, int dest_row,

+				    int num_rows, JDIMENSION num_cols));

+EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,

+				  JDIMENSION num_blocks));

+EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));

+/* Constant tables in jutils.c */

+#if 0				/* This table is not actually needed in v6a */

+extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */

+#endif

+extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */

+

+/* Suppress undefined-structure complaints if necessary. */

+

+#ifdef INCOMPLETE_TYPES_BROKEN

+#ifndef AM_MEMORY_MANAGER	/* only jmemmgr.c defines these */

+struct jvirt_sarray_control { long dummy; };

+struct jvirt_barray_control { long dummy; };

+#endif

+#endif /* INCOMPLETE_TYPES_BROKEN */

diff --git a/core/include/thirdparties/libjpeg/jpeglib.h b/core/include/thirdparties/libjpeg/jpeglib.h
new file mode 100644
index 0000000..ac2aff9
--- /dev/null
+++ b/core/include/thirdparties/libjpeg/jpeglib.h
@@ -0,0 +1,1165 @@
+/*

+ * jpeglib.h

+ *

+ * Copyright (C) 1991-1998, Thomas G. Lane.

+ * This file is part of the Independent JPEG Group's software.

+ * For conditions of distribution and use, see the accompanying README file.

+ *

+ * This file defines the application interface for the JPEG library.

+ * Most applications using the library need only include this file,

+ * and perhaps jerror.h if they want to know the exact error codes.

+ */

+

+#ifndef JPEGLIB_H

+#define JPEGLIB_H

+

+#define FOXIT_PREFIX(origName)  FPDFAPIJPEG_##origName

+

+#define jcopy_block_row FOXIT_PREFIX(jcopy_block_row)

+#define jcopy_sample_rows FOXIT_PREFIX(jcopy_sample_rows)

+#define jdiv_round_up FOXIT_PREFIX(jdiv_round_up)

+#define jinit_1pass_quantizer FOXIT_PREFIX(jinit_1pass_quantizer)

+#define jinit_2pass_quantizer FOXIT_PREFIX(jinit_2pass_quantizer)

+#define jinit_color_deconverter FOXIT_PREFIX(jinit_color_deconverter)

+#define jinit_d_coef_controller FOXIT_PREFIX(jinit_d_coef_controller)

+#define jinit_d_main_controller FOXIT_PREFIX(jinit_d_main_controller)

+#define jinit_d_post_controller FOXIT_PREFIX(jinit_d_post_controller)

+#define jinit_huff_decoder FOXIT_PREFIX(jinit_huff_decoder)

+#define jinit_input_controller FOXIT_PREFIX(jinit_input_controller)

+#define jinit_inverse_dct FOXIT_PREFIX(jinit_inverse_dct)

+#define jinit_marker_reader FOXIT_PREFIX(jinit_marker_reader)

+#define jinit_master_decompress FOXIT_PREFIX(jinit_master_decompress)

+#define jinit_memory_mgr FOXIT_PREFIX(jinit_memory_mgr)

+#define jinit_merged_upsampler FOXIT_PREFIX(jinit_merged_upsampler)

+#define jinit_phuff_decoder FOXIT_PREFIX(jinit_phuff_decoder)

+#define jinit_upsampler FOXIT_PREFIX(jinit_upsampler)

+#define jpeg_CreateDecompress FOXIT_PREFIX(jpeg_CreateDecompress)

+#define jpeg_abort FOXIT_PREFIX(jpeg_abort)

+#define jpeg_abort_decompress FOXIT_PREFIX(jpeg_abort_decompress)

+#define jpeg_alloc_huff_table FOXIT_PREFIX(jpeg_alloc_huff_table)

+#define jpeg_alloc_quant_table FOXIT_PREFIX(jpeg_alloc_quant_table)

+#define jpeg_calc_output_dimensions FOXIT_PREFIX(jpeg_calc_output_dimensions)

+#define jpeg_consume_input FOXIT_PREFIX(jpeg_consume_input)

+#define jpeg_destroy FOXIT_PREFIX(jpeg_destroy)

+#define jpeg_destroy_decompress FOXIT_PREFIX(jpeg_destroy_decompress)

+#define jpeg_fill_bit_buffer FOXIT_PREFIX(jpeg_fill_bit_buffer)

+#define jpeg_finish_decompress FOXIT_PREFIX(jpeg_finish_decompress)

+#define jpeg_finish_output FOXIT_PREFIX(jpeg_finish_output)

+#define jpeg_free_large FOXIT_PREFIX(jpeg_free_large)

+#define jpeg_free_small FOXIT_PREFIX(jpeg_free_small)

+#define jpeg_get_large FOXIT_PREFIX(jpeg_get_large)

+#define jpeg_get_small FOXIT_PREFIX(jpeg_get_small)

+#define jpeg_has_multiple_scans FOXIT_PREFIX(jpeg_has_multiple_scans)

+#define jpeg_huff_decode FOXIT_PREFIX(jpeg_huff_decode)

+#define jpeg_idct_1x1 FOXIT_PREFIX(jpeg_idct_1x1)

+#define jpeg_idct_2x2 FOXIT_PREFIX(jpeg_idct_2x2)

+#define jpeg_idct_4x4 FOXIT_PREFIX(jpeg_idct_4x4)

+#define jpeg_idct_float FOXIT_PREFIX(jpeg_idct_float)

+#define jpeg_idct_ifast FOXIT_PREFIX(jpeg_idct_ifast)

+#define jpeg_idct_islow FOXIT_PREFIX(jpeg_idct_islow)

+#define jpeg_input_complete FOXIT_PREFIX(jpeg_input_complete)

+#define jpeg_make_d_derived_tbl FOXIT_PREFIX(jpeg_make_d_derived_tbl)

+#define jpeg_mem_available FOXIT_PREFIX(jpeg_mem_available)

+#define jpeg_mem_init FOXIT_PREFIX(jpeg_mem_init)

+#define jpeg_mem_term FOXIT_PREFIX(jpeg_mem_term)

+#define jpeg_natural_order FOXIT_PREFIX(jpeg_natural_order)

+#define jpeg_new_colormap FOXIT_PREFIX(jpeg_new_colormap)

+#define jpeg_open_backing_store FOXIT_PREFIX(jpeg_open_backing_store)

+#define jpeg_read_coefficients FOXIT_PREFIX(jpeg_read_coefficients)

+#define jpeg_read_header FOXIT_PREFIX(jpeg_read_header)

+#define jpeg_read_raw_data FOXIT_PREFIX(jpeg_read_raw_data)

+#define jpeg_read_scanlines FOXIT_PREFIX(jpeg_read_scanlines)

+#define jpeg_resync_to_restart FOXIT_PREFIX(jpeg_resync_to_restart)

+#define jpeg_save_markers FOXIT_PREFIX(jpeg_save_markers)

+#define jpeg_set_marker_processor FOXIT_PREFIX(jpeg_set_marker_processor)

+#define jpeg_start_decompress FOXIT_PREFIX(jpeg_start_decompress)

+#define jpeg_start_output FOXIT_PREFIX(jpeg_start_output)

+#define jpeg_std_error FOXIT_PREFIX(jpeg_std_error)

+#define jpeg_std_message_table FOXIT_PREFIX(jpeg_std_message_table)

+#define jpeg_stdio_src FOXIT_PREFIX(jpeg_stdio_src)

+#define jround_up FOXIT_PREFIX(jround_up)

+#define jzero_far FOXIT_PREFIX(jzero_far)

+

+ /*

+ * First we include the configuration files that record how this

+ * installation of the JPEG library is set up.  jconfig.h can be

+ * generated automatically for many systems.  jmorecfg.h contains

+ * manual configuration options that most people need not worry about.

+ */

+

+#ifndef JCONFIG_INCLUDED	/* in case jinclude.h already did */

+#include "jconfig.h"		/* widely used configuration options */

+#endif

+#include "jmorecfg.h"		/* seldom changed options */

+

+

+/* Version ID for the JPEG library.

+ * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".

+ */

+

+#define JPEG_LIB_VERSION  62	/* Version 6b */

+

+

+/* Various constants determining the sizes of things.

+ * All of these are specified by the JPEG standard, so don't change them

+ * if you want to be compatible.

+ */

+

+#define DCTSIZE		    8	/* The basic DCT block is 8x8 samples */

+#define DCTSIZE2	    64	/* DCTSIZE squared; # of elements in a block */

+#define NUM_QUANT_TBLS      4	/* Quantization tables are numbered 0..3 */

+#define NUM_HUFF_TBLS       4	/* Huffman tables are numbered 0..3 */

+#define NUM_ARITH_TBLS      16	/* Arith-coding tables are numbered 0..15 */

+#define MAX_COMPS_IN_SCAN   4	/* JPEG limit on # of components in one scan */

+#define MAX_SAMP_FACTOR     4	/* JPEG limit on sampling factors */

+/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;

+ * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.

+ * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU

+ * to handle it.  We even let you do this from the jconfig.h file.  However,

+ * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe

+ * sometimes emits noncompliant files doesn't mean you should too.

+ */

+#define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */

+#ifndef D_MAX_BLOCKS_IN_MCU

+#define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */

+#endif

+

+

+/* Data structures for images (arrays of samples and of DCT coefficients).

+ * On 80x86 machines, the image arrays are too big for near pointers,

+ * but the pointer arrays can fit in near memory.

+ */

+

+typedef JSAMPLE  *JSAMPROW;	/* ptr to one image row of pixel samples. */

+typedef JSAMPROW *JSAMPARRAY;	/* ptr to some rows (a 2-D sample array) */

+typedef JSAMPARRAY *JSAMPIMAGE;	/* a 3-D sample array: top index is color */

+

+typedef JCOEF JBLOCK[DCTSIZE2];	/* one block of coefficients */

+typedef JBLOCK  *JBLOCKROW;	/* pointer to one row of coefficient blocks */

+typedef JBLOCKROW *JBLOCKARRAY;		/* a 2-D array of coefficient blocks */

+typedef JBLOCKARRAY *JBLOCKIMAGE;	/* a 3-D array of coefficient blocks */

+

+typedef JCOEF  *JCOEFPTR;	/* useful in a couple of places */

+

+

+/* Types for JPEG compression parameters and working tables. */

+

+

+/* DCT coefficient quantization tables. */

+

+typedef struct {

+  /* This array gives the coefficient quantizers in natural array order

+   * (not the zigzag order in which they are stored in a JPEG DQT marker).

+   * CAUTION: IJG versions prior to v6a kept this array in zigzag order.

+   */

+  UINT16 quantval[DCTSIZE2];	/* quantization step for each coefficient */

+  /* This field is used only during compression.  It's initialized FALSE when

+   * the table is created, and set TRUE when it's been output to the file.

+   * You could suppress output of a table by setting this to TRUE.

+   * (See jpeg_suppress_tables for an example.)

+   */

+  boolean sent_table;		/* TRUE when table has been output */

+} JQUANT_TBL;

+

+

+/* Huffman coding tables. */

+

+typedef struct {

+  /* These two fields directly represent the contents of a JPEG DHT marker */

+  UINT8 bits[17];		/* bits[k] = # of symbols with codes of */

+				/* length k bits; bits[0] is unused */

+  UINT8 huffval[256];		/* The symbols, in order of incr code length */

+  /* This field is used only during compression.  It's initialized FALSE when

+   * the table is created, and set TRUE when it's been output to the file.

+   * You could suppress output of a table by setting this to TRUE.

+   * (See jpeg_suppress_tables for an example.)

+   */

+  boolean sent_table;		/* TRUE when table has been output */

+} JHUFF_TBL;

+

+

+/* Basic info about one component (color channel). */

+

+typedef struct {

+  /* These values are fixed over the whole image. */

+  /* For compression, they must be supplied by parameter setup; */

+  /* for decompression, they are read from the SOF marker. */

+  int component_id;		/* identifier for this component (0..255) */

+  int component_index;		/* its index in SOF or cinfo->comp_info[] */

+  int h_samp_factor;		/* horizontal sampling factor (1..4) */

+  int v_samp_factor;		/* vertical sampling factor (1..4) */

+  int quant_tbl_no;		/* quantization table selector (0..3) */

+  /* These values may vary between scans. */

+  /* For compression, they must be supplied by parameter setup; */

+  /* for decompression, they are read from the SOS marker. */

+  /* The decompressor output side may not use these variables. */

+  int dc_tbl_no;		/* DC entropy table selector (0..3) */

+  int ac_tbl_no;		/* AC entropy table selector (0..3) */

+  

+  /* Remaining fields should be treated as private by applications. */

+  

+  /* These values are computed during compression or decompression startup: */

+  /* Component's size in DCT blocks.

+   * Any dummy blocks added to complete an MCU are not counted; therefore

+   * these values do not depend on whether a scan is interleaved or not.

+   */

+  JDIMENSION width_in_blocks;

+  JDIMENSION height_in_blocks;

+  /* Size of a DCT block in samples.  Always DCTSIZE for compression.

+   * For decompression this is the size of the output from one DCT block,

+   * reflecting any scaling we choose to apply during the IDCT step.

+   * Values of 1,2,4,8 are likely to be supported.  Note that different

+   * components may receive different IDCT scalings.

+   */

+  int DCT_scaled_size;

+  /* The downsampled dimensions are the component's actual, unpadded number

+   * of samples at the main buffer (preprocessing/compression interface), thus

+   * downsampled_width = ceil(image_width * Hi/Hmax)

+   * and similarly for height.  For decompression, IDCT scaling is included, so

+   * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)

+   */

+  JDIMENSION downsampled_width;	 /* actual width in samples */

+  JDIMENSION downsampled_height; /* actual height in samples */

+  /* This flag is used only for decompression.  In cases where some of the

+   * components will be ignored (eg grayscale output from YCbCr image),

+   * we can skip most computations for the unused components.

+   */

+  boolean component_needed;	/* do we need the value of this component? */

+

+  /* These values are computed before starting a scan of the component. */

+  /* The decompressor output side may not use these variables. */

+  int MCU_width;		/* number of blocks per MCU, horizontally */

+  int MCU_height;		/* number of blocks per MCU, vertically */

+  int MCU_blocks;		/* MCU_width * MCU_height */

+  int MCU_sample_width;		/* MCU width in samples, MCU_width*DCT_scaled_size */

+  int last_col_width;		/* # of non-dummy blocks across in last MCU */

+  int last_row_height;		/* # of non-dummy blocks down in last MCU */

+

+  /* Saved quantization table for component; NULL if none yet saved.

+   * See jdinput.c comments about the need for this information.

+   * This field is currently used only for decompression.

+   */

+  JQUANT_TBL * quant_table;

+

+  /* Private per-component storage for DCT or IDCT subsystem. */

+  void * dct_table;

+} jpeg_component_info;

+

+

+/* The script for encoding a multiple-scan file is an array of these: */

+

+typedef struct {

+  int comps_in_scan;		/* number of components encoded in this scan */

+  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */

+  int Ss, Se;			/* progressive JPEG spectral selection parms */

+  int Ah, Al;			/* progressive JPEG successive approx. parms */

+} jpeg_scan_info;

+

+/* The decompressor can save APPn and COM markers in a list of these: */

+

+typedef struct jpeg_marker_struct  * jpeg_saved_marker_ptr;

+

+struct jpeg_marker_struct {

+  jpeg_saved_marker_ptr next;	/* next in list, or NULL */

+  UINT8 marker;			/* marker code: JPEG_COM, or JPEG_APP0+n */

+  unsigned int original_length;	/* # bytes of data in the file */

+  unsigned int data_length;	/* # bytes of data saved at data[] */

+  JOCTET  * data;		/* the data contained in the marker */

+  /* the marker length word is not counted in data_length or original_length */

+};

+

+/* Known color spaces. */

+

+typedef enum {

+	JCS_UNKNOWN,		/* error/unspecified */

+	JCS_GRAYSCALE,		/* monochrome */

+	JCS_RGB,		/* red/green/blue */

+	JCS_YCbCr,		/* Y/Cb/Cr (also known as YUV) */

+	JCS_CMYK,		/* C/M/Y/K */

+	JCS_YCCK		/* Y/Cb/Cr/K */

+} J_COLOR_SPACE;

+

+/* DCT/IDCT algorithm options. */

+

+typedef enum {

+	JDCT_ISLOW,		/* slow but accurate integer algorithm */

+	JDCT_IFAST,		/* faster, less accurate integer method */

+	JDCT_FLOAT		/* floating-point: accurate, fast on fast HW */

+} J_DCT_METHOD;

+

+#ifndef JDCT_DEFAULT		/* may be overridden in jconfig.h */

+#define JDCT_DEFAULT  JDCT_ISLOW

+#endif

+#ifndef JDCT_FASTEST		/* may be overridden in jconfig.h */

+#define JDCT_FASTEST  JDCT_IFAST

+#endif

+

+/* Dithering options for decompression. */

+

+typedef enum {

+	JDITHER_NONE,		/* no dithering */

+	JDITHER_ORDERED,	/* simple ordered dither */

+	JDITHER_FS		/* Floyd-Steinberg error diffusion dither */

+} J_DITHER_MODE;

+

+

+/* Common fields between JPEG compression and decompression master structs. */

+

+#define jpeg_common_fields \

+  struct jpeg_error_mgr * err;	/* Error handler module */\

+  struct jpeg_memory_mgr * mem;	/* Memory manager module */\

+  struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\

+  void * client_data;		/* Available for use by application */\

+  boolean is_decompressor;	/* So common code can tell which is which */\

+  int global_state		/* For checking call sequence validity */

+

+/* Routines that are to be used by both halves of the library are declared

+ * to receive a pointer to this structure.  There are no actual instances of

+ * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.

+ */

+struct jpeg_common_struct {

+  jpeg_common_fields;		/* Fields common to both master struct types */

+  /* Additional fields follow in an actual jpeg_compress_struct or

+   * jpeg_decompress_struct.  All three structs must agree on these

+   * initial fields!  (This would be a lot cleaner in C++.)

+   */

+};

+

+typedef struct jpeg_common_struct * j_common_ptr;

+typedef struct jpeg_compress_struct * j_compress_ptr;

+typedef struct jpeg_decompress_struct * j_decompress_ptr;

+

+

+/* Master record for a compression instance */

+

+struct jpeg_compress_struct {

+  jpeg_common_fields;		/* Fields shared with jpeg_decompress_struct */

+

+  /* Destination for compressed data */

+  struct jpeg_destination_mgr * dest;

+

+  /* Description of source image --- these fields must be filled in by

+   * outer application before starting compression.  in_color_space must

+   * be correct before you can even call jpeg_set_defaults().

+   */

+

+  JDIMENSION image_width;	/* input image width */

+  JDIMENSION image_height;	/* input image height */

+  int input_components;		/* # of color components in input image */

+  J_COLOR_SPACE in_color_space;	/* colorspace of input image */

+

+  double input_gamma;		/* image gamma of input image */

+

+  /* Compression parameters --- these fields must be set before calling

+   * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to

+   * initialize everything to reasonable defaults, then changing anything

+   * the application specifically wants to change.  That way you won't get

+   * burnt when new parameters are added.  Also note that there are several

+   * helper routines to simplify changing parameters.

+   */

+

+  int data_precision;		/* bits of precision in image data */

+

+  int num_components;		/* # of color components in JPEG image */

+  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */

+

+  jpeg_component_info * comp_info;

+  /* comp_info[i] describes component that appears i'th in SOF */

+  

+  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];

+  /* ptrs to coefficient quantization tables, or NULL if not defined */

+  

+  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];

+  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];

+  /* ptrs to Huffman coding tables, or NULL if not defined */

+  

+  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */

+  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */

+  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */

+

+  int num_scans;		/* # of entries in scan_info array */

+  const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */

+  /* The default value of scan_info is NULL, which causes a single-scan

+   * sequential JPEG file to be emitted.  To create a multi-scan file,

+   * set num_scans and scan_info to point to an array of scan definitions.

+   */

+

+  boolean raw_data_in;		/* TRUE=caller supplies downsampled data */

+  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */

+  boolean optimize_coding;	/* TRUE=optimize entropy encoding parms */

+  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */

+  int smoothing_factor;		/* 1..100, or 0 for no input smoothing */

+  J_DCT_METHOD dct_method;	/* DCT algorithm selector */

+

+  /* The restart interval can be specified in absolute MCUs by setting

+   * restart_interval, or in MCU rows by setting restart_in_rows

+   * (in which case the correct restart_interval will be figured

+   * for each scan).

+   */

+  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */

+  int restart_in_rows;		/* if > 0, MCU rows per restart interval */

+

+  /* Parameters controlling emission of special markers. */

+

+  boolean write_JFIF_header;	/* should a JFIF marker be written? */

+  UINT8 JFIF_major_version;	/* What to write for the JFIF version number */

+  UINT8 JFIF_minor_version;

+  /* These three values are not used by the JPEG code, merely copied */

+  /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */

+  /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */

+  /* ratio is defined by X_density/Y_density even when density_unit=0. */

+  UINT8 density_unit;		/* JFIF code for pixel size units */

+  UINT16 X_density;		/* Horizontal pixel density */

+  UINT16 Y_density;		/* Vertical pixel density */

+  boolean write_Adobe_marker;	/* should an Adobe marker be written? */

+  

+  /* State variable: index of next scanline to be written to

+   * jpeg_write_scanlines().  Application may use this to control its

+   * processing loop, e.g., "while (next_scanline < image_height)".

+   */

+

+  JDIMENSION next_scanline;	/* 0 .. image_height-1  */

+

+  /* Remaining fields are known throughout compressor, but generally

+   * should not be touched by a surrounding application.

+   */

+

+  /*

+   * These fields are computed during compression startup

+   */

+  boolean progressive_mode;	/* TRUE if scan script uses progressive mode */

+  int max_h_samp_factor;	/* largest h_samp_factor */

+  int max_v_samp_factor;	/* largest v_samp_factor */

+

+  JDIMENSION total_iMCU_rows;	/* # of iMCU rows to be input to coef ctlr */

+  /* The coefficient controller receives data in units of MCU rows as defined

+   * for fully interleaved scans (whether the JPEG file is interleaved or not).

+   * There are v_samp_factor * DCTSIZE sample rows of each component in an

+   * "iMCU" (interleaved MCU) row.

+   */

+  

+  /*

+   * These fields are valid during any one scan.

+   * They describe the components and MCUs actually appearing in the scan.

+   */

+  int comps_in_scan;		/* # of JPEG components in this scan */

+  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];

+  /* *cur_comp_info[i] describes component that appears i'th in SOS */

+  

+  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */

+  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */

+  

+  int blocks_in_MCU;		/* # of DCT blocks per MCU */

+  int MCU_membership[C_MAX_BLOCKS_IN_MCU];

+  /* MCU_membership[i] is index in cur_comp_info of component owning */

+  /* i'th block in an MCU */

+

+  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */

+

+  /*

+   * Links to compression subobjects (methods and private variables of modules)

+   */

+  struct jpeg_comp_master * master;

+  struct jpeg_c_main_controller * main;

+  struct jpeg_c_prep_controller * prep;

+  struct jpeg_c_coef_controller * coef;

+  struct jpeg_marker_writer * marker;

+  struct jpeg_color_converter * cconvert;

+  struct jpeg_downsampler * downsample;

+  struct jpeg_forward_dct * fdct;

+  struct jpeg_entropy_encoder * entropy;

+  jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */

+  int script_space_size;

+};

+

+

+/* Master record for a decompression instance */

+

+struct jpeg_decompress_struct {

+  jpeg_common_fields;		/* Fields shared with jpeg_compress_struct */

+

+  /* Source of compressed data */

+  struct jpeg_source_mgr * src;

+

+  /* Basic description of image --- filled in by jpeg_read_header(). */

+  /* Application may inspect these values to decide how to process image. */

+

+  JDIMENSION image_width;	/* nominal image width (from SOF marker) */

+  JDIMENSION image_height;	/* nominal image height */

+  int num_components;		/* # of color components in JPEG image */

+  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */

+

+  /* Decompression processing parameters --- these fields must be set before

+   * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes

+   * them to default values.

+   */

+

+  J_COLOR_SPACE out_color_space; /* colorspace for output */

+

+  unsigned int scale_num, scale_denom; /* fraction by which to scale image */

+

+  double output_gamma;		/* image gamma wanted in output */

+

+  boolean buffered_image;	/* TRUE=multiple output passes */

+  boolean raw_data_out;		/* TRUE=downsampled data wanted */

+

+  J_DCT_METHOD dct_method;	/* IDCT algorithm selector */

+  boolean do_fancy_upsampling;	/* TRUE=apply fancy upsampling */

+  boolean do_block_smoothing;	/* TRUE=apply interblock smoothing */

+

+  boolean quantize_colors;	/* TRUE=colormapped output wanted */

+  /* the following are ignored if not quantize_colors: */

+  J_DITHER_MODE dither_mode;	/* type of color dithering to use */

+  boolean two_pass_quantize;	/* TRUE=use two-pass color quantization */

+  int desired_number_of_colors;	/* max # colors to use in created colormap */

+  /* these are significant only in buffered-image mode: */

+  boolean enable_1pass_quant;	/* enable future use of 1-pass quantizer */

+  boolean enable_external_quant;/* enable future use of external colormap */

+  boolean enable_2pass_quant;	/* enable future use of 2-pass quantizer */

+

+  /* Description of actual output image that will be returned to application.

+   * These fields are computed by jpeg_start_decompress().

+   * You can also use jpeg_calc_output_dimensions() to determine these values

+   * in advance of calling jpeg_start_decompress().

+   */

+

+  JDIMENSION output_width;	/* scaled image width */

+  JDIMENSION output_height;	/* scaled image height */

+  int out_color_components;	/* # of color components in out_color_space */

+  int output_components;	/* # of color components returned */

+  /* output_components is 1 (a colormap index) when quantizing colors;

+   * otherwise it equals out_color_components.

+   */

+  int rec_outbuf_height;	/* min recommended height of scanline buffer */

+  /* If the buffer passed to jpeg_read_scanlines() is less than this many rows

+   * high, space and time will be wasted due to unnecessary data copying.

+   * Usually rec_outbuf_height will be 1 or 2, at most 4.

+   */

+

+  /* When quantizing colors, the output colormap is described by these fields.

+   * The application can supply a colormap by setting colormap non-NULL before

+   * calling jpeg_start_decompress; otherwise a colormap is created during

+   * jpeg_start_decompress or jpeg_start_output.

+   * The map has out_color_components rows and actual_number_of_colors columns.

+   */

+  int actual_number_of_colors;	/* number of entries in use */

+  JSAMPARRAY colormap;		/* The color map as a 2-D pixel array */

+

+  /* State variables: these variables indicate the progress of decompression.

+   * The application may examine these but must not modify them.

+   */

+

+  /* Row index of next scanline to be read from jpeg_read_scanlines().

+   * Application may use this to control its processing loop, e.g.,

+   * "while (output_scanline < output_height)".

+   */

+  JDIMENSION output_scanline;	/* 0 .. output_height-1  */

+

+  /* Current input scan number and number of iMCU rows completed in scan.

+   * These indicate the progress of the decompressor input side.

+   */

+  int input_scan_number;	/* Number of SOS markers seen so far */

+  JDIMENSION input_iMCU_row;	/* Number of iMCU rows completed */

+

+  /* The "output scan number" is the notional scan being displayed by the

+   * output side.  The decompressor will not allow output scan/row number

+   * to get ahead of input scan/row, but it can fall arbitrarily far behind.

+   */

+  int output_scan_number;	/* Nominal scan number being displayed */

+  JDIMENSION output_iMCU_row;	/* Number of iMCU rows read */

+

+  /* Current progression status.  coef_bits[c][i] indicates the precision

+   * with which component c's DCT coefficient i (in zigzag order) is known.

+   * It is -1 when no data has yet been received, otherwise it is the point

+   * transform (shift) value for the most recent scan of the coefficient

+   * (thus, 0 at completion of the progression).

+   * This pointer is NULL when reading a non-progressive file.

+   */

+  int (*coef_bits)[DCTSIZE2];	/* -1 or current Al value for each coef */

+

+  /* Internal JPEG parameters --- the application usually need not look at

+   * these fields.  Note that the decompressor output side may not use

+   * any parameters that can change between scans.

+   */

+

+  /* Quantization and Huffman tables are carried forward across input

+   * datastreams when processing abbreviated JPEG datastreams.

+   */

+

+  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];

+  /* ptrs to coefficient quantization tables, or NULL if not defined */

+

+  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];

+  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];

+  /* ptrs to Huffman coding tables, or NULL if not defined */

+

+  /* These parameters are never carried across datastreams, since they

+   * are given in SOF/SOS markers or defined to be reset by SOI.

+   */

+

+  int data_precision;		/* bits of precision in image data */

+

+  jpeg_component_info * comp_info;

+  /* comp_info[i] describes component that appears i'th in SOF */

+

+  boolean progressive_mode;	/* TRUE if SOFn specifies progressive mode */

+  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */

+

+  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */

+  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */

+  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */

+

+  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */

+

+  /* These fields record data obtained from optional markers recognized by

+   * the JPEG library.

+   */

+  boolean saw_JFIF_marker;	/* TRUE iff a JFIF APP0 marker was found */

+  /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */

+  UINT8 JFIF_major_version;	/* JFIF version number */

+  UINT8 JFIF_minor_version;

+  UINT8 density_unit;		/* JFIF code for pixel size units */

+  UINT16 X_density;		/* Horizontal pixel density */

+  UINT16 Y_density;		/* Vertical pixel density */

+  boolean saw_Adobe_marker;	/* TRUE iff an Adobe APP14 marker was found */

+  UINT8 Adobe_transform;	/* Color transform code from Adobe marker */

+

+  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */

+

+  /* Aside from the specific data retained from APPn markers known to the

+   * library, the uninterpreted contents of any or all APPn and COM markers

+   * can be saved in a list for examination by the application.

+   */

+  jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */

+

+  /* Remaining fields are known throughout decompressor, but generally

+   * should not be touched by a surrounding application.

+   */

+

+  /*

+   * These fields are computed during decompression startup

+   */

+  int max_h_samp_factor;	/* largest h_samp_factor */

+  int max_v_samp_factor;	/* largest v_samp_factor */

+

+  int min_DCT_scaled_size;	/* smallest DCT_scaled_size of any component */

+

+  JDIMENSION total_iMCU_rows;	/* # of iMCU rows in image */

+  /* The coefficient controller's input and output progress is measured in

+   * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows

+   * in fully interleaved JPEG scans, but are used whether the scan is

+   * interleaved or not.  We define an iMCU row as v_samp_factor DCT block

+   * rows of each component.  Therefore, the IDCT output contains

+   * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.

+   */

+

+  JSAMPLE * sample_range_limit; /* table for fast range-limiting */

+

+  /*

+   * These fields are valid during any one scan.

+   * They describe the components and MCUs actually appearing in the scan.

+   * Note that the decompressor output side must not use these fields.

+   */

+  int comps_in_scan;		/* # of JPEG components in this scan */

+  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];

+  /* *cur_comp_info[i] describes component that appears i'th in SOS */

+

+  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */

+  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */

+

+  int blocks_in_MCU;		/* # of DCT blocks per MCU */

+  int MCU_membership[D_MAX_BLOCKS_IN_MCU];

+  /* MCU_membership[i] is index in cur_comp_info of component owning */

+  /* i'th block in an MCU */

+

+  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */

+

+  /* This field is shared between entropy decoder and marker parser.

+   * It is either zero or the code of a JPEG marker that has been

+   * read from the data source, but has not yet been processed.

+   */

+  int unread_marker;

+

+  /*

+   * Links to decompression subobjects (methods, private variables of modules)

+   */

+  struct jpeg_decomp_master * master;

+  struct jpeg_d_main_controller * main;

+  struct jpeg_d_coef_controller * coef;

+  struct jpeg_d_post_controller * post;

+  struct jpeg_input_controller * inputctl;

+  struct jpeg_marker_reader * marker;

+  struct jpeg_entropy_decoder * entropy;

+  struct jpeg_inverse_dct * idct;

+  struct jpeg_upsampler * upsample;

+  struct jpeg_color_deconverter * cconvert;

+  struct jpeg_color_quantizer * cquantize;

+};

+

+

+/* "Object" declarations for JPEG modules that may be supplied or called

+ * directly by the surrounding application.

+ * As with all objects in the JPEG library, these structs only define the

+ * publicly visible methods and state variables of a module.  Additional

+ * private fields may exist after the public ones.

+ */

+

+

+/* Error handler object */

+

+struct jpeg_error_mgr {

+  /* Error exit handler: does not return to caller */

+  JMETHOD(void, error_exit, (j_common_ptr cinfo));

+  /* Conditionally emit a trace or warning message */

+  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));

+  /* Routine that actually outputs a trace or error message */

+  JMETHOD(void, output_message, (j_common_ptr cinfo));

+  /* Format a message string for the most recent JPEG error or message */

+  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));

+#define JMSG_LENGTH_MAX  200	/* recommended size of format_message buffer */

+  /* Reset error state variables at start of a new image */

+  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));

+  

+  /* The message ID code and any parameters are saved here.

+   * A message can have one string parameter or up to 8 int parameters.

+   */

+  int msg_code;

+#define JMSG_STR_PARM_MAX  80

+  union {

+    int i[8];

+    char s[JMSG_STR_PARM_MAX];

+  } msg_parm;

+  

+  /* Standard state variables for error facility */

+  

+  int trace_level;		/* max msg_level that will be displayed */

+  

+  /* For recoverable corrupt-data errors, we emit a warning message,

+   * but keep going unless emit_message chooses to abort.  emit_message

+   * should count warnings in num_warnings.  The surrounding application

+   * can check for bad data by seeing if num_warnings is nonzero at the

+   * end of processing.

+   */

+  long num_warnings;		/* number of corrupt-data warnings */

+

+  /* These fields point to the table(s) of error message strings.

+   * An application can change the table pointer to switch to a different

+   * message list (typically, to change the language in which errors are

+   * reported).  Some applications may wish to add additional error codes

+   * that will be handled by the JPEG library error mechanism; the second

+   * table pointer is used for this purpose.

+   *

+   * First table includes all errors generated by JPEG library itself.

+   * Error code 0 is reserved for a "no such error string" message.

+   */

+  const char * const * jpeg_message_table; /* Library errors */

+  int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */

+  /* Second table can be added by application (see cjpeg/djpeg for example).

+   * It contains strings numbered first_addon_message..last_addon_message.

+   */

+  const char * const * addon_message_table; /* Non-library errors */

+  int first_addon_message;	/* code for first string in addon table */

+  int last_addon_message;	/* code for last string in addon table */

+};

+

+

+/* Progress monitor object */

+

+struct jpeg_progress_mgr {

+  JMETHOD(void, progress_monitor, (j_common_ptr cinfo));

+

+  long pass_counter;		/* work units completed in this pass */

+  long pass_limit;		/* total number of work units in this pass */

+  int completed_passes;		/* passes completed so far */

+  int total_passes;		/* total number of passes expected */

+};

+

+

+/* Data destination object for compression */

+

+struct jpeg_destination_mgr {

+  JOCTET * next_output_byte;	/* => next byte to write in buffer */

+  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */

+

+  JMETHOD(void, init_destination, (j_compress_ptr cinfo));

+  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));

+  JMETHOD(void, term_destination, (j_compress_ptr cinfo));

+};

+

+

+/* Data source object for decompression */

+

+struct jpeg_source_mgr {

+  const JOCTET * next_input_byte; /* => next byte to read from buffer */

+  size_t bytes_in_buffer;	/* # of bytes remaining in buffer */

+

+  JMETHOD(void, init_source, (j_decompress_ptr cinfo));

+  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));

+  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));

+  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));

+  JMETHOD(void, term_source, (j_decompress_ptr cinfo));

+};

+

+

+/* Memory manager object.

+ * Allocates "small" objects (a few K total), "large" objects (tens of K),

+ * and "really big" objects (virtual arrays with backing store if needed).

+ * The memory manager does not allow individual objects to be freed; rather,

+ * each created object is assigned to a pool, and whole pools can be freed

+ * at once.  This is faster and more convenient than remembering exactly what

+ * to free, especially where malloc()/free() are not too speedy.

+ * NB: alloc routines never return NULL.  They exit to error_exit if not

+ * successful.

+ */

+

+#define JPOOL_PERMANENT	0	/* lasts until master record is destroyed */

+#define JPOOL_IMAGE	1	/* lasts until done with image/datastream */

+#define JPOOL_NUMPOOLS	2

+

+typedef struct jvirt_sarray_control * jvirt_sarray_ptr;

+typedef struct jvirt_barray_control * jvirt_barray_ptr;

+

+

+struct jpeg_memory_mgr {

+  /* Method pointers */

+  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,

+				size_t sizeofobject));

+  JMETHOD(void  *, alloc_large, (j_common_ptr cinfo, int pool_id,

+				     size_t sizeofobject));

+  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,

+				     JDIMENSION samplesperrow,

+				     JDIMENSION numrows));

+  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,

+				      JDIMENSION blocksperrow,

+				      JDIMENSION numrows));

+  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,

+						  int pool_id,

+						  boolean pre_zero,

+						  JDIMENSION samplesperrow,

+						  JDIMENSION numrows,

+						  JDIMENSION maxaccess));

+  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,

+						  int pool_id,

+						  boolean pre_zero,

+						  JDIMENSION blocksperrow,

+						  JDIMENSION numrows,

+						  JDIMENSION maxaccess));

+  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));

+  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,

+					   jvirt_sarray_ptr ptr,

+					   JDIMENSION start_row,

+					   JDIMENSION num_rows,

+					   boolean writable));

+  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,

+					    jvirt_barray_ptr ptr,

+					    JDIMENSION start_row,

+					    JDIMENSION num_rows,

+					    boolean writable));

+  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));

+  JMETHOD(void, self_destruct, (j_common_ptr cinfo));

+

+  /* Limit on memory allocation for this JPEG object.  (Note that this is

+   * merely advisory, not a guaranteed maximum; it only affects the space

+   * used for virtual-array buffers.)  May be changed by outer application

+   * after creating the JPEG object.

+   */

+  long max_memory_to_use;

+

+  /* Maximum allocation request accepted by alloc_large. */

+  long max_alloc_chunk;

+};

+

+

+/* Routine signature for application-supplied marker processing methods.

+ * Need not pass marker code since it is stored in cinfo->unread_marker.

+ */

+typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));

+

+

+/* Declarations for routines called by application.

+ * The JPP macro hides prototype parameters from compilers that can't cope.

+ * Note JPP requires double parentheses.

+ */

+

+#ifdef HAVE_PROTOTYPES

+#define JPP(arglist)	arglist

+#else

+#define JPP(arglist)	()

+#endif

+

+

+/* Short forms of external names for systems with brain-damaged linkers.

+ * We shorten external names to be unique in the first six letters, which

+ * is good enough for all known systems.

+ * (If your compiler itself needs names to be unique in less than 15 

+ * characters, you are out of luck.  Get a better compiler.)

+ */

+

+#ifdef NEED_SHORT_EXTERNAL_NAMES

+#define jpeg_std_error		jStdError

+#define jpeg_CreateCompress	jCreaCompress

+#define jpeg_CreateDecompress	jCreaDecompress

+#define jpeg_destroy_compress	jDestCompress

+#define jpeg_destroy_decompress	jDestDecompress

+#define jpeg_stdio_dest		jStdDest

+#define jpeg_stdio_src		jStdSrc

+#define jpeg_set_defaults	jSetDefaults

+#define jpeg_set_colorspace	jSetColorspace

+#define jpeg_default_colorspace	jDefColorspace

+#define jpeg_set_quality	jSetQuality

+#define jpeg_set_linear_quality	jSetLQuality

+#define jpeg_add_quant_table	jAddQuantTable

+#define jpeg_quality_scaling	jQualityScaling

+#define jpeg_simple_progression	jSimProgress

+#define jpeg_suppress_tables	jSuppressTables

+#define jpeg_alloc_quant_table	jAlcQTable

+#define jpeg_alloc_huff_table	jAlcHTable

+#define jpeg_start_compress	jStrtCompress

+#define jpeg_write_scanlines	jWrtScanlines

+#define jpeg_finish_compress	jFinCompress

+#define jpeg_write_raw_data	jWrtRawData

+#define jpeg_write_marker	jWrtMarker

+#define jpeg_write_m_header	jWrtMHeader

+#define jpeg_write_m_byte	jWrtMByte

+#define jpeg_write_tables	jWrtTables

+#define jpeg_read_header	jReadHeader

+#define jpeg_start_decompress	jStrtDecompress

+#define jpeg_read_scanlines	jReadScanlines

+#define jpeg_finish_decompress	jFinDecompress

+#define jpeg_read_raw_data	jReadRawData

+#define jpeg_has_multiple_scans	jHasMultScn

+#define jpeg_start_output	jStrtOutput

+#define jpeg_finish_output	jFinOutput

+#define jpeg_input_complete	jInComplete

+#define jpeg_new_colormap	jNewCMap

+#define jpeg_consume_input	jConsumeInput

+#define jpeg_calc_output_dimensions	jCalcDimensions

+#define jpeg_save_markers	jSaveMarkers

+#define jpeg_set_marker_processor	jSetMarker

+#define jpeg_read_coefficients	jReadCoefs

+#define jpeg_write_coefficients	jWrtCoefs

+#define jpeg_copy_critical_parameters	jCopyCrit

+#define jpeg_abort_compress	jAbrtCompress

+#define jpeg_abort_decompress	jAbrtDecompress

+#define jpeg_abort		jAbort

+#define jpeg_destroy		jDestroy

+#define jpeg_resync_to_restart	jResyncRestart

+#endif /* NEED_SHORT_EXTERNAL_NAMES */

+

+

+/* Default error-management setup */

+EXTERN(struct jpeg_error_mgr *) jpeg_std_error

+	JPP((struct jpeg_error_mgr * err));

+

+/* Initialization of JPEG compression objects.

+ * jpeg_create_compress() and jpeg_create_decompress() are the exported

+ * names that applications should call.  These expand to calls on

+ * jpeg_CreateCompress and jpeg_CreateDecompress with additional information

+ * passed for version mismatch checking.

+ * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.

+ */

+#define jpeg_create_compress(cinfo) \

+    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \

+			(size_t) sizeof(struct jpeg_compress_struct))

+#define jpeg_create_decompress(cinfo) \

+    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \

+			  (size_t) sizeof(struct jpeg_decompress_struct))

+EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,

+				      int version, size_t structsize));

+EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,

+					int version, size_t structsize));

+/* Destruction of JPEG compression objects */

+EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));

+EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));

+

+#if 0

+/* Standard data source and destination managers: stdio streams. */

+/* Caller is responsible for opening the file before and closing after. */

+EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FXSYS_FILE * outfile));

+EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FXSYS_FILE * infile));

+#endif

+

+/* Default parameter setup for compression */

+EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));

+/* Compression parameter setup aids */

+EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,

+				      J_COLOR_SPACE colorspace));

+EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));

+EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,

+				   boolean force_baseline));

+EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,

+					  int scale_factor,

+					  boolean force_baseline));

+EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,

+				       const unsigned int *basic_table,

+				       int scale_factor,

+				       boolean force_baseline));

+EXTERN(int) jpeg_quality_scaling JPP((int quality));

+EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));

+EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,

+				       boolean suppress));

+EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));

+EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));

+

+/* Main entry points for compression */

+EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,

+				      boolean write_all_tables));

+EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,

+					     JSAMPARRAY scanlines,

+					     JDIMENSION num_lines));

+EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));

+

+/* Replaces jpeg_write_scanlines when writing raw downsampled data. */

+EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,

+					    JSAMPIMAGE data,

+					    JDIMENSION num_lines));

+

+/* Write a special marker.  See libjpeg.doc concerning safe usage. */

+EXTERN(void) jpeg_write_marker

+	JPP((j_compress_ptr cinfo, int marker,

+	     const JOCTET * dataptr, unsigned int datalen));

+/* Same, but piecemeal. */

+EXTERN(void) jpeg_write_m_header

+	JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));

+EXTERN(void) jpeg_write_m_byte

+	JPP((j_compress_ptr cinfo, int val));

+

+/* Alternate compression function: just write an abbreviated table file */

+EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));

+

+/* Decompression startup: read start of JPEG datastream to see what's there */

+EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,

+				  boolean require_image));

+/* Return value is one of: */

+#define JPEG_SUSPENDED		0 /* Suspended due to lack of input data */

+#define JPEG_HEADER_OK		1 /* Found valid image datastream */

+#define JPEG_HEADER_TABLES_ONLY	2 /* Found valid table-specs-only datastream */

+/* If you pass require_image = TRUE (normal case), you need not check for

+ * a TABLES_ONLY return code; an abbreviated file will cause an error exit.

+ * JPEG_SUSPENDED is only possible if you use a data source module that can

+ * give a suspension return (the stdio source module doesn't).

+ */

+

+/* Main entry points for decompression */

+EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));

+EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,

+					    JSAMPARRAY scanlines,

+					    JDIMENSION max_lines));

+EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));

+

+/* Replaces jpeg_read_scanlines when reading raw downsampled data. */

+EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,

+					   JSAMPIMAGE data,

+					   JDIMENSION max_lines));

+

+/* Additional entry points for buffered-image mode. */

+EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));

+EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,

+				       int scan_number));

+EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));

+EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));

+EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));

+EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));

+/* Return value is one of: */

+/* #define JPEG_SUSPENDED	0    Suspended due to lack of input data */

+#define JPEG_REACHED_SOS	1 /* Reached start of new scan */

+#define JPEG_REACHED_EOI	2 /* Reached end of image */

+#define JPEG_ROW_COMPLETED	3 /* Completed one iMCU row */

+#define JPEG_SCAN_COMPLETED	4 /* Completed last iMCU row of a scan */

+

+/* Precalculate output dimensions for current decompression parameters. */

+EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));

+

+/* Control saving of COM and APPn markers into marker_list. */

+EXTERN(void) jpeg_save_markers

+	JPP((j_decompress_ptr cinfo, int marker_code,

+	     unsigned int length_limit));

+

+/* Install a special processing method for COM or APPn markers. */

+EXTERN(void) jpeg_set_marker_processor

+	JPP((j_decompress_ptr cinfo, int marker_code,

+	     jpeg_marker_parser_method routine));

+

+/* Read or write raw DCT coefficients --- useful for lossless transcoding. */

+EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));

+EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,

+					  jvirt_barray_ptr * coef_arrays));

+EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,

+						j_compress_ptr dstinfo));

+

+/* If you choose to abort compression or decompression before completing

+ * jpeg_finish_(de)compress, then you need to clean up to release memory,

+ * temporary files, etc.  You can just call jpeg_destroy_(de)compress

+ * if you're done with the JPEG object, but if you want to clean it up and

+ * reuse it, call this:

+ */

+EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));

+EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));

+

+/* Generic versions of jpeg_abort and jpeg_destroy that work on either

+ * flavor of JPEG object.  These may be more convenient in some places.

+ */

+EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));

+EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));

+

+/* Default restart-marker-resync procedure for use by data source modules */

+EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,

+					    int desired));

+

+

+/* These marker codes are exported since applications and data source modules

+ * are likely to want to use them.

+ */

+

+#define JPEG_RST0	0xD0	/* RST0 marker code */

+#define JPEG_EOI	0xD9	/* EOI marker code */

+#define JPEG_APP0	0xE0	/* APP0 marker code */

+#define JPEG_COM	0xFE	/* COM marker code */

+

+

+/* If we have a brain-damaged compiler that emits warnings (or worse, errors)

+ * for structure definitions that are never filled in, keep it quiet by

+ * supplying dummy definitions for the various substructures.

+ */

+

+#ifdef INCOMPLETE_TYPES_BROKEN

+#ifndef JPEG_INTERNALS		/* will be defined in jpegint.h */

+struct jvirt_sarray_control { long dummy; };

+struct jvirt_barray_control { long dummy; };

+struct jpeg_comp_master { long dummy; };

+struct jpeg_c_main_controller { long dummy; };

+struct jpeg_c_prep_controller { long dummy; };

+struct jpeg_c_coef_controller { long dummy; };

+struct jpeg_marker_writer { long dummy; };

+struct jpeg_color_converter { long dummy; };

+struct jpeg_downsampler { long dummy; };

+struct jpeg_forward_dct { long dummy; };

+struct jpeg_entropy_encoder { long dummy; };

+struct jpeg_decomp_master { long dummy; };

+struct jpeg_d_main_controller { long dummy; };

+struct jpeg_d_coef_controller { long dummy; };

+struct jpeg_d_post_controller { long dummy; };

+struct jpeg_input_controller { long dummy; };

+struct jpeg_marker_reader { long dummy; };

+struct jpeg_entropy_decoder { long dummy; };

+struct jpeg_inverse_dct { long dummy; };

+struct jpeg_upsampler { long dummy; };

+struct jpeg_color_deconverter { long dummy; };

+struct jpeg_color_quantizer { long dummy; };

+#endif /* JPEG_INTERNALS */

+#endif /* INCOMPLETE_TYPES_BROKEN */

+

+

+/*

+ * The JPEG library modules define JPEG_INTERNALS before including this file.

+ * The internal structure declarations are read only when that is true.

+ * Applications using the library should not include jpegint.h, but may wish

+ * to include jerror.h.

+ */

+

+#ifdef JPEG_INTERNALS

+#include "jpegint.h"		/* fetch private declarations */

+#include "jerror.h"		/* fetch error codes too */

+#endif

+

+#endif /* JPEGLIB_H */

diff --git a/core/include/thirdparties/zlib/zconf.h b/core/include/thirdparties/zlib/zconf.h
new file mode 100644
index 0000000..3a1f969
--- /dev/null
+++ b/core/include/thirdparties/zlib/zconf.h
@@ -0,0 +1,519 @@
+/* zconf.h -- configuration of the zlib compression library

+ * Copyright (C) 1995-2013 Jean-loup Gailly.

+ * For conditions of distribution and use, see copyright notice in zlib.h

+ */

+

+/* @(#) $Id$ */

+

+#ifndef ZCONF_H

+#define ZCONF_H

+

+/*

+ * If you *really* need a unique prefix for all types and library functions,

+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.

+ * Even better than compiling with -DZ_PREFIX would be to use configure to set

+ * this permanently in zconf.h using "./configure --zprefix".

+ */

+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */

+#  define Z_PREFIX_SET

+

+/* all linked symbols */

+#  define _dist_code            z__dist_code

+#  define _length_code          z__length_code

+#  define _tr_align             z__tr_align

+#  define _tr_flush_bits        z__tr_flush_bits

+#  define _tr_flush_block       z__tr_flush_block

+#  define _tr_init              z__tr_init

+#  define _tr_stored_block      z__tr_stored_block

+#  define _tr_tally             z__tr_tally

+#  define adler32               z_adler32

+#  define adler32_combine       z_adler32_combine

+#  define adler32_combine64     z_adler32_combine64

+#  ifndef Z_SOLO

+#    define compress              z_compress

+#    define compress2             z_compress2

+#    define compressBound         z_compressBound

+#  endif

+#  define crc32                 z_crc32

+#  define crc32_combine         z_crc32_combine

+#  define crc32_combine64       z_crc32_combine64

+#  define deflate               z_deflate

+#  define deflateBound          z_deflateBound

+#  define deflateCopy           z_deflateCopy

+#  define deflateEnd            z_deflateEnd

+#  define deflateInit2_         z_deflateInit2_

+#  define deflateInit_          z_deflateInit_

+#  define deflateParams         z_deflateParams

+#  define deflatePending        z_deflatePending

+#  define deflatePrime          z_deflatePrime

+#  define deflateReset          z_deflateReset

+#  define deflateResetKeep      z_deflateResetKeep

+#  define deflateSetDictionary  z_deflateSetDictionary

+#  define deflateSetHeader      z_deflateSetHeader

+#  define deflateTune           z_deflateTune

+#  define deflate_copyright     z_deflate_copyright

+#  define get_crc_table         z_get_crc_table

+#  ifndef Z_SOLO

+#    define gz_error              z_gz_error

+#    define gz_intmax             z_gz_intmax

+#    define gz_strwinerror        z_gz_strwinerror

+#    define gzbuffer              z_gzbuffer

+#    define gzclearerr            z_gzclearerr

+#    define gzclose               z_gzclose

+#    define gzclose_r             z_gzclose_r

+#    define gzclose_w             z_gzclose_w

+#    define gzdirect              z_gzdirect

+#    define gzdopen               z_gzdopen

+#    define gzeof                 z_gzeof

+#    define gzerror               z_gzerror

+#    define gzflush               z_gzflush

+#    define gzgetc                z_gzgetc

+#    define gzgetc_               z_gzgetc_

+#    define gzgets                z_gzgets

+#    define gzoffset              z_gzoffset

+#    define gzoffset64            z_gzoffset64

+#    define gzopen                z_gzopen

+#    define gzopen64              z_gzopen64

+#    ifdef _WIN32

+#      define gzopen_w              z_gzopen_w

+#    endif

+#    define gzprintf              z_gzprintf

+#    define gzvprintf             z_gzvprintf

+#    define gzputc                z_gzputc

+#    define gzputs                z_gzputs

+#    define gzread                z_gzread

+#    define gzrewind              z_gzrewind

+#    define gzseek                z_gzseek

+#    define gzseek64              z_gzseek64

+#    define gzsetparams           z_gzsetparams

+#    define gztell                z_gztell

+#    define gztell64              z_gztell64

+#    define gzungetc              z_gzungetc

+#    define gzwrite               z_gzwrite

+#  endif

+#  define inflate               z_inflate

+#  define inflateBack           z_inflateBack

+#  define inflateBackEnd        z_inflateBackEnd

+#  define inflateBackInit_      z_inflateBackInit_

+#  define inflateCopy           z_inflateCopy

+#  define inflateEnd            z_inflateEnd

+#  define inflateGetHeader      z_inflateGetHeader

+#  define inflateInit2_         z_inflateInit2_

+#  define inflateInit_          z_inflateInit_

+#  define inflateMark           z_inflateMark

+#  define inflatePrime          z_inflatePrime

+#  define inflateReset          z_inflateReset

+#  define inflateReset2         z_inflateReset2

+#  define inflateSetDictionary  z_inflateSetDictionary

+#  define inflateGetDictionary  z_inflateGetDictionary

+#  define inflateSync           z_inflateSync

+#  define inflateSyncPoint      z_inflateSyncPoint

+#  define inflateUndermine      z_inflateUndermine

+#  define inflateResetKeep      z_inflateResetKeep

+#  define inflate_copyright     z_inflate_copyright

+#  define inflate_fast          z_inflate_fast

+#  define inflate_table         z_inflate_table

+#  ifndef Z_SOLO

+#    define uncompress            z_uncompress

+#  endif

+#  define zError                z_zError

+#  ifndef Z_SOLO

+#    define zcalloc               z_zcalloc

+#    define zcfree                z_zcfree

+#  endif

+#  define zlibCompileFlags      z_zlibCompileFlags

+#  define zlibVersion           z_zlibVersion

+

+/* all zlib typedefs in zlib.h and zconf.h */

+#  define Byte                  z_Byte

+#  define Bytef                 z_Bytef

+#  define alloc_func            z_alloc_func

+#  define charf                 z_charf

+#  define free_func             z_free_func

+#  ifndef Z_SOLO

+#    define gzFile                z_gzFile

+#  endif

+#  define gz_header             z_gz_header

+#  define gz_headerp            z_gz_headerp

+#  define in_func               z_in_func

+#  define intf                  z_intf

+#  define out_func              z_out_func

+#  define uInt                  z_uInt

+#  define uIntf                 z_uIntf

+#  define uLong                 z_uLong

+#  define uLongf                z_uLongf

+#  define voidp                 z_voidp

+#  define voidpc                z_voidpc

+#  define voidpf                z_voidpf

+

+/* all zlib structs in zlib.h and zconf.h */

+#  define gz_header_s           z_gz_header_s

+#  define internal_state        z_internal_state

+

+#endif

+

+#if defined(__MSDOS__) && !defined(MSDOS)

+#  define MSDOS

+#endif

+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)

+#  define OS2

+#endif

+#if defined(_WINDOWS) && !defined(WINDOWS)

+#  define WINDOWS

+#endif

+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)

+#  ifndef WIN32

+#    define WIN32

+#  endif

+#endif

+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)

+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)

+#    ifndef SYS16BIT

+#      define SYS16BIT

+#    endif

+#  endif

+#endif

+

+/*

+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more

+ * than 64k bytes at a time (needed on systems with 16-bit int).

+ */

+#ifdef SYS16BIT

+#  define MAXSEG_64K

+#endif

+#ifdef MSDOS

+#  define UNALIGNED_OK

+#endif

+

+#ifdef __STDC_VERSION__

+#  ifndef STDC

+#    define STDC

+#  endif

+#  if __STDC_VERSION__ >= 199901L

+#    ifndef STDC99

+#      define STDC99

+#    endif

+#  endif

+#endif

+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))

+#  define STDC

+#endif

+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))

+#  define STDC

+#endif

+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))

+#  define STDC

+#endif

+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))

+#  define STDC

+#endif

+

+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */

+#  define STDC

+#endif

+

+#ifndef STDC

+#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */

+#    define const       /* note: need a more gentle solution here */

+#  endif

+#endif

+

+#if defined(ZLIB_CONST) && !defined(z_const)

+#  define z_const const

+#else

+#  define z_const

+#endif

+

+/* Some Mac compilers merge all .h files incorrectly: */

+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)

+#  define NO_DUMMY_DECL

+#endif

+

+/* Maximum value for memLevel in deflateInit2 */

+#ifndef MAX_MEM_LEVEL

+#  ifdef MAXSEG_64K

+#    define MAX_MEM_LEVEL 8

+#  else

+#    define MAX_MEM_LEVEL 9

+#  endif

+#endif

+

+/* Maximum value for windowBits in deflateInit2 and inflateInit2.

+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files

+ * created by gzip. (Files created by minigzip can still be extracted by

+ * gzip.)

+ */

+#ifndef MAX_WBITS

+#  define MAX_WBITS   15 /* 32K LZ77 window */

+#endif

+

+/* The memory requirements for deflate are (in bytes):

+            (1 << (windowBits+2)) +  (1 << (memLevel+9))

+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)

+ plus a few kilobytes for small objects. For example, if you want to reduce

+ the default memory requirements from 256K to 128K, compile with

+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"

+ Of course this will generally degrade compression (there's no free lunch).

+

+   The memory requirements for inflate are (in bytes) 1 << windowBits

+ that is, 32K for windowBits=15 (default value) plus a few kilobytes

+ for small objects.

+*/

+

+                        /* Type declarations */

+

+#ifndef OF /* function prototypes */

+#  ifdef STDC

+#    define OF(args)  args

+#  else

+#    define OF(args)  ()

+#  endif

+#endif

+

+#ifndef Z_ARG /* function prototypes for stdarg */

+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)

+#    define Z_ARG(args)  args

+#  else

+#    define Z_ARG(args)  ()

+#  endif

+#endif

+

+/* The following definitions for FAR are needed only for MSDOS mixed

+ * model programming (small or medium model with some far allocations).

+ * This was tested only with MSC; for other MSDOS compilers you may have

+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,

+ * just define FAR to be empty.

+ */

+#ifdef SYS16BIT

+#  if defined(M_I86SM) || defined(M_I86MM)

+     /* MSC small or medium model */

+#    define SMALL_MEDIUM

+#    ifdef _MSC_VER

+#      define FAR _far

+#    else

+#      define FAR far

+#    endif

+#  endif

+#  if (defined(__SMALL__) || defined(__MEDIUM__))

+     /* Turbo C small or medium model */

+#    define SMALL_MEDIUM

+#    ifdef __BORLANDC__

+#      define FAR _far

+#    else

+#      define FAR far

+#    endif

+#  endif

+#endif

+

+#if defined(WINDOWS) || defined(WIN32)

+   /* If building or using zlib as a DLL, define ZLIB_DLL.

+    * This is not mandatory, but it offers a little performance increase.

+    */

+#  ifdef ZLIB_DLL

+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))

+#      ifdef ZLIB_INTERNAL

+#        define ZEXTERN extern __declspec(dllexport)

+#      else

+#        define ZEXTERN extern __declspec(dllimport)

+#      endif

+#    endif

+#  endif  /* ZLIB_DLL */

+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,

+    * define ZLIB_WINAPI.

+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.

+    */

+#  ifdef ZLIB_WINAPI

+#    ifdef FAR

+#      undef FAR

+#    endif

+#    include <windows.h>

+     /* No need for _export, use ZLIB.DEF instead. */

+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */

+#    define ZEXPORT WINAPI

+#    ifdef WIN32

+#      define ZEXPORTVA WINAPIV

+#    else

+#      define ZEXPORTVA FAR CDECL

+#    endif

+#  endif

+#endif

+

+#if defined (__BEOS__)

+#  ifdef ZLIB_DLL

+#    ifdef ZLIB_INTERNAL

+#      define ZEXPORT   __declspec(dllexport)

+#      define ZEXPORTVA __declspec(dllexport)

+#    else

+#      define ZEXPORT   __declspec(dllimport)

+#      define ZEXPORTVA __declspec(dllimport)

+#    endif

+#  endif

+#endif

+

+#ifndef ZEXTERN

+#  define ZEXTERN extern

+#endif

+#ifndef ZEXPORT

+#  define ZEXPORT

+#endif

+#ifndef ZEXPORTVA

+#  define ZEXPORTVA

+#endif

+

+#ifndef FAR

+#  define FAR

+#endif

+

+#if !defined(__MACTYPES__)

+typedef unsigned char  Byte;  /* 8 bits */

+#endif

+typedef unsigned int   uInt;  /* 16 bits or more */

+typedef unsigned long  uLong; /* 32 bits or more */

+

+#ifdef SMALL_MEDIUM

+   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */

+#  define Bytef Byte FAR

+#else

+   typedef Byte  FAR Bytef;

+#endif

+typedef char  FAR charf;

+typedef int   FAR intf;

+typedef uInt  FAR uIntf;

+typedef uLong FAR uLongf;

+

+#ifdef STDC

+   typedef void const *voidpc;

+   typedef void FAR   *voidpf;

+   typedef void       *voidp;

+#else

+   typedef Byte const *voidpc;

+   typedef Byte FAR   *voidpf;

+   typedef Byte       *voidp;

+#endif

+

+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)

+#  include <limits.h>

+#  if (UINT_MAX == 0xffffffffUL)

+#    define Z_U4 unsigned

+#  elif (ULONG_MAX == 0xffffffffUL)

+#    define Z_U4 unsigned long

+#  elif (USHRT_MAX == 0xffffffffUL)

+#    define Z_U4 unsigned short

+#  endif

+#endif

+

+#ifdef Z_U4

+   typedef Z_U4 z_crc_t;

+#else

+   typedef unsigned long z_crc_t;

+#endif

+

+#if 0				/* Sunliang.Liu 20100908 sync the config to the old revision, otherwise, evc compile failed. */

+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */

+#  define Z_HAVE_UNISTD_H

+#endif

+#endif /* 0 */

+

+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */

+#  define Z_HAVE_STDARG_H

+#endif

+

+#if 0				/* Sunliang.Liu 20100908 sync the config to the old revision, otherwise, evc compile failed. */

+#ifdef STDC

+#  ifndef Z_SOLO

+#    include <sys/types.h>      /* for off_t */

+#  endif

+#endif

+#endif /* 0 */

+

+#if defined(STDC) || defined(Z_HAVE_STDARG_H)

+#  ifndef Z_SOLO

+#    include <stdarg.h>         /* for va_list */

+#  endif

+#endif

+

+#ifdef _WIN32

+#  ifndef Z_SOLO

+#    include <stddef.h>         /* for wchar_t */

+#  endif

+#endif

+

+#if 0				/* Sunliang.Liu 20100908 sync the config to the old revision, otherwise, evc compile failed. */

+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and

+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even

+ * though the former does not conform to the LFS document), but considering

+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as

+ * equivalently requesting no 64-bit operations

+ */

+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1

+#  undef _LARGEFILE64_SOURCE

+#endif

+#endif /* 0 */

+

+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)

+#  define Z_HAVE_UNISTD_H

+#endif

+#ifndef Z_SOLO

+#if 0				/* Sunliang.Liu 20100908 sync the config to the old revision, otherwise, evc compile failed. */

+#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)

+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */

+#    ifdef VMS

+#      include <unixio.h>       /* for off_t */

+#    endif

+#    ifndef z_off_t

+#      define z_off_t off_t

+#    endif

+#  endif

+#endif /* 0 */

+#endif

+

+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0

+#  define Z_LFS64

+#endif

+

+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)

+#  define Z_LARGE64

+#endif

+

+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)

+#  define Z_WANT64

+#endif

+

+#if !defined(SEEK_SET) && !defined(Z_SOLO)

+#  define SEEK_SET        0       /* Seek from beginning of file.  */

+#  define SEEK_CUR        1       /* Seek from current position.  */

+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */

+#endif

+

+#ifndef z_off_t

+#  define z_off_t long

+#endif

+

+#if !defined(_WIN32) && defined(Z_LARGE64)

+#  define z_off64_t off64_t

+#else

+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)

+#    define z_off64_t __int64

+#  else

+#    define z_off64_t z_off_t

+#  endif

+#endif

+

+/* MVS linker does not support external names larger than 8 bytes */

+#if defined(__MVS__)

+  #pragma map(deflateInit_,"DEIN")

+  #pragma map(deflateInit2_,"DEIN2")

+  #pragma map(deflateEnd,"DEEND")

+  #pragma map(deflateBound,"DEBND")

+  #pragma map(inflateInit_,"ININ")

+  #pragma map(inflateInit2_,"ININ2")

+  #pragma map(inflateEnd,"INEND")

+  #pragma map(inflateSync,"INSY")

+  #pragma map(inflateSetDictionary,"INSEDI")

+  #pragma map(compressBound,"CMBND")

+  #pragma map(inflate_table,"INTABL")

+  #pragma map(inflate_fast,"INFA")

+  #pragma map(inflate_copyright,"INCOPY")

+#endif

+

+#endif /* ZCONF_H */

diff --git a/core/include/thirdparties/zlib/zlib.h b/core/include/thirdparties/zlib/zlib.h
new file mode 100644
index 0000000..5e068c4
--- /dev/null
+++ b/core/include/thirdparties/zlib/zlib.h
@@ -0,0 +1,1828 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library

+  version 1.2.8, April 28th, 2013

+

+  Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler

+

+  This software is provided 'as-is', without any express or implied

+  warranty.  In no event will the authors be held liable for any damages

+  arising from the use of this software.

+

+  Permission is granted to anyone to use this software for any purpose,

+  including commercial applications, and to alter it and redistribute it

+  freely, subject to the following restrictions:

+

+  1. The origin of this software must not be misrepresented; you must not

+     claim that you wrote the original software. If you use this software

+     in a product, an acknowledgment in the product documentation would be

+     appreciated but is not required.

+  2. Altered source versions must be plainly marked as such, and must not be

+     misrepresented as being the original software.

+  3. This notice may not be removed or altered from any source distribution.

+

+  Jean-loup Gailly        Mark Adler

+  jloup@gzip.org          madler@alumni.caltech.edu

+

+

+  The data format used by the zlib library is described by RFCs (Request for

+  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950

+  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).

+*/

+

+#ifndef ZLIB_H

+#define ZLIB_H

+

+#define deflate_copyright FPDFAPI_deflate_copyright

+#define adler32 FPDFAPI_adler32

+#define compress2 FPDFAPI_compress2

+#define compress FPDFAPI_compress

+#define compressBound FPDFAPI_compressBound

+#define get_crc_table FPDFAPI_get_crc_table

+#define crc32 FPDFAPI_crc32

+#define deflateInit_ FPDFAPI_deflateInit_

+#define deflateInit2_ FPDFAPI_deflateInit2_

+#define deflateSetDictionary FPDFAPI_deflateSetDictionary

+#define deflateReset FPDFAPI_deflateReset

+#define deflatePrime FPDFAPI_deflatePrime

+#define deflateParams FPDFAPI_deflateParams

+#define deflateBound FPDFAPI_deflateBound

+#define deflateSetHeader FPDFAPI_deflateSetHeader

+#define deflateTune FPDFAPI_deflateTune

+#define deflate FPDFAPI_deflate

+#define deflateEnd FPDFAPI_deflateEnd

+#define deflateCopy FPDFAPI_deflateCopy

+#define inflateBackInit_ FPDFAPI_inflateBackInit_

+#define inflateBack FPDFAPI_inflateBack

+#define inflateBackEnd FPDFAPI_inflateBackEnd

+#define inflateReset FPDFAPI_inflateReset

+#define inflateInit2_ FPDFAPI_inflateInit2_

+#define inflateInit_ FPDFAPI_inflateInit_

+#define inflate FPDFAPI_inflate

+#define inflateEnd FPDFAPI_inflateEnd

+#define inflateSetDictionary FPDFAPI_inflateSetDictionary

+#define inflateSync FPDFAPI_inflateSync

+#define inflateSyncPoint FPDFAPI_inflateSyncPoint

+#define inflateCopy FPDFAPI_inflateCopy

+#define uncompress FPDFAPI_uncompress

+#define zlibVersion FPDFAPI_zlibVersion

+#define zlibCompileFlags FPDFAPI_zlibCompileFlags

+#define zError FPDFAPI_zError

+#define z_errmsg FPDFAPI_z_errmsg

+#define zcfree FPDFAPI_zcfree

+#define zcalloc FPDFAPI_zcalloc

+#define inflate_fast FPDFAPI_inflate_fast

+#define inflate_table FPDFAPI_inflate_table

+#define inflate_copyright FPDFAPI_inflate_copyright

+#define _length_code FPDFAPI_length_code

+#define _tr_flush_block FPDFAPI_tr_flush_block

+#define _dist_code FPDFAPI_dist_code

+#define _tr_stored_block FPDFAPI_tr_stored_block

+#define _tr_init FPDFAPI_tr_init

+#define _tr_align FPDFAPI_tr_align

+#define _tr_tally FPDFAPI_tr_tally

+#define adler32_combine FPDFAPI_adler32_combine

+#define inflatePrime FPDFAPI_inflatePrime

+#define inflateGetHeader FPDFAPI_inflateGetHeader

+#define crc32_combine FPDFAPI_crc32_combine

+#define inflateReset2 FPDFAPI_inflateReset2

+#define inflateUndermine FPDFAPI_inflateUndermine

+#define inflateMark FPDFAPI_inflateMark

+#define adler32_combine64 FPDFAPI_adler32_combine64

+

+#include "zconf.h"

+

+/* Sunliang.Liu 20100908 sync the config to the old revision. NO_GZIP */

+#define NO_GZIP		/* XYQ */

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#define ZLIB_VERSION "1.2.8"

+#define ZLIB_VERNUM 0x1280

+#define ZLIB_VER_MAJOR 1

+#define ZLIB_VER_MINOR 2

+#define ZLIB_VER_REVISION 8

+#define ZLIB_VER_SUBREVISION 0

+

+/*

+    The 'zlib' compression library provides in-memory compression and

+  decompression functions, including integrity checks of the uncompressed data.

+  This version of the library supports only one compression method (deflation)

+  but other algorithms will be added later and will have the same stream

+  interface.

+

+    Compression can be done in a single step if the buffers are large enough,

+  or can be done by repeated calls of the compression function.  In the latter

+  case, the application must provide more input and/or consume the output

+  (providing more output space) before each call.

+

+    The compressed data format used by default by the in-memory functions is

+  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped

+  around a deflate stream, which is itself documented in RFC 1951.

+

+    The library also supports reading and writing files in gzip (.gz) format

+  with an interface similar to that of stdio using the functions that start

+  with "gz".  The gzip format is different from the zlib format.  gzip is a

+  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.

+

+    This library can optionally read and write gzip streams in memory as well.

+

+    The zlib format was designed to be compact and fast for use in memory

+  and on communications channels.  The gzip format was designed for single-

+  file compression on file systems, has a larger header than zlib to maintain

+  directory information, and uses a different, slower check method than zlib.

+

+    The library does not install any signal handler.  The decoder checks

+  the consistency of the compressed data, so the library should never crash

+  even in case of corrupted input.

+*/

+

+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));

+typedef void   (*free_func)  OF((voidpf opaque, voidpf address));

+

+struct internal_state;

+

+typedef struct z_stream_s {

+    z_const Bytef *next_in;     /* next input byte */

+    uInt     avail_in;  /* number of bytes available at next_in */

+    uLong    total_in;  /* total number of input bytes read so far */

+

+    Bytef    *next_out; /* next output byte should be put there */

+    uInt     avail_out; /* remaining free space at next_out */

+    uLong    total_out; /* total number of bytes output so far */

+

+    z_const char *msg;  /* last error message, NULL if no error */

+    struct internal_state FAR *state; /* not visible by applications */

+

+    alloc_func zalloc;  /* used to allocate the internal state */

+    free_func  zfree;   /* used to free the internal state */

+    voidpf     opaque;  /* private data object passed to zalloc and zfree */

+

+    int     data_type;  /* best guess about the data type: binary or text */

+    uLong   adler;      /* adler32 value of the uncompressed data */

+    uLong   reserved;   /* reserved for future use */

+} z_stream;

+

+typedef z_stream FAR *z_streamp;

+

+/*

+     gzip header information passed to and from zlib routines.  See RFC 1952

+  for more details on the meanings of these fields.

+*/

+typedef struct gz_header_s {

+    int     text;       /* true if compressed data believed to be text */

+    uLong   time;       /* modification time */

+    int     xflags;     /* extra flags (not used when writing a gzip file) */

+    int     os;         /* operating system */

+    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */

+    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */

+    uInt    extra_max;  /* space at extra (only when reading header) */

+    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */

+    uInt    name_max;   /* space at name (only when reading header) */

+    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */

+    uInt    comm_max;   /* space at comment (only when reading header) */

+    int     hcrc;       /* true if there was or will be a header crc */

+    int     done;       /* true when done reading gzip header (not used

+                           when writing a gzip file) */

+} gz_header;

+

+typedef gz_header FAR *gz_headerp;

+

+/*

+     The application must update next_in and avail_in when avail_in has dropped

+   to zero.  It must update next_out and avail_out when avail_out has dropped

+   to zero.  The application must initialize zalloc, zfree and opaque before

+   calling the init function.  All other fields are set by the compression

+   library and must not be updated by the application.

+

+     The opaque value provided by the application will be passed as the first

+   parameter for calls of zalloc and zfree.  This can be useful for custom

+   memory management.  The compression library attaches no meaning to the

+   opaque value.

+

+     zalloc must return Z_NULL if there is not enough memory for the object.

+   If zlib is used in a multi-threaded application, zalloc and zfree must be

+   thread safe.

+

+     On 16-bit systems, the functions zalloc and zfree must be able to allocate

+   exactly 65536 bytes, but will not be required to allocate more than this if

+   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers

+   returned by zalloc for objects of exactly 65536 bytes *must* have their

+   offset normalized to zero.  The default allocation function provided by this

+   library ensures this (see zutil.c).  To reduce memory requirements and avoid

+   any allocation of 64K objects, at the expense of compression ratio, compile

+   the library with -DMAX_WBITS=14 (see zconf.h).

+

+     The fields total_in and total_out can be used for statistics or progress

+   reports.  After compression, total_in holds the total size of the

+   uncompressed data and may be saved for use in the decompressor (particularly

+   if the decompressor wants to decompress everything in a single step).

+*/

+

+                        /* constants */

+

+#define Z_NO_FLUSH      0

+#define Z_PARTIAL_FLUSH 1

+#define Z_SYNC_FLUSH    2

+#define Z_FULL_FLUSH    3

+#define Z_FINISH        4

+#define Z_BLOCK         5

+#define Z_TREES         6

+/* Allowed flush values; see deflate() and inflate() below for details */

+

+#define Z_OK            0

+#define Z_STREAM_END    1

+#define Z_NEED_DICT     2

+#define Z_ERRNO        (-1)

+#define Z_STREAM_ERROR (-2)

+#define Z_DATA_ERROR   (-3)

+#define Z_MEM_ERROR    (-4)

+#define Z_BUF_ERROR    (-5)

+#define Z_VERSION_ERROR (-6)

+/* Return codes for the compression/decompression functions. Negative values

+ * are errors, positive values are used for special but normal events.

+ */

+

+#define Z_NO_COMPRESSION         0

+#define Z_BEST_SPEED             1

+#define Z_BEST_COMPRESSION       9

+#define Z_DEFAULT_COMPRESSION  (-1)

+/* compression levels */

+

+#define Z_FILTERED            1

+#define Z_HUFFMAN_ONLY        2

+#define Z_RLE                 3

+#define Z_FIXED               4

+#define Z_DEFAULT_STRATEGY    0

+/* compression strategy; see deflateInit2() below for details */

+

+#define Z_BINARY   0

+#define Z_TEXT     1

+#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */

+#define Z_UNKNOWN  2

+/* Possible values of the data_type field (though see inflate()) */

+

+#define Z_DEFLATED   8

+/* The deflate compression method (the only one supported in this version) */

+

+#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */

+

+#define zlib_version zlibVersion()

+/* for compatibility with versions < 1.0.2 */

+

+

+                        /* basic functions */

+

+ZEXTERN const char * ZEXPORT zlibVersion OF((void));

+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.

+   If the first character differs, the library code actually used is not

+   compatible with the zlib.h header file used by the application.  This check

+   is automatically made by deflateInit and inflateInit.

+ */

+

+/*

+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));

+

+     Initializes the internal stream state for compression.  The fields

+   zalloc, zfree and opaque must be initialized before by the caller.  If

+   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default

+   allocation functions.

+

+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:

+   1 gives best speed, 9 gives best compression, 0 gives no compression at all

+   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION

+   requests a default compromise between speed and compression (currently

+   equivalent to level 6).

+

+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough

+   memory, Z_STREAM_ERROR if level is not a valid compression level, or

+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible

+   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null

+   if there is no error message.  deflateInit does not perform any compression:

+   this will be done by deflate().

+*/

+

+

+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));

+/*

+    deflate compresses as much data as possible, and stops when the input

+  buffer becomes empty or the output buffer becomes full.  It may introduce

+  some output latency (reading input without producing any output) except when

+  forced to flush.

+

+    The detailed semantics are as follows.  deflate performs one or both of the

+  following actions:

+

+  - Compress more input starting at next_in and update next_in and avail_in

+    accordingly.  If not all input can be processed (because there is not

+    enough room in the output buffer), next_in and avail_in are updated and

+    processing will resume at this point for the next call of deflate().

+

+  - Provide more output starting at next_out and update next_out and avail_out

+    accordingly.  This action is forced if the parameter flush is non zero.

+    Forcing flush frequently degrades the compression ratio, so this parameter

+    should be set only when necessary (in interactive applications).  Some

+    output may be provided even if flush is not set.

+

+    Before the call of deflate(), the application should ensure that at least

+  one of the actions is possible, by providing more input and/or consuming more

+  output, and updating avail_in or avail_out accordingly; avail_out should

+  never be zero before the call.  The application can consume the compressed

+  output when it wants, for example when the output buffer is full (avail_out

+  == 0), or after each call of deflate().  If deflate returns Z_OK and with

+  zero avail_out, it must be called again after making room in the output

+  buffer because there might be more output pending.

+

+    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to

+  decide how much data to accumulate before producing output, in order to

+  maximize compression.

+

+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is

+  flushed to the output buffer and the output is aligned on a byte boundary, so

+  that the decompressor can get all input data available so far.  (In

+  particular avail_in is zero after the call if enough output space has been

+  provided before the call.) Flushing may degrade compression for some

+  compression algorithms and so it should be used only when necessary.  This

+  completes the current deflate block and follows it with an empty stored block

+  that is three bits plus filler bits to the next byte, followed by four bytes

+  (00 00 ff ff).

+

+    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the

+  output buffer, but the output is not aligned to a byte boundary.  All of the

+  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.

+  This completes the current deflate block and follows it with an empty fixed

+  codes block that is 10 bits long.  This assures that enough bytes are output

+  in order for the decompressor to finish the block before the empty fixed code

+  block.

+

+    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as

+  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to

+  seven bits of the current block are held to be written as the next byte after

+  the next deflate block is completed.  In this case, the decompressor may not

+  be provided enough bits at this point in order to complete decompression of

+  the data provided so far to the compressor.  It may need to wait for the next

+  block to be emitted.  This is for advanced applications that need to control

+  the emission of deflate blocks.

+

+    If flush is set to Z_FULL_FLUSH, all output is flushed as with

+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can

+  restart from this point if previous compressed data has been damaged or if

+  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade

+  compression.

+

+    If deflate returns with avail_out == 0, this function must be called again

+  with the same value of the flush parameter and more output space (updated

+  avail_out), until the flush is complete (deflate returns with non-zero

+  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that

+  avail_out is greater than six to avoid repeated flush markers due to

+  avail_out == 0 on return.

+

+    If the parameter flush is set to Z_FINISH, pending input is processed,

+  pending output is flushed and deflate returns with Z_STREAM_END if there was

+  enough output space; if deflate returns with Z_OK, this function must be

+  called again with Z_FINISH and more output space (updated avail_out) but no

+  more input data, until it returns with Z_STREAM_END or an error.  After

+  deflate has returned Z_STREAM_END, the only possible operations on the stream

+  are deflateReset or deflateEnd.

+

+    Z_FINISH can be used immediately after deflateInit if all the compression

+  is to be done in a single step.  In this case, avail_out must be at least the

+  value returned by deflateBound (see below).  Then deflate is guaranteed to

+  return Z_STREAM_END.  If not enough output space is provided, deflate will

+  not return Z_STREAM_END, and it must be called again as described above.

+

+    deflate() sets strm->adler to the adler32 checksum of all input read

+  so far (that is, total_in bytes).

+

+    deflate() may update strm->data_type if it can make a good guess about

+  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered

+  binary.  This field is only for information purposes and does not affect the

+  compression algorithm in any manner.

+

+    deflate() returns Z_OK if some progress has been made (more input

+  processed or more output produced), Z_STREAM_END if all input has been

+  consumed and all output has been produced (only when flush is set to

+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example

+  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible

+  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not

+  fatal, and deflate() can be called again with more input and more output

+  space to continue compressing.

+*/

+

+

+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));

+/*

+     All dynamically allocated data structures for this stream are freed.

+   This function discards any unprocessed input and does not flush any pending

+   output.

+

+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the

+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed

+   prematurely (some input or output was discarded).  In the error case, msg

+   may be set but then points to a static string (which must not be

+   deallocated).

+*/

+

+

+/*

+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));

+

+     Initializes the internal stream state for decompression.  The fields

+   next_in, avail_in, zalloc, zfree and opaque must be initialized before by

+   the caller.  If next_in is not Z_NULL and avail_in is large enough (the

+   exact value depends on the compression method), inflateInit determines the

+   compression method from the zlib header and allocates all data structures

+   accordingly; otherwise the allocation will be deferred to the first call of

+   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to

+   use default allocation functions.

+

+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough

+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the

+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are

+   invalid, such as a null pointer to the structure.  msg is set to null if

+   there is no error message.  inflateInit does not perform any decompression

+   apart from possibly reading the zlib header if present: actual decompression

+   will be done by inflate().  (So next_in and avail_in may be modified, but

+   next_out and avail_out are unused and unchanged.) The current implementation

+   of inflateInit() does not process any header information -- that is deferred

+   until inflate() is called.

+*/

+

+

+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));

+/*

+    inflate decompresses as much data as possible, and stops when the input

+  buffer becomes empty or the output buffer becomes full.  It may introduce

+  some output latency (reading input without producing any output) except when

+  forced to flush.

+

+  The detailed semantics are as follows.  inflate performs one or both of the

+  following actions:

+

+  - Decompress more input starting at next_in and update next_in and avail_in

+    accordingly.  If not all input can be processed (because there is not

+    enough room in the output buffer), next_in is updated and processing will

+    resume at this point for the next call of inflate().

+

+  - Provide more output starting at next_out and update next_out and avail_out

+    accordingly.  inflate() provides as much output as possible, until there is

+    no more input data or no more space in the output buffer (see below about

+    the flush parameter).

+

+    Before the call of inflate(), the application should ensure that at least

+  one of the actions is possible, by providing more input and/or consuming more

+  output, and updating the next_* and avail_* values accordingly.  The

+  application can consume the uncompressed output when it wants, for example

+  when the output buffer is full (avail_out == 0), or after each call of

+  inflate().  If inflate returns Z_OK and with zero avail_out, it must be

+  called again after making room in the output buffer because there might be

+  more output pending.

+

+    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,

+  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much

+  output as possible to the output buffer.  Z_BLOCK requests that inflate()

+  stop if and when it gets to the next deflate block boundary.  When decoding

+  the zlib or gzip format, this will cause inflate() to return immediately

+  after the header and before the first block.  When doing a raw inflate,

+  inflate() will go ahead and process the first block, and will return when it

+  gets to the end of that block, or when it runs out of data.

+

+    The Z_BLOCK option assists in appending to or combining deflate streams.

+  Also to assist in this, on return inflate() will set strm->data_type to the

+  number of unused bits in the last byte taken from strm->next_in, plus 64 if

+  inflate() is currently decoding the last block in the deflate stream, plus

+  128 if inflate() returned immediately after decoding an end-of-block code or

+  decoding the complete header up to just before the first byte of the deflate

+  stream.  The end-of-block will not be indicated until all of the uncompressed

+  data from that block has been written to strm->next_out.  The number of

+  unused bits may in general be greater than seven, except when bit 7 of

+  data_type is set, in which case the number of unused bits will be less than

+  eight.  data_type is set as noted here every time inflate() returns for all

+  flush options, and so can be used to determine the amount of currently

+  consumed input in bits.

+

+    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the

+  end of each deflate block header is reached, before any actual data in that

+  block is decoded.  This allows the caller to determine the length of the

+  deflate block header for later use in random access within a deflate block.

+  256 is added to the value of strm->data_type when inflate() returns

+  immediately after reaching the end of the deflate block header.

+

+    inflate() should normally be called until it returns Z_STREAM_END or an

+  error.  However if all decompression is to be performed in a single step (a

+  single call of inflate), the parameter flush should be set to Z_FINISH.  In

+  this case all pending input is processed and all pending output is flushed;

+  avail_out must be large enough to hold all of the uncompressed data for the

+  operation to complete.  (The size of the uncompressed data may have been

+  saved by the compressor for this purpose.) The use of Z_FINISH is not

+  required to perform an inflation in one step.  However it may be used to

+  inform inflate that a faster approach can be used for the single inflate()

+  call.  Z_FINISH also informs inflate to not maintain a sliding window if the

+  stream completes, which reduces inflate's memory footprint.  If the stream

+  does not complete, either because not all of the stream is provided or not

+  enough output space is provided, then a sliding window will be allocated and

+  inflate() can be called again to continue the operation as if Z_NO_FLUSH had

+  been used.

+

+     In this implementation, inflate() always flushes as much output as

+  possible to the output buffer, and always uses the faster approach on the

+  first call.  So the effects of the flush parameter in this implementation are

+  on the return value of inflate() as noted below, when inflate() returns early

+  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of

+  memory for a sliding window when Z_FINISH is used.

+

+     If a preset dictionary is needed after this call (see inflateSetDictionary

+  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary

+  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets

+  strm->adler to the Adler-32 checksum of all output produced so far (that is,

+  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described

+  below.  At the end of the stream, inflate() checks that its computed adler32

+  checksum is equal to that saved by the compressor and returns Z_STREAM_END

+  only if the checksum is correct.

+

+    inflate() can decompress and check either zlib-wrapped or gzip-wrapped

+  deflate data.  The header type is detected automatically, if requested when

+  initializing with inflateInit2().  Any information contained in the gzip

+  header is not retained, so applications that need that information should

+  instead use raw inflate, see inflateInit2() below, or inflateBack() and

+  perform their own processing of the gzip header and trailer.  When processing

+  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output

+  producted so far.  The CRC-32 is checked against the gzip trailer.

+

+    inflate() returns Z_OK if some progress has been made (more input processed

+  or more output produced), Z_STREAM_END if the end of the compressed data has

+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a

+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was

+  corrupted (input stream not conforming to the zlib format or incorrect check

+  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example

+  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,

+  Z_BUF_ERROR if no progress is possible or if there was not enough room in the

+  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and

+  inflate() can be called again with more input and more output space to

+  continue decompressing.  If Z_DATA_ERROR is returned, the application may

+  then call inflateSync() to look for a good compression block if a partial

+  recovery of the data is desired.

+*/

+

+

+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));

+/*

+     All dynamically allocated data structures for this stream are freed.

+   This function discards any unprocessed input and does not flush any pending

+   output.

+

+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state

+   was inconsistent.  In the error case, msg may be set but then points to a

+   static string (which must not be deallocated).

+*/

+

+

+                        /* Advanced functions */

+

+/*

+    The following functions are needed only in some special applications.

+*/

+

+/*

+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,

+                                     int  level,

+                                     int  method,

+                                     int  windowBits,

+                                     int  memLevel,

+                                     int  strategy));

+

+     This is another version of deflateInit with more compression options.  The

+   fields next_in, zalloc, zfree and opaque must be initialized before by the

+   caller.

+

+     The method parameter is the compression method.  It must be Z_DEFLATED in

+   this version of the library.

+

+     The windowBits parameter is the base two logarithm of the window size

+   (the size of the history buffer).  It should be in the range 8..15 for this

+   version of the library.  Larger values of this parameter result in better

+   compression at the expense of memory usage.  The default value is 15 if

+   deflateInit is used instead.

+

+     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits

+   determines the window size.  deflate() will then generate raw deflate data

+   with no zlib header or trailer, and will not compute an adler32 check value.

+

+     windowBits can also be greater than 15 for optional gzip encoding.  Add

+   16 to windowBits to write a simple gzip header and trailer around the

+   compressed data instead of a zlib wrapper.  The gzip header will have no

+   file name, no extra data, no comment, no modification time (set to zero), no

+   header crc, and the operating system will be set to 255 (unknown).  If a

+   gzip stream is being written, strm->adler is a crc32 instead of an adler32.

+

+     The memLevel parameter specifies how much memory should be allocated

+   for the internal compression state.  memLevel=1 uses minimum memory but is

+   slow and reduces compression ratio; memLevel=9 uses maximum memory for

+   optimal speed.  The default value is 8.  See zconf.h for total memory usage

+   as a function of windowBits and memLevel.

+

+     The strategy parameter is used to tune the compression algorithm.  Use the

+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a

+   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no

+   string match), or Z_RLE to limit match distances to one (run-length

+   encoding).  Filtered data consists mostly of small values with a somewhat

+   random distribution.  In this case, the compression algorithm is tuned to

+   compress them better.  The effect of Z_FILTERED is to force more Huffman

+   coding and less string matching; it is somewhat intermediate between

+   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as

+   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The

+   strategy parameter only affects the compression ratio but not the

+   correctness of the compressed output even if it is not set appropriately.

+   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler

+   decoder for special applications.

+

+     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough

+   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid

+   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is

+   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is

+   set to null if there is no error message.  deflateInit2 does not perform any

+   compression: this will be done by deflate().

+*/

+

+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,

+                                             const Bytef *dictionary,

+                                             uInt  dictLength));

+/*

+     Initializes the compression dictionary from the given byte sequence

+   without producing any compressed output.  When using the zlib format, this

+   function must be called immediately after deflateInit, deflateInit2 or

+   deflateReset, and before any call of deflate.  When doing raw deflate, this

+   function must be called either before any call of deflate, or immediately

+   after the completion of a deflate block, i.e. after all input has been

+   consumed and all output has been delivered when using any of the flush

+   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The

+   compressor and decompressor must use exactly the same dictionary (see

+   inflateSetDictionary).

+

+     The dictionary should consist of strings (byte sequences) that are likely

+   to be encountered later in the data to be compressed, with the most commonly

+   used strings preferably put towards the end of the dictionary.  Using a

+   dictionary is most useful when the data to be compressed is short and can be

+   predicted with good accuracy; the data can then be compressed better than

+   with the default empty dictionary.

+

+     Depending on the size of the compression data structures selected by

+   deflateInit or deflateInit2, a part of the dictionary may in effect be

+   discarded, for example if the dictionary is larger than the window size

+   provided in deflateInit or deflateInit2.  Thus the strings most likely to be

+   useful should be put at the end of the dictionary, not at the front.  In

+   addition, the current implementation of deflate will use at most the window

+   size minus 262 bytes of the provided dictionary.

+

+     Upon return of this function, strm->adler is set to the adler32 value

+   of the dictionary; the decompressor may later use this value to determine

+   which dictionary has been used by the compressor.  (The adler32 value

+   applies to the whole dictionary even if only a subset of the dictionary is

+   actually used by the compressor.) If a raw deflate was requested, then the

+   adler32 value is not computed and strm->adler is not set.

+

+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a

+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is

+   inconsistent (for example if deflate has already been called for this stream

+   or if not at a block boundary for raw deflate).  deflateSetDictionary does

+   not perform any compression: this will be done by deflate().

+*/

+

+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,

+                                    z_streamp source));

+/*

+     Sets the destination stream as a complete copy of the source stream.

+

+     This function can be useful when several compression strategies will be

+   tried, for example when there are several ways of pre-processing the input

+   data with a filter.  The streams that will be discarded should then be freed

+   by calling deflateEnd.  Note that deflateCopy duplicates the internal

+   compression state which can be quite large, so this strategy is slow and can

+   consume lots of memory.

+

+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not

+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent

+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and

+   destination.

+*/

+

+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));

+/*

+     This function is equivalent to deflateEnd followed by deflateInit,

+   but does not free and reallocate all the internal compression state.  The

+   stream will keep the same compression level and any other attributes that

+   may have been set by deflateInit2.

+

+     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source

+   stream state was inconsistent (such as zalloc or state being Z_NULL).

+*/

+

+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,

+                                      int level,

+                                      int strategy));

+/*

+     Dynamically update the compression level and compression strategy.  The

+   interpretation of level and strategy is as in deflateInit2.  This can be

+   used to switch between compression and straight copy of the input data, or

+   to switch to a different kind of input data requiring a different strategy.

+   If the compression level is changed, the input available so far is

+   compressed with the old level (and may be flushed); the new level will take

+   effect only at the next call of deflate().

+

+     Before the call of deflateParams, the stream state must be set as for

+   a call of deflate(), since the currently available input may have to be

+   compressed and flushed.  In particular, strm->avail_out must be non-zero.

+

+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source

+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if

+   strm->avail_out was zero.

+*/

+

+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,

+                                    int good_length,

+                                    int max_lazy,

+                                    int nice_length,

+                                    int max_chain));

+/*

+     Fine tune deflate's internal compression parameters.  This should only be

+   used by someone who understands the algorithm used by zlib's deflate for

+   searching for the best matching string, and even then only by the most

+   fanatic optimizer trying to squeeze out the last compressed bit for their

+   specific input data.  Read the deflate.c source code for the meaning of the

+   max_lazy, good_length, nice_length, and max_chain parameters.

+

+     deflateTune() can be called after deflateInit() or deflateInit2(), and

+   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.

+ */

+

+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,

+                                       uLong sourceLen));

+/*

+     deflateBound() returns an upper bound on the compressed size after

+   deflation of sourceLen bytes.  It must be called after deflateInit() or

+   deflateInit2(), and after deflateSetHeader(), if used.  This would be used

+   to allocate an output buffer for deflation in a single pass, and so would be

+   called before deflate().  If that first deflate() call is provided the

+   sourceLen input bytes, an output buffer allocated to the size returned by

+   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed

+   to return Z_STREAM_END.  Note that it is possible for the compressed size to

+   be larger than the value returned by deflateBound() if flush options other

+   than Z_FINISH or Z_NO_FLUSH are used.

+*/

+

+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,

+                                       unsigned *pending,

+                                       int *bits));

+/*

+     deflatePending() returns the number of bytes and bits of output that have

+   been generated, but not yet provided in the available output.  The bytes not

+   provided would be due to the available output space having being consumed.

+   The number of bits of output not provided are between 0 and 7, where they

+   await more bits to join them in order to fill out a full byte.  If pending

+   or bits are Z_NULL, then those values are not set.

+

+     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source

+   stream state was inconsistent.

+ */

+

+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,

+                                     int bits,

+                                     int value));

+/*

+     deflatePrime() inserts bits in the deflate output stream.  The intent

+   is that this function is used to start off the deflate output with the bits

+   leftover from a previous deflate stream when appending to it.  As such, this

+   function can only be used for raw deflate, and must be used before the first

+   deflate() call after a deflateInit2() or deflateReset().  bits must be less

+   than or equal to 16, and that many of the least significant bits of value

+   will be inserted in the output.

+

+     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough

+   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the

+   source stream state was inconsistent.

+*/

+

+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,

+                                         gz_headerp head));

+/*

+     deflateSetHeader() provides gzip header information for when a gzip

+   stream is requested by deflateInit2().  deflateSetHeader() may be called

+   after deflateInit2() or deflateReset() and before the first call of

+   deflate().  The text, time, os, extra field, name, and comment information

+   in the provided gz_header structure are written to the gzip header (xflag is

+   ignored -- the extra flags are set according to the compression level).  The

+   caller must assure that, if not Z_NULL, name and comment are terminated with

+   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are

+   available there.  If hcrc is true, a gzip header crc is included.  Note that

+   the current versions of the command-line version of gzip (up through version

+   1.3.x) do not support header crc's, and will report that it is a "multi-part

+   gzip file" and give up.

+

+     If deflateSetHeader is not used, the default gzip header has text false,

+   the time set to zero, and os set to 255, with no extra, name, or comment

+   fields.  The gzip header is returned to the default state by deflateReset().

+

+     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source

+   stream state was inconsistent.

+*/

+

+/*

+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,

+                                     int  windowBits));

+

+     This is another version of inflateInit with an extra parameter.  The

+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized

+   before by the caller.

+

+     The windowBits parameter is the base two logarithm of the maximum window

+   size (the size of the history buffer).  It should be in the range 8..15 for

+   this version of the library.  The default value is 15 if inflateInit is used

+   instead.  windowBits must be greater than or equal to the windowBits value

+   provided to deflateInit2() while compressing, or it must be equal to 15 if

+   deflateInit2() was not used.  If a compressed stream with a larger window

+   size is given as input, inflate() will return with the error code

+   Z_DATA_ERROR instead of trying to allocate a larger window.

+

+     windowBits can also be zero to request that inflate use the window size in

+   the zlib header of the compressed stream.

+

+     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits

+   determines the window size.  inflate() will then process raw deflate data,

+   not looking for a zlib or gzip header, not generating a check value, and not

+   looking for any check values for comparison at the end of the stream.  This

+   is for use with other formats that use the deflate compressed data format

+   such as zip.  Those formats provide their own check values.  If a custom

+   format is developed using the raw deflate format for compressed data, it is

+   recommended that a check value such as an adler32 or a crc32 be applied to

+   the uncompressed data as is done in the zlib, gzip, and zip formats.  For

+   most applications, the zlib format should be used as is.  Note that comments

+   above on the use in deflateInit2() applies to the magnitude of windowBits.

+

+     windowBits can also be greater than 15 for optional gzip decoding.  Add

+   32 to windowBits to enable zlib and gzip decoding with automatic header

+   detection, or add 16 to decode only the gzip format (the zlib format will

+   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a

+   crc32 instead of an adler32.

+

+     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough

+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the

+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are

+   invalid, such as a null pointer to the structure.  msg is set to null if

+   there is no error message.  inflateInit2 does not perform any decompression

+   apart from possibly reading the zlib header if present: actual decompression

+   will be done by inflate().  (So next_in and avail_in may be modified, but

+   next_out and avail_out are unused and unchanged.) The current implementation

+   of inflateInit2() does not process any header information -- that is

+   deferred until inflate() is called.

+*/

+

+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,

+                                             const Bytef *dictionary,

+                                             uInt  dictLength));

+/*

+     Initializes the decompression dictionary from the given uncompressed byte

+   sequence.  This function must be called immediately after a call of inflate,

+   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor

+   can be determined from the adler32 value returned by that call of inflate.

+   The compressor and decompressor must use exactly the same dictionary (see

+   deflateSetDictionary).  For raw inflate, this function can be called at any

+   time to set the dictionary.  If the provided dictionary is smaller than the

+   window and there is already data in the window, then the provided dictionary

+   will amend what's there.  The application must insure that the dictionary

+   that was used for compression is provided.

+

+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a

+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is

+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the

+   expected one (incorrect adler32 value).  inflateSetDictionary does not

+   perform any decompression: this will be done by subsequent calls of

+   inflate().

+*/

+

+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,

+                                             Bytef *dictionary,

+                                             uInt  *dictLength));

+/*

+     Returns the sliding dictionary being maintained by inflate.  dictLength is

+   set to the number of bytes in the dictionary, and that many bytes are copied

+   to dictionary.  dictionary must have enough space, where 32768 bytes is

+   always enough.  If inflateGetDictionary() is called with dictionary equal to

+   Z_NULL, then only the dictionary length is returned, and nothing is copied.

+   Similary, if dictLength is Z_NULL, then it is not set.

+

+     inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the

+   stream state is inconsistent.

+*/

+

+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));

+/*

+     Skips invalid compressed data until a possible full flush point (see above

+   for the description of deflate with Z_FULL_FLUSH) can be found, or until all

+   available input is skipped.  No output is provided.

+

+     inflateSync searches for a 00 00 FF FF pattern in the compressed data.

+   All full flush points have this pattern, but not all occurrences of this

+   pattern are full flush points.

+

+     inflateSync returns Z_OK if a possible full flush point has been found,

+   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point

+   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.

+   In the success case, the application may save the current current value of

+   total_in which indicates where valid compressed data was found.  In the

+   error case, the application may repeatedly call inflateSync, providing more

+   input each time, until success or end of the input data.

+*/

+

+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,

+                                    z_streamp source));

+/*

+     Sets the destination stream as a complete copy of the source stream.

+

+     This function can be useful when randomly accessing a large stream.  The

+   first pass through the stream can periodically record the inflate state,

+   allowing restarting inflate at those points when randomly accessing the

+   stream.

+

+     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not

+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent

+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and

+   destination.

+*/

+

+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));

+/*

+     This function is equivalent to inflateEnd followed by inflateInit,

+   but does not free and reallocate all the internal decompression state.  The

+   stream will keep attributes that may have been set by inflateInit2.

+

+     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source

+   stream state was inconsistent (such as zalloc or state being Z_NULL).

+*/

+

+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,

+                                      int windowBits));

+/*

+     This function is the same as inflateReset, but it also permits changing

+   the wrap and window size requests.  The windowBits parameter is interpreted

+   the same as it is for inflateInit2.

+

+     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source

+   stream state was inconsistent (such as zalloc or state being Z_NULL), or if

+   the windowBits parameter is invalid.

+*/

+

+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,

+                                     int bits,

+                                     int value));

+/*

+     This function inserts bits in the inflate input stream.  The intent is

+   that this function is used to start inflating at a bit position in the

+   middle of a byte.  The provided bits will be used before any bytes are used

+   from next_in.  This function should only be used with raw inflate, and

+   should be used before the first inflate() call after inflateInit2() or

+   inflateReset().  bits must be less than or equal to 16, and that many of the

+   least significant bits of value will be inserted in the input.

+

+     If bits is negative, then the input stream bit buffer is emptied.  Then

+   inflatePrime() can be called again to put bits in the buffer.  This is used

+   to clear out bits leftover after feeding inflate a block description prior

+   to feeding inflate codes.

+

+     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source

+   stream state was inconsistent.

+*/

+

+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));

+/*

+     This function returns two values, one in the lower 16 bits of the return

+   value, and the other in the remaining upper bits, obtained by shifting the

+   return value down 16 bits.  If the upper value is -1 and the lower value is

+   zero, then inflate() is currently decoding information outside of a block.

+   If the upper value is -1 and the lower value is non-zero, then inflate is in

+   the middle of a stored block, with the lower value equaling the number of

+   bytes from the input remaining to copy.  If the upper value is not -1, then

+   it is the number of bits back from the current bit position in the input of

+   the code (literal or length/distance pair) currently being processed.  In

+   that case the lower value is the number of bytes already emitted for that

+   code.

+

+     A code is being processed if inflate is waiting for more input to complete

+   decoding of the code, or if it has completed decoding but is waiting for

+   more output space to write the literal or match data.

+

+     inflateMark() is used to mark locations in the input data for random

+   access, which may be at bit positions, and to note those cases where the

+   output of a code may span boundaries of random access blocks.  The current

+   location in the input stream can be determined from avail_in and data_type

+   as noted in the description for the Z_BLOCK flush parameter for inflate.

+

+     inflateMark returns the value noted above or -1 << 16 if the provided

+   source stream state was inconsistent.

+*/

+

+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,

+                                         gz_headerp head));

+/*

+     inflateGetHeader() requests that gzip header information be stored in the

+   provided gz_header structure.  inflateGetHeader() may be called after

+   inflateInit2() or inflateReset(), and before the first call of inflate().

+   As inflate() processes the gzip stream, head->done is zero until the header

+   is completed, at which time head->done is set to one.  If a zlib stream is

+   being decoded, then head->done is set to -1 to indicate that there will be

+   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be

+   used to force inflate() to return immediately after header processing is

+   complete and before any actual data is decompressed.

+

+     The text, time, xflags, and os fields are filled in with the gzip header

+   contents.  hcrc is set to true if there is a header CRC.  (The header CRC

+   was valid if done is set to one.) If extra is not Z_NULL, then extra_max

+   contains the maximum number of bytes to write to extra.  Once done is true,

+   extra_len contains the actual extra field length, and extra contains the

+   extra field, or that field truncated if extra_max is less than extra_len.

+   If name is not Z_NULL, then up to name_max characters are written there,

+   terminated with a zero unless the length is greater than name_max.  If

+   comment is not Z_NULL, then up to comm_max characters are written there,

+   terminated with a zero unless the length is greater than comm_max.  When any

+   of extra, name, or comment are not Z_NULL and the respective field is not

+   present in the header, then that field is set to Z_NULL to signal its

+   absence.  This allows the use of deflateSetHeader() with the returned

+   structure to duplicate the header.  However if those fields are set to

+   allocated memory, then the application will need to save those pointers

+   elsewhere so that they can be eventually freed.

+

+     If inflateGetHeader is not used, then the header information is simply

+   discarded.  The header is always checked for validity, including the header

+   CRC if present.  inflateReset() will reset the process to discard the header

+   information.  The application would need to call inflateGetHeader() again to

+   retrieve the header from the next gzip stream.

+

+     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source

+   stream state was inconsistent.

+*/

+

+/*

+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,

+                                        unsigned char FAR *window));

+

+     Initialize the internal stream state for decompression using inflateBack()

+   calls.  The fields zalloc, zfree and opaque in strm must be initialized

+   before the call.  If zalloc and zfree are Z_NULL, then the default library-

+   derived memory allocation routines are used.  windowBits is the base two

+   logarithm of the window size, in the range 8..15.  window is a caller

+   supplied buffer of that size.  Except for special applications where it is

+   assured that deflate was used with small window sizes, windowBits must be 15

+   and a 32K byte window must be supplied to be able to decompress general

+   deflate streams.

+

+     See inflateBack() for the usage of these routines.

+

+     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of

+   the parameters are invalid, Z_MEM_ERROR if the internal state could not be

+   allocated, or Z_VERSION_ERROR if the version of the library does not match

+   the version of the header file.

+*/

+

+typedef unsigned (*in_func) OF((void FAR *,

+                                z_const unsigned char FAR * FAR *));

+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));

+

+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,

+                                    in_func in, void FAR *in_desc,

+                                    out_func out, void FAR *out_desc));

+/*

+     inflateBack() does a raw inflate with a single call using a call-back

+   interface for input and output.  This is potentially more efficient than

+   inflate() for file i/o applications, in that it avoids copying between the

+   output and the sliding window by simply making the window itself the output

+   buffer.  inflate() can be faster on modern CPUs when used with large

+   buffers.  inflateBack() trusts the application to not change the output

+   buffer passed by the output function, at least until inflateBack() returns.

+

+     inflateBackInit() must be called first to allocate the internal state

+   and to initialize the state with the user-provided window buffer.

+   inflateBack() may then be used multiple times to inflate a complete, raw

+   deflate stream with each call.  inflateBackEnd() is then called to free the

+   allocated state.

+

+     A raw deflate stream is one with no zlib or gzip header or trailer.

+   This routine would normally be used in a utility that reads zip or gzip

+   files and writes out uncompressed files.  The utility would decode the

+   header and process the trailer on its own, hence this routine expects only

+   the raw deflate stream to decompress.  This is different from the normal

+   behavior of inflate(), which expects either a zlib or gzip header and

+   trailer around the deflate stream.

+

+     inflateBack() uses two subroutines supplied by the caller that are then

+   called by inflateBack() for input and output.  inflateBack() calls those

+   routines until it reads a complete deflate stream and writes out all of the

+   uncompressed data, or until it encounters an error.  The function's

+   parameters and return types are defined above in the in_func and out_func

+   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the

+   number of bytes of provided input, and a pointer to that input in buf.  If

+   there is no input available, in() must return zero--buf is ignored in that

+   case--and inflateBack() will return a buffer error.  inflateBack() will call

+   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()

+   should return zero on success, or non-zero on failure.  If out() returns

+   non-zero, inflateBack() will return with an error.  Neither in() nor out()

+   are permitted to change the contents of the window provided to

+   inflateBackInit(), which is also the buffer that out() uses to write from.

+   The length written by out() will be at most the window size.  Any non-zero

+   amount of input may be provided by in().

+

+     For convenience, inflateBack() can be provided input on the first call by

+   setting strm->next_in and strm->avail_in.  If that input is exhausted, then

+   in() will be called.  Therefore strm->next_in must be initialized before

+   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called

+   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in

+   must also be initialized, and then if strm->avail_in is not zero, input will

+   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].

+

+     The in_desc and out_desc parameters of inflateBack() is passed as the

+   first parameter of in() and out() respectively when they are called.  These

+   descriptors can be optionally used to pass any information that the caller-

+   supplied in() and out() functions need to do their job.

+

+     On return, inflateBack() will set strm->next_in and strm->avail_in to

+   pass back any unused input that was provided by the last in() call.  The

+   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR

+   if in() or out() returned an error, Z_DATA_ERROR if there was a format error

+   in the deflate stream (in which case strm->msg is set to indicate the nature

+   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.

+   In the case of Z_BUF_ERROR, an input or output error can be distinguished

+   using strm->next_in which will be Z_NULL only if in() returned an error.  If

+   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning

+   non-zero.  (in() will always be called before out(), so strm->next_in is

+   assured to be defined if out() returns non-zero.) Note that inflateBack()

+   cannot return Z_OK.

+*/

+

+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));

+/*

+     All memory allocated by inflateBackInit() is freed.

+

+     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream

+   state was inconsistent.

+*/

+

+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));

+/* Return flags indicating compile-time options.

+

+    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:

+     1.0: size of uInt

+     3.2: size of uLong

+     5.4: size of voidpf (pointer)

+     7.6: size of z_off_t

+

+    Compiler, assembler, and debug options:

+     8: DEBUG

+     9: ASMV or ASMINF -- use ASM code

+     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention

+     11: 0 (reserved)

+

+    One-time table building (smaller code, but not thread-safe if true):

+     12: BUILDFIXED -- build static block decoding tables when needed

+     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed

+     14,15: 0 (reserved)

+

+    Library content (indicates missing functionality):

+     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking

+                          deflate code when not needed)

+     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect

+                    and decode gzip streams (to avoid linking crc code)

+     18-19: 0 (reserved)

+

+    Operation variations (changes in library functionality):

+     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate

+     21: FASTEST -- deflate algorithm with only one, lowest compression level

+     22,23: 0 (reserved)

+

+    The sprintf variant used by gzprintf (zero is best):

+     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format

+     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!

+     26: 0 = returns value, 1 = void -- 1 means inferred string length returned

+

+    Remainder:

+     27-31: 0 (reserved)

+ */

+

+#ifndef Z_SOLO

+

+                        /* utility functions */

+

+/*

+     The following utility functions are implemented on top of the basic

+   stream-oriented functions.  To simplify the interface, some default options

+   are assumed (compression level and memory usage, standard memory allocation

+   functions).  The source code of these utility functions can be modified if

+   you need special options.

+*/

+

+ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,

+                                 const Bytef *source, uLong sourceLen));

+/*

+     Compresses the source buffer into the destination buffer.  sourceLen is

+   the byte length of the source buffer.  Upon entry, destLen is the total size

+   of the destination buffer, which must be at least the value returned by

+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the

+   compressed buffer.

+

+     compress returns Z_OK if success, Z_MEM_ERROR if there was not

+   enough memory, Z_BUF_ERROR if there was not enough room in the output

+   buffer.

+*/

+

+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,

+                                  const Bytef *source, uLong sourceLen,

+                                  int level));

+/*

+     Compresses the source buffer into the destination buffer.  The level

+   parameter has the same meaning as in deflateInit.  sourceLen is the byte

+   length of the source buffer.  Upon entry, destLen is the total size of the

+   destination buffer, which must be at least the value returned by

+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the

+   compressed buffer.

+

+     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough

+   memory, Z_BUF_ERROR if there was not enough room in the output buffer,

+   Z_STREAM_ERROR if the level parameter is invalid.

+*/

+

+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));

+/*

+     compressBound() returns an upper bound on the compressed size after

+   compress() or compress2() on sourceLen bytes.  It would be used before a

+   compress() or compress2() call to allocate the destination buffer.

+*/

+

+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,

+                                   const Bytef *source, uLong sourceLen));

+/*

+     Decompresses the source buffer into the destination buffer.  sourceLen is

+   the byte length of the source buffer.  Upon entry, destLen is the total size

+   of the destination buffer, which must be large enough to hold the entire

+   uncompressed data.  (The size of the uncompressed data must have been saved

+   previously by the compressor and transmitted to the decompressor by some

+   mechanism outside the scope of this compression library.) Upon exit, destLen

+   is the actual size of the uncompressed buffer.

+

+     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not

+   enough memory, Z_BUF_ERROR if there was not enough room in the output

+   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In

+   the case where there is not enough room, uncompress() will fill the output

+   buffer with the uncompressed data up to that point.

+*/

+

+                        /* gzip file access functions */

+

+/*

+     This library supports reading and writing files in gzip (.gz) format with

+   an interface similar to that of stdio, using the functions that start with

+   "gz".  The gzip format is different from the zlib format.  gzip is a gzip

+   wrapper, documented in RFC 1952, wrapped around a deflate stream.

+*/

+

+typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */

+

+/*

+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));

+

+     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as

+   in fopen ("rb" or "wb") but can also include a compression level ("wb9") or

+   a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only

+   compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'

+   for fixed code compression as in "wb9F".  (See the description of

+   deflateInit2 for more information about the strategy parameter.)  'T' will

+   request transparent writing or appending with no compression and not using

+   the gzip format.

+

+     "a" can be used instead of "w" to request that the gzip stream that will

+   be written be appended to the file.  "+" will result in an error, since

+   reading and writing to the same gzip file is not supported.  The addition of

+   "x" when writing will create the file exclusively, which fails if the file

+   already exists.  On systems that support it, the addition of "e" when

+   reading or writing will set the flag to close the file on an execve() call.

+

+     These functions, as well as gzip, will read and decode a sequence of gzip

+   streams in a file.  The append function of gzopen() can be used to create

+   such a file.  (Also see gzflush() for another way to do this.)  When

+   appending, gzopen does not test whether the file begins with a gzip stream,

+   nor does it look for the end of the gzip streams to begin appending.  gzopen

+   will simply append a gzip stream to the existing file.

+

+     gzopen can be used to read a file which is not in gzip format; in this

+   case gzread will directly read from the file without decompression.  When

+   reading, this will be detected automatically by looking for the magic two-

+   byte gzip header.

+

+     gzopen returns NULL if the file could not be opened, if there was

+   insufficient memory to allocate the gzFile state, or if an invalid mode was

+   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).

+   errno can be checked to determine if the reason gzopen failed was that the

+   file could not be opened.

+*/

+

+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));

+/*

+     gzdopen associates a gzFile with the file descriptor fd.  File descriptors

+   are obtained from calls like open, dup, creat, pipe or fileno (if the file

+   has been previously opened with fopen).  The mode parameter is as in gzopen.

+

+     The next call of gzclose on the returned gzFile will also close the file

+   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor

+   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,

+   mode);.  The duplicated descriptor should be saved to avoid a leak, since

+   gzdopen does not close fd if it fails.  If you are using fileno() to get the

+   file descriptor from a FILE *, then you will have to use dup() to avoid

+   double-close()ing the file descriptor.  Both gzclose() and fclose() will

+   close the associated file descriptor, so they need to have different file

+   descriptors.

+

+     gzdopen returns NULL if there was insufficient memory to allocate the

+   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not

+   provided, or '+' was provided), or if fd is -1.  The file descriptor is not

+   used until the next gz* read, write, seek, or close operation, so gzdopen

+   will not detect if fd is invalid (unless fd is -1).

+*/

+

+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));

+/*

+     Set the internal buffer size used by this library's functions.  The

+   default buffer size is 8192 bytes.  This function must be called after

+   gzopen() or gzdopen(), and before any other calls that read or write the

+   file.  The buffer memory allocation is always deferred to the first read or

+   write.  Two buffers are allocated, either both of the specified size when

+   writing, or one of the specified size and the other twice that size when

+   reading.  A larger buffer size of, for example, 64K or 128K bytes will

+   noticeably increase the speed of decompression (reading).

+

+     The new buffer size also affects the maximum length for gzprintf().

+

+     gzbuffer() returns 0 on success, or -1 on failure, such as being called

+   too late.

+*/

+

+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));

+/*

+     Dynamically update the compression level or strategy.  See the description

+   of deflateInit2 for the meaning of these parameters.

+

+     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not

+   opened for writing.

+*/

+

+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));

+/*

+     Reads the given number of uncompressed bytes from the compressed file.  If

+   the input file is not in gzip format, gzread copies the given number of

+   bytes into the buffer directly from the file.

+

+     After reaching the end of a gzip stream in the input, gzread will continue

+   to read, looking for another gzip stream.  Any number of gzip streams may be

+   concatenated in the input file, and will all be decompressed by gzread().

+   If something other than a gzip stream is encountered after a gzip stream,

+   that remaining trailing garbage is ignored (and no error is returned).

+

+     gzread can be used to read a gzip file that is being concurrently written.

+   Upon reaching the end of the input, gzread will return with the available

+   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then

+   gzclearerr can be used to clear the end of file indicator in order to permit

+   gzread to be tried again.  Z_OK indicates that a gzip stream was completed

+   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the

+   middle of a gzip stream.  Note that gzread does not return -1 in the event

+   of an incomplete gzip stream.  This error is deferred until gzclose(), which

+   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip

+   stream.  Alternatively, gzerror can be used before gzclose to detect this

+   case.

+

+     gzread returns the number of uncompressed bytes actually read, less than

+   len for end of file, or -1 for error.

+*/

+

+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,

+                                voidpc buf, unsigned len));

+/*

+     Writes the given number of uncompressed bytes into the compressed file.

+   gzwrite returns the number of uncompressed bytes written or 0 in case of

+   error.

+*/

+

+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));

+/*

+     Converts, formats, and writes the arguments to the compressed file under

+   control of the format string, as in fprintf.  gzprintf returns the number of

+   uncompressed bytes actually written, or 0 in case of error.  The number of

+   uncompressed bytes written is limited to 8191, or one less than the buffer

+   size given to gzbuffer().  The caller should assure that this limit is not

+   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with

+   nothing written.  In this case, there may also be a buffer overflow with

+   unpredictable consequences, which is possible only if zlib was compiled with

+   the insecure functions sprintf() or vsprintf() because the secure snprintf()

+   or vsnprintf() functions were not available.  This can be determined using

+   zlibCompileFlags().

+*/

+

+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));

+/*

+     Writes the given null-terminated string to the compressed file, excluding

+   the terminating null character.

+

+     gzputs returns the number of characters written, or -1 in case of error.

+*/

+

+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));

+/*

+     Reads bytes from the compressed file until len-1 characters are read, or a

+   newline character is read and transferred to buf, or an end-of-file

+   condition is encountered.  If any characters are read or if len == 1, the

+   string is terminated with a null character.  If no characters are read due

+   to an end-of-file or len < 1, then the buffer is left untouched.

+

+     gzgets returns buf which is a null-terminated string, or it returns NULL

+   for end-of-file or in case of error.  If there was an error, the contents at

+   buf are indeterminate.

+*/

+

+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));

+/*

+     Writes c, converted to an unsigned char, into the compressed file.  gzputc

+   returns the value that was written, or -1 in case of error.

+*/

+

+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));

+/*

+     Reads one byte from the compressed file.  gzgetc returns this byte or -1

+   in case of end of file or error.  This is implemented as a macro for speed.

+   As such, it does not do all of the checking the other functions do.  I.e.

+   it does not check to see if file is NULL, nor whether the structure file

+   points to has been clobbered or not.

+*/

+

+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));

+/*

+     Push one character back onto the stream to be read as the first character

+   on the next read.  At least one character of push-back is allowed.

+   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will

+   fail if c is -1, and may fail if a character has been pushed but not read

+   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the

+   output buffer size of pushed characters is allowed.  (See gzbuffer above.)

+   The pushed character will be discarded if the stream is repositioned with

+   gzseek() or gzrewind().

+*/

+

+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));

+/*

+     Flushes all pending output into the compressed file.  The parameter flush

+   is as in the deflate() function.  The return value is the zlib error number

+   (see function gzerror below).  gzflush is only permitted when writing.

+

+     If the flush parameter is Z_FINISH, the remaining data is written and the

+   gzip stream is completed in the output.  If gzwrite() is called again, a new

+   gzip stream will be started in the output.  gzread() is able to read such

+   concatented gzip streams.

+

+     gzflush should be called only when strictly necessary because it will

+   degrade compression if called too often.

+*/

+

+/*

+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,

+                                   z_off_t offset, int whence));

+

+     Sets the starting position for the next gzread or gzwrite on the given

+   compressed file.  The offset represents a number of bytes in the

+   uncompressed data stream.  The whence parameter is defined as in lseek(2);

+   the value SEEK_END is not supported.

+

+     If the file is opened for reading, this function is emulated but can be

+   extremely slow.  If the file is opened for writing, only forward seeks are

+   supported; gzseek then compresses a sequence of zeroes up to the new

+   starting position.

+

+     gzseek returns the resulting offset location as measured in bytes from

+   the beginning of the uncompressed stream, or -1 in case of error, in

+   particular if the file is opened for writing and the new starting position

+   would be before the current position.

+*/

+

+ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));

+/*

+     Rewinds the given file. This function is supported only for reading.

+

+     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)

+*/

+

+/*

+ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));

+

+     Returns the starting position for the next gzread or gzwrite on the given

+   compressed file.  This position represents a number of bytes in the

+   uncompressed data stream, and is zero when starting, even if appending or

+   reading a gzip stream from the middle of a file using gzdopen().

+

+     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)

+*/

+

+/*

+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));

+

+     Returns the current offset in the file being read or written.  This offset

+   includes the count of bytes that precede the gzip stream, for example when

+   appending or when using gzdopen() for reading.  When reading, the offset

+   does not include as yet unused buffered input.  This information can be used

+   for a progress indicator.  On error, gzoffset() returns -1.

+*/

+

+ZEXTERN int ZEXPORT gzeof OF((gzFile file));

+/*

+     Returns true (1) if the end-of-file indicator has been set while reading,

+   false (0) otherwise.  Note that the end-of-file indicator is set only if the

+   read tried to go past the end of the input, but came up short.  Therefore,

+   just like feof(), gzeof() may return false even if there is no more data to

+   read, in the event that the last read request was for the exact number of

+   bytes remaining in the input file.  This will happen if the input file size

+   is an exact multiple of the buffer size.

+

+     If gzeof() returns true, then the read functions will return no more data,

+   unless the end-of-file indicator is reset by gzclearerr() and the input file

+   has grown since the previous end of file was detected.

+*/

+

+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));

+/*

+     Returns true (1) if file is being copied directly while reading, or false

+   (0) if file is a gzip stream being decompressed.

+

+     If the input file is empty, gzdirect() will return true, since the input

+   does not contain a gzip stream.

+

+     If gzdirect() is used immediately after gzopen() or gzdopen() it will

+   cause buffers to be allocated to allow reading the file to determine if it

+   is a gzip file.  Therefore if gzbuffer() is used, it should be called before

+   gzdirect().

+

+     When writing, gzdirect() returns true (1) if transparent writing was

+   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:

+   gzdirect() is not needed when writing.  Transparent writing must be

+   explicitly requested, so the application already knows the answer.  When

+   linking statically, using gzdirect() will include all of the zlib code for

+   gzip file reading and decompression, which may not be desired.)

+*/

+

+ZEXTERN int ZEXPORT    gzclose OF((gzFile file));

+/*

+     Flushes all pending output if necessary, closes the compressed file and

+   deallocates the (de)compression state.  Note that once file is closed, you

+   cannot call gzerror with file, since its structures have been deallocated.

+   gzclose must not be called more than once on the same file, just as free

+   must not be called more than once on the same allocation.

+

+     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a

+   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the

+   last read ended in the middle of a gzip stream, or Z_OK on success.

+*/

+

+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));

+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));

+/*

+     Same as gzclose(), but gzclose_r() is only for use when reading, and

+   gzclose_w() is only for use when writing or appending.  The advantage to

+   using these instead of gzclose() is that they avoid linking in zlib

+   compression or decompression code that is not used when only reading or only

+   writing respectively.  If gzclose() is used, then both compression and

+   decompression code will be included the application when linking to a static

+   zlib library.

+*/

+

+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));

+/*

+     Returns the error message for the last error which occurred on the given

+   compressed file.  errnum is set to zlib error number.  If an error occurred

+   in the file system and not in the compression library, errnum is set to

+   Z_ERRNO and the application may consult errno to get the exact error code.

+

+     The application must not modify the returned string.  Future calls to

+   this function may invalidate the previously returned string.  If file is

+   closed, then the string previously returned by gzerror will no longer be

+   available.

+

+     gzerror() should be used to distinguish errors from end-of-file for those

+   functions above that do not distinguish those cases in their return values.

+*/

+

+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));

+/*

+     Clears the error and end-of-file flags for file.  This is analogous to the

+   clearerr() function in stdio.  This is useful for continuing to read a gzip

+   file that is being written concurrently.

+*/

+

+#endif /* !Z_SOLO */

+

+                        /* checksum functions */

+

+/*

+     These functions are not related to compression but are exported

+   anyway because they might be useful in applications using the compression

+   library.

+*/

+

+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));

+/*

+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and

+   return the updated checksum.  If buf is Z_NULL, this function returns the

+   required initial value for the checksum.

+

+     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed

+   much faster.

+

+   Usage example:

+

+     uLong adler = adler32(0L, Z_NULL, 0);

+

+     while (read_buffer(buffer, length) != EOF) {

+       adler = adler32(adler, buffer, length);

+     }

+     if (adler != original_adler) error();

+*/

+

+/*

+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,

+                                          z_off_t len2));

+

+     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1

+   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for

+   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of

+   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note

+   that the z_off_t type (like off_t) is a signed integer.  If len2 is

+   negative, the result has no meaning or utility.

+*/

+

+ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));

+/*

+     Update a running CRC-32 with the bytes buf[0..len-1] and return the

+   updated CRC-32.  If buf is Z_NULL, this function returns the required

+   initial value for the crc.  Pre- and post-conditioning (one's complement) is

+   performed within this function so it shouldn't be done by the application.

+

+   Usage example:

+

+     uLong crc = crc32(0L, Z_NULL, 0);

+

+     while (read_buffer(buffer, length) != EOF) {

+       crc = crc32(crc, buffer, length);

+     }

+     if (crc != original_crc) error();

+*/

+

+/*

+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));

+

+     Combine two CRC-32 check values into one.  For two sequences of bytes,

+   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were

+   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32

+   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and

+   len2.

+*/

+

+

+                        /* various hacks, don't look :) */

+

+/* deflateInit and inflateInit are macros to allow checking the zlib version

+ * and the compiler's view of z_stream:

+ */

+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,

+                                     const char *version, int stream_size));

+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,

+                                     const char *version, int stream_size));

+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,

+                                      int windowBits, int memLevel,

+                                      int strategy, const char *version,

+                                      int stream_size));

+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,

+                                      const char *version, int stream_size));

+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,

+                                         unsigned char FAR *window,

+                                         const char *version,

+                                         int stream_size));

+#define deflateInit(strm, level) \

+        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))

+#define inflateInit(strm) \

+        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))

+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \

+        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\

+                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))

+#define inflateInit2(strm, windowBits) \

+        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \

+                      (int)sizeof(z_stream))

+#define inflateBackInit(strm, windowBits, window) \

+        inflateBackInit_((strm), (windowBits), (window), \

+                      ZLIB_VERSION, (int)sizeof(z_stream))

+

+#ifndef Z_SOLO

+

+/* gzgetc() macro and its supporting function and exposed data structure.  Note

+ * that the real internal state is much larger than the exposed structure.

+ * This abbreviated structure exposes just enough for the gzgetc() macro.  The

+ * user should not mess with these exposed elements, since their names or

+ * behavior could change in the future, perhaps even capriciously.  They can

+ * only be used by the gzgetc() macro.  You have been warned.

+ */

+struct gzFile_s {

+    unsigned have;

+    unsigned char *next;

+    z_off64_t pos;

+};

+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */

+#ifdef Z_PREFIX_SET

+#  undef z_gzgetc

+#  define z_gzgetc(g) \

+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))

+#else

+#  define gzgetc(g) \

+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))

+#endif

+

+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or

+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if

+ * both are true, the application gets the *64 functions, and the regular

+ * functions are changed to 64 bits) -- in case these are set on systems

+ * without large file support, _LFS64_LARGEFILE must also be true

+ */

+#ifdef Z_LARGE64

+   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));

+   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));

+   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));

+   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));

+   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));

+   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));

+#endif

+

+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)

+#  ifdef Z_PREFIX_SET

+#    define z_gzopen z_gzopen64

+#    define z_gzseek z_gzseek64

+#    define z_gztell z_gztell64

+#    define z_gzoffset z_gzoffset64

+#    define z_adler32_combine z_adler32_combine64

+#    define z_crc32_combine z_crc32_combine64

+#  else

+#    define gzopen gzopen64

+#    define gzseek gzseek64

+#    define gztell gztell64

+#    define gzoffset gzoffset64

+#    define adler32_combine adler32_combine64

+#    define crc32_combine crc32_combine64

+#  endif

+#  ifndef Z_LARGE64

+     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));

+     ZEXTERN off64_t ZEXPORT gzseek64 OF((gzFile, off64_t, int));

+     ZEXTERN off64_t ZEXPORT gztell64 OF((gzFile));

+     ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));

+     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, off64_t));

+     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, off64_t));

+#  endif

+#else

+   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));

+   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));

+   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));

+   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));

+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));

+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));

+#endif

+

+#else /* Z_SOLO */

+

+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));

+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));

+

+#endif /* !Z_SOLO */

+

+/* hack for buggy compilers */

+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)

+    struct internal_state {int dummy;};

+#endif

+

+/* undocumented functions */

+ZEXTERN const char   * ZEXPORT zError           OF((int));

+ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));

+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));

+ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));

+ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));

+ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));

+#if defined(_WIN32) && !defined(Z_SOLO)

+ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,

+                                            const char *mode));

+#endif

+#if defined(STDC) || defined(Z_HAVE_STDARG_H)

+#  ifndef Z_SOLO

+ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,

+                                                  const char *format,

+                                                  va_list va));

+#  endif

+#endif

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* ZLIB_H */

diff --git a/core/src/fdrm/crypto/fx_crypt.cpp b/core/src/fdrm/crypto/fx_crypt.cpp
new file mode 100644
index 0000000..0f1bf5f
--- /dev/null
+++ b/core/src/fdrm/crypto/fx_crypt.cpp
@@ -0,0 +1,259 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#include "../../../include/fxcrt/fx_basic.h"

+#include "../../../include/fdrm/fx_crypt.h"

+#ifdef __cplusplus

+extern "C" {

+#endif

+struct rc4_state {

+    int x, y, m[256];

+};

+void CRYPT_ArcFourSetup(void* context,  FX_LPCBYTE key,  FX_DWORD length )

+{

+    rc4_state *s = (rc4_state*)context;

+    int i, j, k, *m, a;

+    s->x = 0;

+    s->y = 0;

+    m = s->m;

+    for( i = 0; i < 256; i++ ) {

+        m[i] = i;

+    }

+    j = k = 0;

+    for( i = 0; i < 256; i++ ) {

+        a = m[i];

+        j = ( j + a + key[k] ) & 0xFF;

+        m[i] = m[j];

+        m[j] = a;

+        if( ++k >= (int)length ) {

+            k = 0;

+        }

+    }

+}

+void CRYPT_ArcFourCrypt(void* context, unsigned char *data, FX_DWORD length )

+{

+    struct rc4_state* s = (struct rc4_state*)context;

+    int i, x, y, *m, a, b;

+    x = s->x;

+    y = s->y;

+    m = s->m;

+    for( i = 0; i < (int)length; i++ ) {

+        x = ( x + 1 ) & 0xFF;

+        a = m[x];

+        y = ( y + a ) & 0xFF;

+        m[x] = b = m[y];

+        m[y] = a;

+        data[i] ^= m[( a + b ) & 0xFF];

+    }

+    s->x = x;

+    s->y = y;

+}

+void CRYPT_ArcFourCryptBlock(FX_LPBYTE pData, FX_DWORD size, FX_LPCBYTE key, FX_DWORD keylen)

+{

+    rc4_state s;

+    CRYPT_ArcFourSetup(&s, key, keylen);

+    CRYPT_ArcFourCrypt(&s, pData, size);

+}

+struct md5_context {

+    FX_DWORD total[2];

+    FX_DWORD state[4];

+    FX_BYTE buffer[64];

+};

+#define GET_FX_DWORD(n,b,i)                                       \

+    {                                                               \

+        (n) = (FX_DWORD) ((FX_BYTE *) b)[(i)]                           \

+              | (((FX_DWORD) ((FX_BYTE *) b)[(i)+1]) <<  8)                 \

+              | (((FX_DWORD) ((FX_BYTE *) b)[(i)+2]) << 16)                 \

+              | (((FX_DWORD) ((FX_BYTE *) b)[(i)+3]) << 24);                \

+    }

+#define PUT_FX_DWORD(n,b,i)                                       \

+    {                                                               \

+        (((FX_BYTE *) b)[(i)]  ) = (FX_BYTE) (((n)      ) & 0xFF);      \

+        (((FX_BYTE *) b)[(i)+1]) = (FX_BYTE) (((n) >>  8) & 0xFF);      \

+        (((FX_BYTE *) b)[(i)+2]) = (FX_BYTE) (((n) >> 16) & 0xFF);      \

+        (((FX_BYTE *) b)[(i)+3]) = (FX_BYTE) (((n) >> 24) & 0xFF);      \

+    }

+void md5_process( struct md5_context *ctx, const FX_BYTE data[64] )

+{

+    FX_DWORD A, B, C, D, X[16];

+    GET_FX_DWORD( X[0],  data,  0 );

+    GET_FX_DWORD( X[1],  data,  4 );

+    GET_FX_DWORD( X[2],  data,  8 );

+    GET_FX_DWORD( X[3],  data, 12 );

+    GET_FX_DWORD( X[4],  data, 16 );

+    GET_FX_DWORD( X[5],  data, 20 );

+    GET_FX_DWORD( X[6],  data, 24 );

+    GET_FX_DWORD( X[7],  data, 28 );

+    GET_FX_DWORD( X[8],  data, 32 );

+    GET_FX_DWORD( X[9],  data, 36 );

+    GET_FX_DWORD( X[10], data, 40 );

+    GET_FX_DWORD( X[11], data, 44 );

+    GET_FX_DWORD( X[12], data, 48 );

+    GET_FX_DWORD( X[13], data, 52 );

+    GET_FX_DWORD( X[14], data, 56 );

+    GET_FX_DWORD( X[15], data, 60 );

+#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))

+#define P(a,b,c,d,k,s,t)                                \

+    {                                                       \

+        a += F(b,c,d) + X[k] + t; a = S(a,s) + b;           \

+    }

+    A = ctx->state[0];

+    B = ctx->state[1];

+    C = ctx->state[2];

+    D = ctx->state[3];

+#define F(x,y,z) (z ^ (x & (y ^ z)))

+    P( A, B, C, D,  0,  7, 0xD76AA478 );

+    P( D, A, B, C,  1, 12, 0xE8C7B756 );

+    P( C, D, A, B,  2, 17, 0x242070DB );

+    P( B, C, D, A,  3, 22, 0xC1BDCEEE );

+    P( A, B, C, D,  4,  7, 0xF57C0FAF );

+    P( D, A, B, C,  5, 12, 0x4787C62A );

+    P( C, D, A, B,  6, 17, 0xA8304613 );

+    P( B, C, D, A,  7, 22, 0xFD469501 );

+    P( A, B, C, D,  8,  7, 0x698098D8 );

+    P( D, A, B, C,  9, 12, 0x8B44F7AF );

+    P( C, D, A, B, 10, 17, 0xFFFF5BB1 );

+    P( B, C, D, A, 11, 22, 0x895CD7BE );

+    P( A, B, C, D, 12,  7, 0x6B901122 );

+    P( D, A, B, C, 13, 12, 0xFD987193 );

+    P( C, D, A, B, 14, 17, 0xA679438E );

+    P( B, C, D, A, 15, 22, 0x49B40821 );

+#undef F

+#define F(x,y,z) (y ^ (z & (x ^ y)))

+    P( A, B, C, D,  1,  5, 0xF61E2562 );

+    P( D, A, B, C,  6,  9, 0xC040B340 );

+    P( C, D, A, B, 11, 14, 0x265E5A51 );

+    P( B, C, D, A,  0, 20, 0xE9B6C7AA );

+    P( A, B, C, D,  5,  5, 0xD62F105D );

+    P( D, A, B, C, 10,  9, 0x02441453 );

+    P( C, D, A, B, 15, 14, 0xD8A1E681 );

+    P( B, C, D, A,  4, 20, 0xE7D3FBC8 );

+    P( A, B, C, D,  9,  5, 0x21E1CDE6 );

+    P( D, A, B, C, 14,  9, 0xC33707D6 );

+    P( C, D, A, B,  3, 14, 0xF4D50D87 );

+    P( B, C, D, A,  8, 20, 0x455A14ED );

+    P( A, B, C, D, 13,  5, 0xA9E3E905 );

+    P( D, A, B, C,  2,  9, 0xFCEFA3F8 );

+    P( C, D, A, B,  7, 14, 0x676F02D9 );

+    P( B, C, D, A, 12, 20, 0x8D2A4C8A );

+#undef F

+#define F(x,y,z) (x ^ y ^ z)

+    P( A, B, C, D,  5,  4, 0xFFFA3942 );

+    P( D, A, B, C,  8, 11, 0x8771F681 );

+    P( C, D, A, B, 11, 16, 0x6D9D6122 );

+    P( B, C, D, A, 14, 23, 0xFDE5380C );

+    P( A, B, C, D,  1,  4, 0xA4BEEA44 );

+    P( D, A, B, C,  4, 11, 0x4BDECFA9 );

+    P( C, D, A, B,  7, 16, 0xF6BB4B60 );

+    P( B, C, D, A, 10, 23, 0xBEBFBC70 );

+    P( A, B, C, D, 13,  4, 0x289B7EC6 );

+    P( D, A, B, C,  0, 11, 0xEAA127FA );

+    P( C, D, A, B,  3, 16, 0xD4EF3085 );

+    P( B, C, D, A,  6, 23, 0x04881D05 );

+    P( A, B, C, D,  9,  4, 0xD9D4D039 );

+    P( D, A, B, C, 12, 11, 0xE6DB99E5 );

+    P( C, D, A, B, 15, 16, 0x1FA27CF8 );

+    P( B, C, D, A,  2, 23, 0xC4AC5665 );

+#undef F

+#define F(x,y,z) (y ^ (x | ~z))

+    P( A, B, C, D,  0,  6, 0xF4292244 );

+    P( D, A, B, C,  7, 10, 0x432AFF97 );

+    P( C, D, A, B, 14, 15, 0xAB9423A7 );

+    P( B, C, D, A,  5, 21, 0xFC93A039 );

+    P( A, B, C, D, 12,  6, 0x655B59C3 );

+    P( D, A, B, C,  3, 10, 0x8F0CCC92 );

+    P( C, D, A, B, 10, 15, 0xFFEFF47D );

+    P( B, C, D, A,  1, 21, 0x85845DD1 );

+    P( A, B, C, D,  8,  6, 0x6FA87E4F );

+    P( D, A, B, C, 15, 10, 0xFE2CE6E0 );

+    P( C, D, A, B,  6, 15, 0xA3014314 );

+    P( B, C, D, A, 13, 21, 0x4E0811A1 );

+    P( A, B, C, D,  4,  6, 0xF7537E82 );

+    P( D, A, B, C, 11, 10, 0xBD3AF235 );

+    P( C, D, A, B,  2, 15, 0x2AD7D2BB );

+    P( B, C, D, A,  9, 21, 0xEB86D391 );

+#undef F

+    ctx->state[0] += A;

+    ctx->state[1] += B;

+    ctx->state[2] += C;

+    ctx->state[3] += D;

+}

+void CRYPT_MD5Start(void* context)

+{

+    struct md5_context *ctx = (struct md5_context*)context;

+    ctx->total[0] = 0;

+    ctx->total[1] = 0;

+    ctx->state[0] = 0x67452301;

+    ctx->state[1] = 0xEFCDAB89;

+    ctx->state[2] = 0x98BADCFE;

+    ctx->state[3] = 0x10325476;

+}

+void CRYPT_MD5Update(FX_LPVOID pctx, FX_LPCBYTE input, FX_DWORD length )

+{

+    struct md5_context *ctx = (struct md5_context *)pctx;

+    FX_DWORD left, fill;

+    if( ! length ) {

+        return;

+    }

+    left = ( ctx->total[0] >> 3 ) & 0x3F;

+    fill = 64 - left;

+    ctx->total[0] += length <<  3;

+    ctx->total[1] += length >> 29;

+    ctx->total[0] &= 0xFFFFFFFF;

+    ctx->total[1] += ctx->total[0] < length << 3;

+    if( left && length >= fill ) {

+        FXSYS_memcpy32( (void *) (ctx->buffer + left), (void *) input, fill );

+        md5_process( ctx, ctx->buffer );

+        length -= fill;

+        input  += fill;

+        left = 0;

+    }

+    while( length >= 64 ) {

+        md5_process( ctx, input );

+        length -= 64;

+        input  += 64;

+    }

+    if( length ) {

+        FXSYS_memcpy32( (void *) (ctx->buffer + left), (void *) input, length );

+    }

+}

+const FX_BYTE md5_padding[64] = {

+    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

+};

+void CRYPT_MD5Finish(FX_LPVOID pctx, FX_BYTE digest[16] )

+{

+    struct md5_context *ctx = (struct md5_context *)pctx;

+    FX_DWORD last, padn;

+    FX_BYTE msglen[8];

+    PUT_FX_DWORD( ctx->total[0], msglen, 0 );

+    PUT_FX_DWORD( ctx->total[1], msglen, 4 );

+    last = ( ctx->total[0] >> 3 ) & 0x3F;

+    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );

+    CRYPT_MD5Update( ctx, md5_padding, padn );

+    CRYPT_MD5Update( ctx, msglen, 8 );

+    PUT_FX_DWORD( ctx->state[0], digest,  0 );

+    PUT_FX_DWORD( ctx->state[1], digest,  4 );

+    PUT_FX_DWORD( ctx->state[2], digest,  8 );

+    PUT_FX_DWORD( ctx->state[3], digest, 12 );

+}

+void CRYPT_MD5Generate(FX_LPCBYTE input, FX_DWORD length, FX_BYTE digest[16])

+{

+    md5_context ctx;

+    CRYPT_MD5Start(&ctx);

+    CRYPT_MD5Update(&ctx, input, length);

+    CRYPT_MD5Finish(&ctx, digest);

+}

+static FX_BOOL (*g_PubKeyDecryptor)(FX_LPCBYTE pData, FX_DWORD size, FX_LPBYTE data_buf, FX_DWORD& data_len) = NULL;

+void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(FX_LPCBYTE pData, FX_DWORD size, FX_LPBYTE data_buf, FX_DWORD& data_len))

+{

+    g_PubKeyDecryptor = func;

+}

+#ifdef __cplusplus

+};

+#endif

diff --git a/core/src/fdrm/crypto/fx_crypt_aes.cpp b/core/src/fdrm/crypto/fx_crypt_aes.cpp
new file mode 100644
index 0000000..b8644d1
--- /dev/null
+++ b/core/src/fdrm/crypto/fx_crypt_aes.cpp
@@ -0,0 +1,1013 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#include "../../../include/fxcrt/fx_basic.h"

+#include "../../../include/fdrm/fx_crypt.h"

+#ifdef __cplusplus

+extern "C" {

+#endif

+#define MAX_NR 14

+#define MAX_NK 8

+#define MAX_NB 8

+#define mulby2(x) ( ((x&0x7F) << 1) ^ (x & 0x80 ? 0x1B : 0) )

+#define GET_32BIT_MSB_FIRST(cp) \

+    (((unsigned long)(unsigned char)(cp)[3]) | \

+     ((unsigned long)(unsigned char)(cp)[2] << 8) | \

+     ((unsigned long)(unsigned char)(cp)[1] << 16) | \

+     ((unsigned long)(unsigned char)(cp)[0] << 24))

+#define PUT_32BIT_MSB_FIRST(cp, value) do { \

+        (cp)[3] = (value); \

+        (cp)[2] = (value) >> 8; \

+        (cp)[1] = (value) >> 16; \

+        (cp)[0] = (value) >> 24; } while (0)

+struct AESContext {

+    unsigned int keysched[(MAX_NR + 1) * MAX_NB];

+    unsigned int invkeysched[(MAX_NR + 1) * MAX_NB];

+    void (*encrypt) (AESContext * ctx, unsigned int * block);

+    void (*decrypt) (AESContext * ctx, unsigned int * block);

+    unsigned int iv[MAX_NB];

+    int Nb, Nr;

+};

+static const unsigned char Sbox[256] = {

+    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,

+    0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,

+    0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,

+    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,

+    0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,

+    0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,

+    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,

+    0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,

+    0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,

+    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,

+    0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,

+    0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,

+    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,

+    0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,

+    0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,

+    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,

+    0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,

+    0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,

+    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,

+    0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,

+    0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,

+    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,

+    0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,

+    0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,

+    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,

+    0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,

+    0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,

+    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,

+    0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,

+    0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,

+    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,

+    0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16

+};

+static const unsigned char Sboxinv[256] = {

+    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,

+    0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,

+    0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,

+    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,

+    0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,

+    0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,

+    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,

+    0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,

+    0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,

+    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,

+    0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,

+    0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,

+    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,

+    0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,

+    0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,

+    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,

+    0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,

+    0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,

+    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,

+    0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,

+    0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,

+    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,

+    0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,

+    0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,

+    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,

+    0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,

+    0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,

+    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,

+    0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,

+    0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,

+    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,

+    0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d

+};

+static const unsigned int E0[256] = {

+    0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d,

+    0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554,

+    0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d,

+    0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a,

+    0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87,

+    0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b,

+    0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea,

+    0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b,

+    0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a,

+    0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f,

+    0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108,

+    0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f,

+    0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e,

+    0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5,

+    0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d,

+    0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f,

+    0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e,

+    0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb,

+    0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce,

+    0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497,

+    0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c,

+    0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed,

+    0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b,

+    0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a,

+    0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16,

+    0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594,

+    0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81,

+    0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3,

+    0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a,

+    0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504,

+    0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163,

+    0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d,

+    0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f,

+    0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739,

+    0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47,

+    0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395,

+    0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f,

+    0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883,

+    0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c,

+    0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76,

+    0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e,

+    0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4,

+    0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6,

+    0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b,

+    0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,

+    0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0,

+    0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25,

+    0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,

+    0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72,

+    0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651,

+    0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,

+    0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85,

+    0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa,

+    0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12,

+    0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0,

+    0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9,

+    0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,

+    0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7,

+    0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920,

+    0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,

+    0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17,

+    0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8,

+    0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,

+    0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a,

+};

+static const unsigned int E1[256] = {

+    0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,

+    0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,

+    0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,

+    0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676,

+    0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d,

+    0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,

+    0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf,

+    0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0,

+    0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,

+    0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc,

+    0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1,

+    0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,

+    0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3,

+    0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a,

+    0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,

+    0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575,

+    0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a,

+    0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,

+    0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3,

+    0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484,

+    0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,

+    0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b,

+    0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939,

+    0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,

+    0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb,

+    0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585,

+    0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,

+    0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8,

+    0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f,

+    0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,

+    0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121,

+    0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2,

+    0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,

+    0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717,

+    0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d,

+    0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,

+    0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc,

+    0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888,

+    0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,

+    0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb,

+    0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a,

+    0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,

+    0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262,

+    0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979,

+    0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,

+    0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9,

+    0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea,

+    0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,

+    0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e,

+    0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6,

+    0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,

+    0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a,

+    0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666,

+    0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,

+    0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9,

+    0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e,

+    0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,

+    0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494,

+    0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9,

+    0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,

+    0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d,

+    0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868,

+    0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,

+    0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616,

+};

+static const unsigned int E2[256] = {

+    0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b,

+    0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5,

+    0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b,

+    0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76,

+    0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d,

+    0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0,

+    0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af,

+    0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0,

+    0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26,

+    0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc,

+    0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1,

+    0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15,

+    0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3,

+    0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a,

+    0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2,

+    0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75,

+    0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a,

+    0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0,

+    0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3,

+    0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384,

+    0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed,

+    0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b,

+    0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239,

+    0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf,

+    0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb,

+    0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185,

+    0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f,

+    0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8,

+    0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f,

+    0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5,

+    0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221,

+    0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2,

+    0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec,

+    0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17,

+    0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d,

+    0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673,

+    0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc,

+    0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88,

+    0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814,

+    0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb,

+    0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a,

+    0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c,

+    0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462,

+    0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279,

+    0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,

+    0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9,

+    0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea,

+    0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008,

+    0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e,

+    0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6,

+    0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,

+    0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a,

+    0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66,

+    0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e,

+    0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9,

+    0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e,

+    0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,

+    0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394,

+    0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9,

+    0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,

+    0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d,

+    0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068,

+    0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f,

+    0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16,

+};

+static const unsigned int E3[256] = {

+    0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6,

+    0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491,

+    0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56,

+    0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec,

+    0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa,

+    0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb,

+    0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45,

+    0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b,

+    0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c,

+    0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83,

+    0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9,

+    0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a,

+    0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d,

+    0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f,

+    0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf,

+    0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea,

+    0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34,

+    0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b,

+    0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d,

+    0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713,

+    0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1,

+    0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6,

+    0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72,

+    0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85,

+    0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed,

+    0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411,

+    0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe,

+    0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b,

+    0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05,

+    0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1,

+    0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342,

+    0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf,

+    0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3,

+    0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e,

+    0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a,

+    0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6,

+    0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3,

+    0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b,

+    0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28,

+    0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad,

+    0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14,

+    0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8,

+    0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4,

+    0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2,

+    0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,

+    0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049,

+    0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf,

+    0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810,

+    0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c,

+    0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197,

+    0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,

+    0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f,

+    0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc,

+    0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c,

+    0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069,

+    0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927,

+    0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,

+    0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733,

+    0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9,

+    0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,

+    0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a,

+    0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0,

+    0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e,

+    0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c,

+};

+static const unsigned int D0[256] = {

+    0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96,

+    0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393,

+    0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25,

+    0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f,

+    0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1,

+    0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6,

+    0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da,

+    0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844,

+    0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd,

+    0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4,

+    0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45,

+    0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94,

+    0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7,

+    0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a,

+    0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5,

+    0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c,

+    0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1,

+    0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a,

+    0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75,

+    0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051,

+    0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46,

+    0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff,

+    0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77,

+    0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb,

+    0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000,

+    0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e,

+    0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927,

+    0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a,

+    0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e,

+    0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16,

+    0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d,

+    0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8,

+    0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd,

+    0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34,

+    0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163,

+    0xd731dcca, 0x42638510, 0x13972240, 0x84c61120,

+    0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d,

+    0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0,

+    0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422,

+    0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef,

+    0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36,

+    0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4,

+    0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662,

+    0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5,

+    0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3,

+    0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b,

+    0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8,

+    0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6,

+    0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6,

+    0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0,

+    0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815,

+    0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f,

+    0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df,

+    0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f,

+    0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e,

+    0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713,

+    0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89,

+    0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c,

+    0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf,

+    0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86,

+    0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f,

+    0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541,

+    0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190,

+    0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742,

+};

+static const unsigned int D1[256] = {

+    0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,

+    0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,

+    0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,

+    0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3,

+    0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0,

+    0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,

+    0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259,

+    0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8,

+    0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,

+    0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a,

+    0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f,

+    0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,

+    0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8,

+    0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab,

+    0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708,

+    0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682,

+    0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2,

+    0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,

+    0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb,

+    0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10,

+    0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,

+    0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015,

+    0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e,

+    0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,

+    0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000,

+    0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72,

+    0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,

+    0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e,

+    0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91,

+    0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,

+    0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17,

+    0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9,

+    0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,

+    0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e,

+    0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1,

+    0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,

+    0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1,

+    0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3,

+    0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,

+    0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390,

+    0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b,

+    0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,

+    0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46,

+    0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af,

+    0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,

+    0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb,

+    0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a,

+    0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,

+    0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c,

+    0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266,

+    0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,

+    0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6,

+    0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604,

+    0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,

+    0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41,

+    0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647,

+    0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,

+    0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1,

+    0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737,

+    0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,

+    0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340,

+    0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95,

+    0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,

+    0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857,

+};

+static const unsigned int D2[256] = {

+    0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27,

+    0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3,

+    0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502,

+    0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562,

+    0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe,

+    0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3,

+    0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552,

+    0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9,

+    0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9,

+    0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce,

+    0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253,

+    0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908,

+    0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b,

+    0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655,

+    0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337,

+    0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16,

+    0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69,

+    0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6,

+    0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6,

+    0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e,

+    0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6,

+    0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050,

+    0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9,

+    0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8,

+    0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000,

+    0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a,

+    0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d,

+    0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436,

+    0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b,

+    0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12,

+    0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b,

+    0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e,

+    0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f,

+    0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb,

+    0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4,

+    0xdccad731, 0x85104263, 0x22401397, 0x112084c6,

+    0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729,

+    0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1,

+    0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9,

+    0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233,

+    0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4,

+    0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad,

+    0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e,

+    0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3,

+    0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25,

+    0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b,

+    0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f,

+    0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15,

+    0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0,

+    0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2,

+    0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7,

+    0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791,

+    0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496,

+    0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665,

+    0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b,

+    0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6,

+    0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13,

+    0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47,

+    0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7,

+    0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844,

+    0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3,

+    0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d,

+    0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456,

+    0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8,

+};

+static const unsigned int D3[256] = {

+    0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a,

+    0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b,

+    0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5,

+    0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5,

+    0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d,

+    0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b,

+    0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95,

+    0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e,

+    0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27,

+    0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d,

+    0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562,

+    0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9,

+    0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752,

+    0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66,

+    0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3,

+    0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced,

+    0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e,

+    0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4,

+    0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4,

+    0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd,

+    0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d,

+    0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60,

+    0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767,

+    0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79,

+    0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000,

+    0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c,

+    0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736,

+    0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24,

+    0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b,

+    0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c,

+    0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12,

+    0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814,

+    0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3,

+    0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b,

+    0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8,

+    0x31dccad7, 0x63851042, 0x97224013, 0xc6112084,

+    0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7,

+    0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077,

+    0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247,

+    0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22,

+    0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698,

+    0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f,

+    0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254,

+    0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582,

+    0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf,

+    0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb,

+    0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883,

+    0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef,

+    0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629,

+    0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035,

+    0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533,

+    0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17,

+    0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4,

+    0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46,

+    0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb,

+    0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d,

+    0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb,

+    0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a,

+    0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73,

+    0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678,

+    0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2,

+    0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff,

+    0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064,

+    0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0,

+};

+#define ADD_ROUND_KEY_4 (block[0]^=*keysched++, block[1]^=*keysched++, \

+                         block[2]^=*keysched++, block[3]^=*keysched++)

+#define ADD_ROUND_KEY_6 (block[0]^=*keysched++, block[1]^=*keysched++, \

+                         block[2]^=*keysched++, block[3]^=*keysched++, \

+                         block[4]^=*keysched++, block[5]^=*keysched++)

+#define ADD_ROUND_KEY_8 (block[0]^=*keysched++, block[1]^=*keysched++, \

+                         block[2]^=*keysched++, block[3]^=*keysched++, \

+                         block[4]^=*keysched++, block[5]^=*keysched++, \

+                         block[6]^=*keysched++, block[7]^=*keysched++)

+#define MOVEWORD(i) ( block[i] = newstate[i] )

+#undef MAKEWORD

+#define MAKEWORD(i) ( newstate[i] = (E0[(block[i] >> 24) & 0xFF] ^ \

+                                     E1[(block[(i+C1)%Nb] >> 16) & 0xFF] ^ \

+                                     E2[(block[(i+C2)%Nb] >> 8) & 0xFF] ^ \

+                                     E3[block[(i+C3)%Nb] & 0xFF]) )

+#define LASTWORD(i) ( newstate[i] = (Sbox[(block[i] >> 24) & 0xFF] << 24) | \

+                                    (Sbox[(block[(i+C1)%Nb] >> 16) & 0xFF] << 16) | \

+                                    (Sbox[(block[(i+C2)%Nb] >>  8) & 0xFF] <<  8) | \

+                                    (Sbox[(block[(i+C3)%Nb]      ) & 0xFF]      ) )

+static void aes_encrypt_nb_4(AESContext * ctx, unsigned int * block)

+{

+    int i;

+    static const int C1 = 1, C2 = 2, C3 = 3, Nb = 4;

+    unsigned int *keysched = ctx->keysched;

+    unsigned int newstate[4];

+    for (i = 0; i < ctx->Nr - 1; i++) {

+        ADD_ROUND_KEY_4;

+        MAKEWORD(0);

+        MAKEWORD(1);

+        MAKEWORD(2);

+        MAKEWORD(3);

+        MOVEWORD(0);

+        MOVEWORD(1);

+        MOVEWORD(2);

+        MOVEWORD(3);

+    }

+    ADD_ROUND_KEY_4;

+    LASTWORD(0);

+    LASTWORD(1);

+    LASTWORD(2);

+    LASTWORD(3);

+    MOVEWORD(0);

+    MOVEWORD(1);

+    MOVEWORD(2);

+    MOVEWORD(3);

+    ADD_ROUND_KEY_4;

+}

+static void aes_encrypt_nb_6(AESContext * ctx, unsigned int * block)

+{

+    int i;

+    static const int C1 = 1, C2 = 2, C3 = 3, Nb = 6;

+    unsigned int *keysched = ctx->keysched;

+    unsigned int newstate[6];

+    for (i = 0; i < ctx->Nr - 1; i++) {

+        ADD_ROUND_KEY_6;

+        MAKEWORD(0);

+        MAKEWORD(1);

+        MAKEWORD(2);

+        MAKEWORD(3);

+        MAKEWORD(4);

+        MAKEWORD(5);

+        MOVEWORD(0);

+        MOVEWORD(1);

+        MOVEWORD(2);

+        MOVEWORD(3);

+        MOVEWORD(4);

+        MOVEWORD(5);

+    }

+    ADD_ROUND_KEY_6;

+    LASTWORD(0);

+    LASTWORD(1);

+    LASTWORD(2);

+    LASTWORD(3);

+    LASTWORD(4);

+    LASTWORD(5);

+    MOVEWORD(0);

+    MOVEWORD(1);

+    MOVEWORD(2);

+    MOVEWORD(3);

+    MOVEWORD(4);

+    MOVEWORD(5);

+    ADD_ROUND_KEY_6;

+}

+static void aes_encrypt_nb_8(AESContext * ctx, unsigned int * block)

+{

+    int i;

+    static const int C1 = 1, C2 = 3, C3 = 4, Nb = 8;

+    unsigned int *keysched = ctx->keysched;

+    unsigned int newstate[8];

+    for (i = 0; i < ctx->Nr - 1; i++) {

+        ADD_ROUND_KEY_8;

+        MAKEWORD(0);

+        MAKEWORD(1);

+        MAKEWORD(2);

+        MAKEWORD(3);

+        MAKEWORD(4);

+        MAKEWORD(5);

+        MAKEWORD(6);

+        MAKEWORD(7);

+        MOVEWORD(0);

+        MOVEWORD(1);

+        MOVEWORD(2);

+        MOVEWORD(3);

+        MOVEWORD(4);

+        MOVEWORD(5);

+        MOVEWORD(6);

+        MOVEWORD(7);

+    }

+    ADD_ROUND_KEY_8;

+    LASTWORD(0);

+    LASTWORD(1);

+    LASTWORD(2);

+    LASTWORD(3);

+    LASTWORD(4);

+    LASTWORD(5);

+    LASTWORD(6);

+    LASTWORD(7);

+    MOVEWORD(0);

+    MOVEWORD(1);

+    MOVEWORD(2);

+    MOVEWORD(3);

+    MOVEWORD(4);

+    MOVEWORD(5);

+    MOVEWORD(6);

+    MOVEWORD(7);

+    ADD_ROUND_KEY_8;

+}

+#undef MAKEWORD

+#undef LASTWORD

+#define MAKEWORD(i) ( newstate[i] = (D0[(block[i] >> 24) & 0xFF] ^ \

+                                     D1[(block[(i+C1)%Nb] >> 16) & 0xFF] ^ \

+                                     D2[(block[(i+C2)%Nb] >> 8) & 0xFF] ^ \

+                                     D3[block[(i+C3)%Nb] & 0xFF]) )

+#define LASTWORD(i) (newstate[i] = (Sboxinv[(block[i] >> 24) & 0xFF] << 24) | \

+                                   (Sboxinv[(block[(i+C1)%Nb] >> 16) & 0xFF] << 16) | \

+                                   (Sboxinv[(block[(i+C2)%Nb] >>  8) & 0xFF] <<  8) | \

+                                   (Sboxinv[(block[(i+C3)%Nb]      ) & 0xFF]      ) )

+static void aes_decrypt_nb_4(AESContext * ctx, unsigned int * block)

+{

+    int i;

+    static const int C1 = 4 - 1, C2 = 4 - 2, C3 = 4 - 3, Nb = 4;

+    unsigned int *keysched = ctx->invkeysched;

+    unsigned int newstate[4];

+    for (i = 0; i < ctx->Nr - 1; i++) {

+        ADD_ROUND_KEY_4;

+        MAKEWORD(0);

+        MAKEWORD(1);

+        MAKEWORD(2);

+        MAKEWORD(3);

+        MOVEWORD(0);

+        MOVEWORD(1);

+        MOVEWORD(2);

+        MOVEWORD(3);

+    }

+    ADD_ROUND_KEY_4;

+    LASTWORD(0);

+    LASTWORD(1);

+    LASTWORD(2);

+    LASTWORD(3);

+    MOVEWORD(0);

+    MOVEWORD(1);

+    MOVEWORD(2);

+    MOVEWORD(3);

+    ADD_ROUND_KEY_4;

+}

+static void aes_decrypt_nb_6(AESContext * ctx, unsigned int * block)

+{

+    int i;

+    static const int C1 = 6 - 1, C2 = 6 - 2, C3 = 6 - 3, Nb = 6;

+    unsigned int *keysched = ctx->invkeysched;

+    unsigned int newstate[6];

+    for (i = 0; i < ctx->Nr - 1; i++) {

+        ADD_ROUND_KEY_6;

+        MAKEWORD(0);

+        MAKEWORD(1);

+        MAKEWORD(2);

+        MAKEWORD(3);

+        MAKEWORD(4);

+        MAKEWORD(5);

+        MOVEWORD(0);

+        MOVEWORD(1);

+        MOVEWORD(2);

+        MOVEWORD(3);

+        MOVEWORD(4);

+        MOVEWORD(5);

+    }

+    ADD_ROUND_KEY_6;

+    LASTWORD(0);

+    LASTWORD(1);

+    LASTWORD(2);

+    LASTWORD(3);

+    LASTWORD(4);

+    LASTWORD(5);

+    MOVEWORD(0);

+    MOVEWORD(1);

+    MOVEWORD(2);

+    MOVEWORD(3);

+    MOVEWORD(4);

+    MOVEWORD(5);

+    ADD_ROUND_KEY_6;

+}

+static void aes_decrypt_nb_8(AESContext * ctx, unsigned int * block)

+{

+    int i;

+    static const int C1 = 8 - 1, C2 = 8 - 3, C3 = 8 - 4, Nb = 8;

+    unsigned int *keysched = ctx->invkeysched;

+    unsigned int newstate[8];

+    for (i = 0; i < ctx->Nr - 1; i++) {

+        ADD_ROUND_KEY_8;

+        MAKEWORD(0);

+        MAKEWORD(1);

+        MAKEWORD(2);

+        MAKEWORD(3);

+        MAKEWORD(4);

+        MAKEWORD(5);

+        MAKEWORD(6);

+        MAKEWORD(7);

+        MOVEWORD(0);

+        MOVEWORD(1);

+        MOVEWORD(2);

+        MOVEWORD(3);

+        MOVEWORD(4);

+        MOVEWORD(5);

+        MOVEWORD(6);

+        MOVEWORD(7);

+    }

+    ADD_ROUND_KEY_8;

+    LASTWORD(0);

+    LASTWORD(1);

+    LASTWORD(2);

+    LASTWORD(3);

+    LASTWORD(4);

+    LASTWORD(5);

+    LASTWORD(6);

+    LASTWORD(7);

+    MOVEWORD(0);

+    MOVEWORD(1);

+    MOVEWORD(2);

+    MOVEWORD(3);

+    MOVEWORD(4);

+    MOVEWORD(5);

+    MOVEWORD(6);

+    MOVEWORD(7);

+    ADD_ROUND_KEY_8;

+}

+#undef MAKEWORD

+#undef LASTWORD

+static void aes_setup(AESContext * ctx, int blocklen,

+                      const unsigned char *key, int keylen)

+{

+    int i, j, Nk, rconst;

+    ASSERT(blocklen == 16 || blocklen == 24 || blocklen == 32);

+    ASSERT(keylen == 16 || keylen == 24 || keylen == 32);

+    Nk = keylen / 4;

+    ctx->Nb = blocklen / 4;

+    ctx->Nr = 6 + (ctx->Nb > Nk ? ctx->Nb : Nk);

+    if (ctx->Nb == 8) {

+        ctx->encrypt = aes_encrypt_nb_8, ctx->decrypt = aes_decrypt_nb_8;

+    } else if (ctx->Nb == 6) {

+        ctx->encrypt = aes_encrypt_nb_6, ctx->decrypt = aes_decrypt_nb_6;

+    } else if (ctx->Nb == 4) {

+        ctx->encrypt = aes_encrypt_nb_4, ctx->decrypt = aes_decrypt_nb_4;

+    }

+    rconst = 1;

+    for (i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) {

+        if (i < Nk) {

+            ctx->keysched[i] = GET_32BIT_MSB_FIRST(key + 4 * i);

+        } else {

+            unsigned int temp = ctx->keysched[i - 1];

+            if (i % Nk == 0) {

+                int a, b, c, d;

+                a = (temp >> 16) & 0xFF;

+                b = (temp >> 8) & 0xFF;

+                c = (temp >> 0) & 0xFF;

+                d = (temp >> 24) & 0xFF;

+                temp = Sbox[a] ^ rconst;

+                temp = (temp << 8) | Sbox[b];

+                temp = (temp << 8) | Sbox[c];

+                temp = (temp << 8) | Sbox[d];

+                rconst = mulby2(rconst);

+            } else if (i % Nk == 4 && Nk > 6) {

+                int a, b, c, d;

+                a = (temp >> 24) & 0xFF;

+                b = (temp >> 16) & 0xFF;

+                c = (temp >> 8) & 0xFF;

+                d = (temp >> 0) & 0xFF;

+                temp = Sbox[a];

+                temp = (temp << 8) | Sbox[b];

+                temp = (temp << 8) | Sbox[c];

+                temp = (temp << 8) | Sbox[d];

+            }

+            ctx->keysched[i] = ctx->keysched[i - Nk] ^ temp;

+        }

+    }

+    for (i = 0; i <= ctx->Nr; i++) {

+        for (j = 0; j < ctx->Nb; j++) {

+            unsigned int temp;

+            temp = ctx->keysched[(ctx->Nr - i) * ctx->Nb + j];

+            if (i != 0 && i != ctx->Nr) {

+                int a, b, c, d;

+                a = (temp >> 24) & 0xFF;

+                b = (temp >> 16) & 0xFF;

+                c = (temp >> 8) & 0xFF;

+                d = (temp >> 0) & 0xFF;

+                temp = D0[Sbox[a]];

+                temp ^= D1[Sbox[b]];

+                temp ^= D2[Sbox[c]];

+                temp ^= D3[Sbox[d]];

+            }

+            ctx->invkeysched[i * ctx->Nb + j] = temp;

+        }

+    }

+}

+static void aes_decrypt(AESContext * ctx, unsigned int * block)

+{

+    ctx->decrypt(ctx, block);

+}

+static void aes_decrypt_cbc(unsigned char *dest, const unsigned char *src, int len, AESContext * ctx)

+{

+    unsigned int iv[4], x[4], ct[4];

+    int i;

+    ASSERT((len & 15) == 0);

+    FXSYS_memcpy32(iv, ctx->iv, sizeof(iv));

+    while (len > 0) {

+        for (i = 0; i < 4; i++) {

+            x[i] = ct[i] = GET_32BIT_MSB_FIRST(src + 4 * i);

+        }

+        aes_decrypt(ctx, x);

+        for (i = 0; i < 4; i++) {

+            PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i] ^ x[i]);

+            iv[i] = ct[i];

+        }

+        dest += 16;

+        src += 16;

+        len -= 16;

+    }

+    FXSYS_memcpy32(ctx->iv, iv, sizeof(iv));

+}

+static void aes_encrypt(AESContext * ctx, unsigned int * block)

+{

+    ctx->encrypt(ctx, block);

+}

+static void aes_encrypt_cbc(unsigned char *dest, const unsigned char *src, int len, AESContext * ctx)

+{

+    unsigned int iv[4];

+    int i;

+    ASSERT((len & 15) == 0);

+    FXSYS_memcpy32(iv, ctx->iv, sizeof(iv));

+    while (len > 0) {

+        for (i = 0; i < 4; i++) {

+            iv[i] ^= GET_32BIT_MSB_FIRST(src + 4 * i);

+        }

+        aes_encrypt(ctx, iv);

+        for (i = 0; i < 4; i++) {

+            PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i]);

+        }

+        dest += 16;

+        src += 16;

+        len -= 16;

+    }

+    FXSYS_memcpy32(ctx->iv, iv, sizeof(iv));

+}

+void CRYPT_AESSetKey(FX_LPVOID context, FX_DWORD blocklen, FX_LPCBYTE key, FX_DWORD keylen, FX_BOOL bEncrypt)

+{

+    aes_setup((AESContext*)context, blocklen, key, keylen);

+}

+void CRYPT_AESSetIV(FX_LPVOID context, FX_LPCBYTE iv)

+{

+    int i;

+    for (i = 0; i < ((AESContext*)context)->Nb; i++) {

+        ((AESContext*)context)->iv[i] = GET_32BIT_MSB_FIRST(iv + 4 * i);

+    }

+}

+void CRYPT_AESDecrypt(FX_LPVOID context, FX_LPBYTE dest, FX_LPCBYTE src, FX_DWORD len)

+{

+    aes_decrypt_cbc(dest, src, len, (AESContext*)context);

+}

+void CRYPT_AESEncrypt(FX_LPVOID context, FX_LPBYTE dest, FX_LPCBYTE src, FX_DWORD len)

+{

+    aes_encrypt_cbc(dest, src, len, (AESContext*)context);

+}

+#ifdef __cplusplus

+};

+#endif

diff --git a/core/src/fdrm/crypto/fx_crypt_sha.cpp b/core/src/fdrm/crypto/fx_crypt_sha.cpp
new file mode 100644
index 0000000..acabcb7
--- /dev/null
+++ b/core/src/fdrm/crypto/fx_crypt_sha.cpp
@@ -0,0 +1,742 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#include "../../../include/fxcrt/fx_basic.h"

+#include "../../../include/fdrm/fx_crypt.h"

+#ifdef __cplusplus

+extern "C" {

+#endif

+typedef struct {

+    unsigned int h[5];

+    unsigned char block[64];

+    int blkused;

+    unsigned int lenhi, lenlo;

+} SHA_State;

+#define rol(x,y) ( ((x) << (y)) | (((unsigned int)x) >> (32-y)) )

+static void SHA_Core_Init(unsigned int h[5])

+{

+    h[0] = 0x67452301;

+    h[1] = 0xefcdab89;

+    h[2] = 0x98badcfe;

+    h[3] = 0x10325476;

+    h[4] = 0xc3d2e1f0;

+}

+static void SHATransform(unsigned int * digest, unsigned int * block)

+{

+    unsigned int w[80];

+    unsigned int a, b, c, d, e;

+    int t;

+    for (t = 0; t < 16; t++) {

+        w[t] = block[t];

+    }

+    for (t = 16; t < 80; t++) {

+        unsigned int tmp = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];

+        w[t] = rol(tmp, 1);

+    }

+    a = digest[0];

+    b = digest[1];

+    c = digest[2];

+    d = digest[3];

+    e = digest[4];

+    for (t = 0; t < 20; t++) {

+        unsigned int tmp =

+            rol(a, 5) + ((b & c) | (d & ~b)) + e + w[t] + 0x5a827999;

+        e = d;

+        d = c;

+        c = rol(b, 30);

+        b = a;

+        a = tmp;

+    }

+    for (t = 20; t < 40; t++) {

+        unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0x6ed9eba1;

+        e = d;

+        d = c;

+        c = rol(b, 30);

+        b = a;

+        a = tmp;

+    }

+    for (t = 40; t < 60; t++) {

+        unsigned int tmp = rol(a,

+                               5) + ((b & c) | (b & d) | (c & d)) + e + w[t] +

+                           0x8f1bbcdc;

+        e = d;

+        d = c;

+        c = rol(b, 30);

+        b = a;

+        a = tmp;

+    }

+    for (t = 60; t < 80; t++) {

+        unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0xca62c1d6;

+        e = d;

+        d = c;

+        c = rol(b, 30);

+        b = a;

+        a = tmp;

+    }

+    digest[0] += a;

+    digest[1] += b;

+    digest[2] += c;

+    digest[3] += d;

+    digest[4] += e;

+}

+void CRYPT_SHA1Start(FX_LPVOID context)

+{

+    SHA_State * s = (SHA_State*)context;

+    SHA_Core_Init(s->h);

+    s->blkused = 0;

+    s->lenhi = s->lenlo = 0;

+}

+void CRYPT_SHA1Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size)

+{

+    SHA_State * s = (SHA_State*)context;

+    unsigned char *q = (unsigned char *)data;

+    unsigned int wordblock[16];

+    int len = size;

+    unsigned int lenw = len;

+    int i;

+    s->lenlo += lenw;

+    s->lenhi += (s->lenlo < lenw);

+    if (s->blkused && s->blkused + len < 64) {

+        FXSYS_memcpy32(s->block + s->blkused, q, len);

+        s->blkused += len;

+    } else {

+        while (s->blkused + len >= 64) {

+            FXSYS_memcpy32(s->block + s->blkused, q, 64 - s->blkused);

+            q += 64 - s->blkused;

+            len -= 64 - s->blkused;

+            for (i = 0; i < 16; i++) {

+                wordblock[i] =

+                    (((unsigned int) s->block[i * 4 + 0]) << 24) |

+                    (((unsigned int) s->block[i * 4 + 1]) << 16) |

+                    (((unsigned int) s->block[i * 4 + 2]) << 8) |

+                    (((unsigned int) s->block[i * 4 + 3]) << 0);

+            }

+            SHATransform(s->h, wordblock);

+            s->blkused = 0;

+        }

+        FXSYS_memcpy32(s->block, q, len);

+        s->blkused = len;

+    }

+}

+void CRYPT_SHA1Finish(FX_LPVOID context, FX_BYTE digest[20])

+{

+    SHA_State * s = (SHA_State*)context;

+    int i;

+    int pad;

+    unsigned char c[64];

+    unsigned int lenhi, lenlo;

+    if (s->blkused >= 56) {

+        pad = 56 + 64 - s->blkused;

+    } else {

+        pad = 56 - s->blkused;

+    }

+    lenhi = (s->lenhi << 3) | (s->lenlo >> (32 - 3));

+    lenlo = (s->lenlo << 3);

+    FXSYS_memset32(c, 0, pad);

+    c[0] = 0x80;

+    CRYPT_SHA1Update(s, c, pad);

+    c[0] = (lenhi >> 24) & 0xFF;

+    c[1] = (lenhi >> 16) & 0xFF;

+    c[2] = (lenhi >> 8) & 0xFF;

+    c[3] = (lenhi >> 0) & 0xFF;

+    c[4] = (lenlo >> 24) & 0xFF;

+    c[5] = (lenlo >> 16) & 0xFF;

+    c[6] = (lenlo >> 8) & 0xFF;

+    c[7] = (lenlo >> 0) & 0xFF;

+    CRYPT_SHA1Update(s, c, 8);

+    for (i = 0; i < 5; i++) {

+        digest[i * 4] = (s->h[i] >> 24) & 0xFF;

+        digest[i * 4 + 1] = (s->h[i] >> 16) & 0xFF;

+        digest[i * 4 + 2] = (s->h[i] >> 8) & 0xFF;

+        digest[i * 4 + 3] = (s->h[i]) & 0xFF;

+    }

+}

+void CRYPT_SHA1Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[20])

+{

+    SHA_State s;

+    CRYPT_SHA1Start(&s);

+    CRYPT_SHA1Update(&s, data, size);

+    CRYPT_SHA1Finish(&s, digest);

+}

+typedef struct {

+    FX_DWORD total[2];

+    FX_DWORD state[8];

+    FX_BYTE buffer[64];

+}

+sha256_context;

+#define GET_FX_DWORD(n,b,i)                       \

+    {                                               \

+        (n) = ( (FX_DWORD) (b)[(i)    ] << 24 )       \

+              | ( (FX_DWORD) (b)[(i) + 1] << 16 )       \

+              | ( (FX_DWORD) (b)[(i) + 2] <<  8 )       \

+              | ( (FX_DWORD) (b)[(i) + 3]       );      \

+    }

+#define PUT_FX_DWORD(n,b,i)                       \

+    {                                               \

+        (b)[(i)    ] = (FX_BYTE) ( (n) >> 24 );       \

+        (b)[(i) + 1] = (FX_BYTE) ( (n) >> 16 );       \

+        (b)[(i) + 2] = (FX_BYTE) ( (n) >>  8 );       \

+        (b)[(i) + 3] = (FX_BYTE) ( (n)       );       \

+    }

+void CRYPT_SHA256Start( FX_LPVOID context )

+{

+    sha256_context *ctx = (sha256_context *)context;

+    ctx->total[0] = 0;

+    ctx->total[1] = 0;

+    ctx->state[0] = 0x6A09E667;

+    ctx->state[1] = 0xBB67AE85;

+    ctx->state[2] = 0x3C6EF372;

+    ctx->state[3] = 0xA54FF53A;

+    ctx->state[4] = 0x510E527F;

+    ctx->state[5] = 0x9B05688C;

+    ctx->state[6] = 0x1F83D9AB;

+    ctx->state[7] = 0x5BE0CD19;

+}

+static void sha256_process( sha256_context *ctx, const FX_BYTE data[64] )

+{

+    FX_DWORD temp1, temp2, W[64];

+    FX_DWORD A, B, C, D, E, F, G, H;

+    GET_FX_DWORD( W[0],  data,  0 );

+    GET_FX_DWORD( W[1],  data,  4 );

+    GET_FX_DWORD( W[2],  data,  8 );

+    GET_FX_DWORD( W[3],  data, 12 );

+    GET_FX_DWORD( W[4],  data, 16 );

+    GET_FX_DWORD( W[5],  data, 20 );

+    GET_FX_DWORD( W[6],  data, 24 );

+    GET_FX_DWORD( W[7],  data, 28 );

+    GET_FX_DWORD( W[8],  data, 32 );

+    GET_FX_DWORD( W[9],  data, 36 );

+    GET_FX_DWORD( W[10], data, 40 );

+    GET_FX_DWORD( W[11], data, 44 );

+    GET_FX_DWORD( W[12], data, 48 );

+    GET_FX_DWORD( W[13], data, 52 );

+    GET_FX_DWORD( W[14], data, 56 );

+    GET_FX_DWORD( W[15], data, 60 );

+#define  SHR(x,n) ((x & 0xFFFFFFFF) >> n)

+#define ROTR(x,n) (SHR(x,n) | (x << (32 - n)))

+#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^  SHR(x, 3))

+#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^  SHR(x,10))

+#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))

+#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))

+#define F0(x,y,z) ((x & y) | (z & (x | y)))

+#define F1(x,y,z) (z ^ (x & (y ^ z)))

+#define R(t)                                    \

+    (                                               \

+            W[t] = S1(W[t -  2]) + W[t -  7] +          \

+                   S0(W[t - 15]) + W[t - 16]            \

+    )

+#define P(a,b,c,d,e,f,g,h,x,K)                  \

+    {                                               \

+        temp1 = h + S3(e) + F1(e,f,g) + K + x;      \

+        temp2 = S2(a) + F0(a,b,c);                  \

+        d += temp1; h = temp1 + temp2;              \

+    }

+    A = ctx->state[0];

+    B = ctx->state[1];

+    C = ctx->state[2];

+    D = ctx->state[3];

+    E = ctx->state[4];

+    F = ctx->state[5];

+    G = ctx->state[6];

+    H = ctx->state[7];

+    P( A, B, C, D, E, F, G, H, W[ 0], 0x428A2F98 );

+    P( H, A, B, C, D, E, F, G, W[ 1], 0x71374491 );

+    P( G, H, A, B, C, D, E, F, W[ 2], 0xB5C0FBCF );

+    P( F, G, H, A, B, C, D, E, W[ 3], 0xE9B5DBA5 );

+    P( E, F, G, H, A, B, C, D, W[ 4], 0x3956C25B );

+    P( D, E, F, G, H, A, B, C, W[ 5], 0x59F111F1 );

+    P( C, D, E, F, G, H, A, B, W[ 6], 0x923F82A4 );

+    P( B, C, D, E, F, G, H, A, W[ 7], 0xAB1C5ED5 );

+    P( A, B, C, D, E, F, G, H, W[ 8], 0xD807AA98 );

+    P( H, A, B, C, D, E, F, G, W[ 9], 0x12835B01 );

+    P( G, H, A, B, C, D, E, F, W[10], 0x243185BE );

+    P( F, G, H, A, B, C, D, E, W[11], 0x550C7DC3 );

+    P( E, F, G, H, A, B, C, D, W[12], 0x72BE5D74 );

+    P( D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE );

+    P( C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7 );

+    P( B, C, D, E, F, G, H, A, W[15], 0xC19BF174 );

+    P( A, B, C, D, E, F, G, H, R(16), 0xE49B69C1 );

+    P( H, A, B, C, D, E, F, G, R(17), 0xEFBE4786 );

+    P( G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6 );

+    P( F, G, H, A, B, C, D, E, R(19), 0x240CA1CC );

+    P( E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F );

+    P( D, E, F, G, H, A, B, C, R(21), 0x4A7484AA );

+    P( C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC );

+    P( B, C, D, E, F, G, H, A, R(23), 0x76F988DA );

+    P( A, B, C, D, E, F, G, H, R(24), 0x983E5152 );

+    P( H, A, B, C, D, E, F, G, R(25), 0xA831C66D );

+    P( G, H, A, B, C, D, E, F, R(26), 0xB00327C8 );

+    P( F, G, H, A, B, C, D, E, R(27), 0xBF597FC7 );

+    P( E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3 );

+    P( D, E, F, G, H, A, B, C, R(29), 0xD5A79147 );

+    P( C, D, E, F, G, H, A, B, R(30), 0x06CA6351 );

+    P( B, C, D, E, F, G, H, A, R(31), 0x14292967 );

+    P( A, B, C, D, E, F, G, H, R(32), 0x27B70A85 );

+    P( H, A, B, C, D, E, F, G, R(33), 0x2E1B2138 );

+    P( G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC );

+    P( F, G, H, A, B, C, D, E, R(35), 0x53380D13 );

+    P( E, F, G, H, A, B, C, D, R(36), 0x650A7354 );

+    P( D, E, F, G, H, A, B, C, R(37), 0x766A0ABB );

+    P( C, D, E, F, G, H, A, B, R(38), 0x81C2C92E );

+    P( B, C, D, E, F, G, H, A, R(39), 0x92722C85 );

+    P( A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1 );

+    P( H, A, B, C, D, E, F, G, R(41), 0xA81A664B );

+    P( G, H, A, B, C, D, E, F, R(42), 0xC24B8B70 );

+    P( F, G, H, A, B, C, D, E, R(43), 0xC76C51A3 );

+    P( E, F, G, H, A, B, C, D, R(44), 0xD192E819 );

+    P( D, E, F, G, H, A, B, C, R(45), 0xD6990624 );

+    P( C, D, E, F, G, H, A, B, R(46), 0xF40E3585 );

+    P( B, C, D, E, F, G, H, A, R(47), 0x106AA070 );

+    P( A, B, C, D, E, F, G, H, R(48), 0x19A4C116 );

+    P( H, A, B, C, D, E, F, G, R(49), 0x1E376C08 );

+    P( G, H, A, B, C, D, E, F, R(50), 0x2748774C );

+    P( F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5 );

+    P( E, F, G, H, A, B, C, D, R(52), 0x391C0CB3 );

+    P( D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A );

+    P( C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F );

+    P( B, C, D, E, F, G, H, A, R(55), 0x682E6FF3 );

+    P( A, B, C, D, E, F, G, H, R(56), 0x748F82EE );

+    P( H, A, B, C, D, E, F, G, R(57), 0x78A5636F );

+    P( G, H, A, B, C, D, E, F, R(58), 0x84C87814 );

+    P( F, G, H, A, B, C, D, E, R(59), 0x8CC70208 );

+    P( E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA );

+    P( D, E, F, G, H, A, B, C, R(61), 0xA4506CEB );

+    P( C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7 );

+    P( B, C, D, E, F, G, H, A, R(63), 0xC67178F2 );

+    ctx->state[0] += A;

+    ctx->state[1] += B;

+    ctx->state[2] += C;

+    ctx->state[3] += D;

+    ctx->state[4] += E;

+    ctx->state[5] += F;

+    ctx->state[6] += G;

+    ctx->state[7] += H;

+}

+void CRYPT_SHA256Update( void* context, FX_LPCBYTE input, FX_DWORD length )

+{

+    sha256_context *ctx = (sha256_context *)context;

+    FX_DWORD left, fill;

+    if( ! length ) {

+        return;

+    }

+    left = ctx->total[0] & 0x3F;

+    fill = 64 - left;

+    ctx->total[0] += length;

+    ctx->total[0] &= 0xFFFFFFFF;

+    if( ctx->total[0] < length ) {

+        ctx->total[1]++;

+    }

+    if( left && length >= fill ) {

+        FXSYS_memcpy32( (void *) (ctx->buffer + left),

+                        (void *) input, fill );

+        sha256_process( ctx, ctx->buffer );

+        length -= fill;

+        input  += fill;

+        left = 0;

+    }

+    while( length >= 64 ) {

+        sha256_process( ctx, input );

+        length -= 64;

+        input  += 64;

+    }

+    if( length ) {

+        FXSYS_memcpy32( (void *) (ctx->buffer + left),

+                        (void *) input, length );

+    }

+}

+static const FX_BYTE sha256_padding[64] = {

+    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

+};

+void CRYPT_SHA256Finish( FX_LPVOID context, FX_BYTE digest[32] )

+{

+    sha256_context *ctx = (sha256_context *)context;

+    FX_DWORD last, padn;

+    FX_DWORD high, low;

+    FX_BYTE msglen[8];

+    high = ( ctx->total[0] >> 29 )

+           | ( ctx->total[1] <<  3 );

+    low  = ( ctx->total[0] <<  3 );

+    PUT_FX_DWORD( high, msglen, 0 );

+    PUT_FX_DWORD( low,  msglen, 4 );

+    last = ctx->total[0] & 0x3F;

+    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );

+    CRYPT_SHA256Update( ctx, sha256_padding, padn );

+    CRYPT_SHA256Update( ctx, msglen, 8 );

+    PUT_FX_DWORD( ctx->state[0], digest,  0 );

+    PUT_FX_DWORD( ctx->state[1], digest,  4 );

+    PUT_FX_DWORD( ctx->state[2], digest,  8 );

+    PUT_FX_DWORD( ctx->state[3], digest, 12 );

+    PUT_FX_DWORD( ctx->state[4], digest, 16 );

+    PUT_FX_DWORD( ctx->state[5], digest, 20 );

+    PUT_FX_DWORD( ctx->state[6], digest, 24 );

+    PUT_FX_DWORD( ctx->state[7], digest, 28 );

+}

+void CRYPT_SHA256Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[32])

+{

+    sha256_context ctx;

+    CRYPT_SHA256Start(&ctx);

+    CRYPT_SHA256Update(&ctx, data, size);

+    CRYPT_SHA256Finish(&ctx, digest);

+}

+typedef struct {

+    FX_UINT64	total[2];

+    FX_UINT64	state[8];

+    FX_BYTE		buffer[128];

+} sha384_context;

+FX_UINT64 FX_ato64i(FX_LPCSTR str)

+{

+    FXSYS_assert(str != NULL);

+    FX_UINT64 ret = 0;

+    int len = (int)FXSYS_strlen(str);

+    len = len > 16 ? 16 : len;

+    for (int i = 0; i < len; ++i) {

+        if (i) {

+            ret <<= 4;

+        }

+        if (str[i] >= '0' && str[i] <= '9') {

+            ret |= (str[i] - '0') & 0xFF;

+        } else if (str[i] >= 'a' && str[i] <= 'f') {

+            ret |= (str[i] - 'a' + 10) & 0xFF;

+        } else if (str[i] >= 'A' && str[i] <= 'F') {

+            ret |= (str[i] - 'A' + 10) & 0xFF;

+        } else {

+            FXSYS_assert(FALSE);

+        }

+    }

+    return ret;

+}

+void CRYPT_SHA384Start(FX_LPVOID context)

+{

+    if (context == NULL) {

+        return;

+    }

+    sha384_context *ctx = (sha384_context *)context;

+    FXSYS_memset32(ctx, 0, sizeof(sha384_context));

+    ctx->state[0] = FX_ato64i("cbbb9d5dc1059ed8");

+    ctx->state[1] = FX_ato64i("629a292a367cd507");

+    ctx->state[2] = FX_ato64i("9159015a3070dd17");

+    ctx->state[3] = FX_ato64i("152fecd8f70e5939");

+    ctx->state[4] = FX_ato64i("67332667ffc00b31");

+    ctx->state[5] = FX_ato64i("8eb44a8768581511");

+    ctx->state[6] = FX_ato64i("db0c2e0d64f98fa7");

+    ctx->state[7] = FX_ato64i("47b5481dbefa4fa4");

+}

+#define SHA384_F0(x,y,z) ((x & y) | (z & (x | y)))

+#define SHA384_F1(x,y,z) (z ^ (x & (y ^ z)))

+#define SHA384_SHR(x,n) (x >> n)

+#define SHA384_ROTR(x,n) (SHA384_SHR(x, n) | x << (64 - n))

+#define SHA384_S0(x) (SHA384_ROTR(x, 1) ^ SHA384_ROTR(x, 8) ^  SHA384_SHR(x, 7))

+#define SHA384_S1(x) (SHA384_ROTR(x,19) ^ SHA384_ROTR(x, 61) ^  SHA384_SHR(x, 6))

+#define SHA384_S2(x) (SHA384_ROTR(x, 28) ^ SHA384_ROTR(x, 34) ^ SHA384_ROTR(x, 39))

+#define SHA384_S3(x) (SHA384_ROTR(x, 14) ^ SHA384_ROTR(x,18) ^ SHA384_ROTR(x, 41))

+#define SHA384_P(a,b,c,d,e,f,g,h,x,K)							\

+    {																\

+        temp1 = h + SHA384_S3(e) + SHA384_F1(e,f,g) + K + x;		\

+        temp2 = SHA384_S2(a) + SHA384_F0(a,b,c);					\

+        d += temp1; h = temp1 + temp2;								\

+    }

+static const FX_BYTE sha384_padding[128] = {

+    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

+};

+#define SHA384_R(t) (W[t] = SHA384_S1(W[t -  2]) + W[t -  7] + SHA384_S0(W[t - 15]) + W[t - 16])

+static FX_LPCSTR constants[] = {

+    "428a2f98d728ae22",

+    "7137449123ef65cd",

+    "b5c0fbcfec4d3b2f",

+    "e9b5dba58189dbbc",

+    "3956c25bf348b538",

+    "59f111f1b605d019",

+    "923f82a4af194f9b",

+    "ab1c5ed5da6d8118",

+    "d807aa98a3030242",

+    "12835b0145706fbe",

+    "243185be4ee4b28c",

+    "550c7dc3d5ffb4e2",

+    "72be5d74f27b896f",

+    "80deb1fe3b1696b1",

+    "9bdc06a725c71235",

+    "c19bf174cf692694",

+    "e49b69c19ef14ad2",

+    "efbe4786384f25e3",

+    "0fc19dc68b8cd5b5",

+    "240ca1cc77ac9c65",

+    "2de92c6f592b0275",

+    "4a7484aa6ea6e483",

+    "5cb0a9dcbd41fbd4",

+    "76f988da831153b5",

+    "983e5152ee66dfab",

+    "a831c66d2db43210",

+    "b00327c898fb213f",

+    "bf597fc7beef0ee4",

+    "c6e00bf33da88fc2",

+    "d5a79147930aa725",

+    "06ca6351e003826f",

+    "142929670a0e6e70",

+    "27b70a8546d22ffc",

+    "2e1b21385c26c926",

+    "4d2c6dfc5ac42aed",

+    "53380d139d95b3df",

+    "650a73548baf63de",

+    "766a0abb3c77b2a8",

+    "81c2c92e47edaee6",

+    "92722c851482353b",

+    "a2bfe8a14cf10364",

+    "a81a664bbc423001",

+    "c24b8b70d0f89791",

+    "c76c51a30654be30",

+    "d192e819d6ef5218",

+    "d69906245565a910",

+    "f40e35855771202a",

+    "106aa07032bbd1b8",

+    "19a4c116b8d2d0c8",

+    "1e376c085141ab53",

+    "2748774cdf8eeb99",

+    "34b0bcb5e19b48a8",

+    "391c0cb3c5c95a63",

+    "4ed8aa4ae3418acb",

+    "5b9cca4f7763e373",

+    "682e6ff3d6b2b8a3",

+    "748f82ee5defb2fc",

+    "78a5636f43172f60",

+    "84c87814a1f0ab72",

+    "8cc702081a6439ec",

+    "90befffa23631e28",

+    "a4506cebde82bde9",

+    "bef9a3f7b2c67915",

+    "c67178f2e372532b",

+    "ca273eceea26619c",

+    "d186b8c721c0c207",

+    "eada7dd6cde0eb1e",

+    "f57d4f7fee6ed178",

+    "06f067aa72176fba",

+    "0a637dc5a2c898a6",

+    "113f9804bef90dae",

+    "1b710b35131c471b",

+    "28db77f523047d84",

+    "32caab7b40c72493",

+    "3c9ebe0a15c9bebc",

+    "431d67c49c100d4c",

+    "4cc5d4becb3e42b6",

+    "597f299cfc657e2a",

+    "5fcb6fab3ad6faec",

+    "6c44198c4a475817",

+};

+#define GET_FX_64WORD(n,b,i)                       \

+    {                                               \

+        (n) = ( (FX_UINT64) (b)[(i)    ] << 56 )       \

+              | ( (FX_UINT64) (b)[(i) + 1] << 48 )       \

+              | ( (FX_UINT64) (b)[(i) + 2] << 40 )       \

+              | ( (FX_UINT64) (b)[(i) + 3] << 32 )      \

+              | ( (FX_UINT64) (b)[(i) + 4] << 24 )       \

+              | ( (FX_UINT64) (b)[(i) + 5] << 16 )       \

+              | ( (FX_UINT64) (b)[(i) + 6] <<  8 )       \

+              | ( (FX_UINT64) (b)[(i) + 7]       );      \

+    }

+#define PUT_FX_64DWORD(n,b,i)                       \

+    {                                               \

+        (b)[(i)    ] = (FX_BYTE) ( (n) >> 56 );       \

+        (b)[(i) + 1] = (FX_BYTE) ( (n) >> 48 );       \

+        (b)[(i) + 2] = (FX_BYTE) ( (n) >> 40 );       \

+        (b)[(i) + 3] = (FX_BYTE) ( (n) >> 32 );       \

+        (b)[(i) + 4] = (FX_BYTE) ( (n) >> 24 );       \

+        (b)[(i) + 5] = (FX_BYTE) ( (n) >> 16 );       \

+        (b)[(i) + 6] = (FX_BYTE) ( (n) >>  8 );       \

+        (b)[(i) + 7] = (FX_BYTE) ( (n) );       \

+    }

+static void sha384_process( sha384_context *ctx, const FX_BYTE data[128] )

+{

+    FX_UINT64 temp1, temp2;

+    FX_UINT64 A, B, C, D, E, F, G, H;

+    FX_UINT64 W[80];

+    GET_FX_64WORD(W[0], data, 0);

+    GET_FX_64WORD(W[1], data, 8);

+    GET_FX_64WORD(W[2], data, 16);

+    GET_FX_64WORD(W[3], data, 24);

+    GET_FX_64WORD(W[4], data, 32);

+    GET_FX_64WORD(W[5], data, 40);

+    GET_FX_64WORD(W[6], data, 48);

+    GET_FX_64WORD(W[7], data, 56);

+    GET_FX_64WORD(W[8], data, 64);

+    GET_FX_64WORD(W[9], data, 72);

+    GET_FX_64WORD(W[10], data, 80);

+    GET_FX_64WORD(W[11], data, 88);

+    GET_FX_64WORD(W[12], data, 96);

+    GET_FX_64WORD(W[13], data, 104);

+    GET_FX_64WORD(W[14], data, 112);

+    GET_FX_64WORD(W[15], data, 120);

+    A = ctx->state[0];

+    B = ctx->state[1];

+    C = ctx->state[2];

+    D = ctx->state[3];

+    E = ctx->state[4];

+    F = ctx->state[5];

+    G = ctx->state[6];

+    H = ctx->state[7];

+    for (int i = 0; i < 10; ++i) {

+        FX_UINT64 temp[8];

+        if (i < 2) {

+            temp[0] = W[i * 8];

+            temp[1] = W[i * 8 + 1];

+            temp[2] = W[i * 8 + 2];

+            temp[3] = W[i * 8 + 3];

+            temp[4] = W[i * 8 + 4];

+            temp[5] = W[i * 8 + 5];

+            temp[6] = W[i * 8 + 6];

+            temp[7] = W[i * 8 + 7];

+        } else {

+            temp[0] = SHA384_R(i * 8);

+            temp[1] = SHA384_R(i * 8 + 1);

+            temp[2] = SHA384_R(i * 8 + 2);

+            temp[3] = SHA384_R(i * 8 + 3);

+            temp[4] = SHA384_R(i * 8 + 4);

+            temp[5] = SHA384_R(i * 8 + 5);

+            temp[6] = SHA384_R(i * 8 + 6);

+            temp[7] = SHA384_R(i * 8 + 7);

+        }

+        SHA384_P( A, B, C, D, E, F, G, H, temp[ 0], FX_ato64i(constants[i * 8    ]) );

+        SHA384_P( H, A, B, C, D, E, F, G, temp[ 1], FX_ato64i(constants[i * 8 + 1]) );

+        SHA384_P( G, H, A, B, C, D, E, F, temp[ 2], FX_ato64i(constants[i * 8 + 2]) );

+        SHA384_P( F, G, H, A, B, C, D, E, temp[ 3], FX_ato64i(constants[i * 8 + 3]) );

+        SHA384_P( E, F, G, H, A, B, C, D, temp[ 4], FX_ato64i(constants[i * 8 + 4]) );

+        SHA384_P( D, E, F, G, H, A, B, C, temp[ 5], FX_ato64i(constants[i * 8 + 5]) );

+        SHA384_P( C, D, E, F, G, H, A, B, temp[ 6], FX_ato64i(constants[i * 8 + 6]) );

+        SHA384_P( B, C, D, E, F, G, H, A, temp[ 7], FX_ato64i(constants[i * 8 + 7]) );

+    }

+    ctx->state[0] += A;

+    ctx->state[1] += B;

+    ctx->state[2] += C;

+    ctx->state[3] += D;

+    ctx->state[4] += E;

+    ctx->state[5] += F;

+    ctx->state[6] += G;

+    ctx->state[7] += H;

+}

+void CRYPT_SHA384Update(FX_LPVOID context, FX_LPCBYTE input, FX_DWORD length)

+{

+    sha384_context *ctx = (sha384_context *)context;

+    FX_DWORD left, fill;

+    if( ! length ) {

+        return;

+    }

+    left = (FX_DWORD)ctx->total[0] & 0x7F;

+    fill = 128 - left;

+    ctx->total[0] += length;

+    if( ctx->total[0] < length ) {

+        ctx->total[1]++;

+    }

+    if( left && length >= fill ) {

+        FXSYS_memcpy32( (void *) (ctx->buffer + left),

+                        (void *) input, fill );

+        sha384_process( ctx, ctx->buffer );

+        length -= fill;

+        input  += fill;

+        left = 0;

+    }

+    while( length >= 128 ) {

+        sha384_process( ctx, input );

+        length -= 128;

+        input  += 128;

+    }

+    if( length ) {

+        FXSYS_memcpy32( (void *) (ctx->buffer + left),

+                        (void *) input, length );

+    }

+}

+void CRYPT_SHA384Finish(FX_LPVOID context, FX_BYTE digest[48])

+{

+    sha384_context *ctx = (sha384_context *)context;

+    FX_DWORD last, padn;

+    FX_BYTE msglen[16];

+    FXSYS_memset32(msglen, 0, 16);

+    FX_UINT64 high, low;

+    high = ( ctx->total[0] >> 29 )

+           | ( ctx->total[1] <<  3 );

+    low  = ( ctx->total[0] <<  3 );

+    PUT_FX_64DWORD( high, msglen, 0 );

+    PUT_FX_64DWORD( low,  msglen, 8 );

+    last = (FX_DWORD)ctx->total[0] & 0x7F;

+    padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );

+    CRYPT_SHA384Update( ctx, sha384_padding, padn );

+    CRYPT_SHA384Update( ctx, msglen, 16 );

+    PUT_FX_64DWORD(ctx->state[0], digest, 0);

+    PUT_FX_64DWORD(ctx->state[1], digest, 8);

+    PUT_FX_64DWORD(ctx->state[2], digest, 16);

+    PUT_FX_64DWORD(ctx->state[3], digest, 24);

+    PUT_FX_64DWORD(ctx->state[4], digest, 32);

+    PUT_FX_64DWORD(ctx->state[5], digest, 40);

+}

+void CRYPT_SHA384Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[64])

+{

+    sha384_context context;

+    CRYPT_SHA384Start(&context);

+    CRYPT_SHA384Update(&context, data, size);

+    CRYPT_SHA384Finish(&context, digest);

+}

+void CRYPT_SHA512Start(FX_LPVOID context)

+{

+    if (context == NULL) {

+        return;

+    }

+    sha384_context *ctx = (sha384_context *)context;

+    FXSYS_memset32(ctx, 0, sizeof(sha384_context));

+    ctx->state[0] = FX_ato64i("6a09e667f3bcc908");

+    ctx->state[1] = FX_ato64i("bb67ae8584caa73b");

+    ctx->state[2] = FX_ato64i("3c6ef372fe94f82b");

+    ctx->state[3] = FX_ato64i("a54ff53a5f1d36f1");

+    ctx->state[4] = FX_ato64i("510e527fade682d1");

+    ctx->state[5] = FX_ato64i("9b05688c2b3e6c1f");

+    ctx->state[6] = FX_ato64i("1f83d9abfb41bd6b");

+    ctx->state[7] = FX_ato64i("5be0cd19137e2179");

+}

+void CRYPT_SHA512Update(FX_LPVOID context, FX_LPCBYTE data, FX_DWORD size)

+{

+    CRYPT_SHA384Update(context, data, size);

+}

+void CRYPT_SHA512Finish(FX_LPVOID context, FX_BYTE digest[64])

+{

+    sha384_context *ctx = (sha384_context *)context;

+    FX_DWORD last, padn;

+    FX_BYTE msglen[16];

+    FXSYS_memset32(msglen, 0, 16);

+    FX_UINT64 high, low;

+    high = ( ctx->total[0] >> 29 )

+           | ( ctx->total[1] <<  3 );

+    low  = ( ctx->total[0] <<  3 );

+    PUT_FX_64DWORD( high, msglen, 0 );

+    PUT_FX_64DWORD( low,  msglen, 8 );

+    last = (FX_DWORD)ctx->total[0] & 0x7F;

+    padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );

+    CRYPT_SHA512Update( ctx, sha384_padding, padn );

+    CRYPT_SHA512Update( ctx, msglen, 16 );

+    PUT_FX_64DWORD(ctx->state[0], digest, 0);

+    PUT_FX_64DWORD(ctx->state[1], digest, 8);

+    PUT_FX_64DWORD(ctx->state[2], digest, 16);

+    PUT_FX_64DWORD(ctx->state[3], digest, 24);

+    PUT_FX_64DWORD(ctx->state[4], digest, 32);

+    PUT_FX_64DWORD(ctx->state[5], digest, 40);

+    PUT_FX_64DWORD(ctx->state[6], digest, 48);

+    PUT_FX_64DWORD(ctx->state[7], digest, 56);

+}

+void CRYPT_SHA512Generate(FX_LPCBYTE data, FX_DWORD size, FX_BYTE digest[64])

+{

+    sha384_context context;

+    CRYPT_SHA512Start(&context);

+    CRYPT_SHA512Update(&context, data, size);

+    CRYPT_SHA512Finish(&context, digest);

+}

+#ifdef __cplusplus

+};

+#endif

diff --git a/core/src/fpdfapi/fpdf_basic_module.cpp b/core/src/fpdfapi/fpdf_basic_module.cpp
new file mode 100644
index 0000000..4c648b4
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_basic_module.cpp
@@ -0,0 +1,178 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+#include "../../include/fxcodec/fx_codec.h"

+#include "../../include/fpdfapi/fpdf_module.h"

+static CPDF_ModuleMgr*	g_FPDFAPI_pDefaultMgr = NULL;

+CPDF_ModuleMgr* CPDF_ModuleMgr::Get()

+{

+    return g_FPDFAPI_pDefaultMgr;

+}

+void CPDF_ModuleMgr::Create()

+{

+    g_FPDFAPI_pDefaultMgr = FX_NEW CPDF_ModuleMgr;

+    g_FPDFAPI_pDefaultMgr->Initialize();

+}

+void CPDF_ModuleMgr::Destroy()

+{

+    if (g_FPDFAPI_pDefaultMgr) {

+        delete g_FPDFAPI_pDefaultMgr;

+    }

+    g_FPDFAPI_pDefaultMgr = NULL;

+}

+CPDF_ModuleMgr::CPDF_ModuleMgr()

+{

+    m_pCodecModule = NULL;

+    m_pPageModule = NULL;

+    m_pRenderModule = NULL;

+    m_FileBufSize = 512;

+}

+void CPDF_ModuleMgr::Initialize()

+{

+    InitModules();

+    m_FileBufSize = 512;

+}

+void CPDF_ModuleMgr::InitModules()

+{

+    m_pCodecModule = NULL;

+    m_pPageModule = FX_NEW CPDF_PageModuleDef;

+    m_pRenderModule = FX_NEW CPDF_RenderModuleDef;

+}

+CPDF_ModuleMgr::~CPDF_ModuleMgr()

+{

+    if (m_pPageModule) {

+        delete m_pPageModule;

+    }

+    if (m_pRenderModule) {

+        delete m_pRenderModule;

+    }

+}

+void CPDF_ModuleMgr::SetDownloadCallback(FX_BOOL (*callback)(FX_LPCSTR module_name))

+{

+    m_pDownloadCallback = callback;

+}

+FX_BOOL CPDF_ModuleMgr::DownloadModule(FX_LPCSTR module_name)

+{

+    if (m_pDownloadCallback == NULL) {

+        return FALSE;

+    }

+    return m_pDownloadCallback(module_name);

+}

+static CFX_ByteString _GetPath(const CFX_ByteString& folder, FX_LPCSTR name)

+{

+    FX_STRSIZE folder_len = folder.GetLength();

+#if _FX_OS_ == _FX_SYMBIAN_ || _FXM_PLATFORM_  == _FXM_PLATFORM_WINDOWS_

+    if (folder[folder_len - 1] == '\\') {

+        return folder + name;

+    } else {

+        return (folder + "\\") + name;

+    }

+#else

+    if (folder[folder_len - 1] == '/') {

+        return folder + name;

+    } else {

+        return (folder + "/") + name;

+    }

+#endif

+}

+void CPDF_ModuleMgr::SetModulePath(FX_LPCSTR module_name, FX_LPCSTR path)

+{

+    if (module_name == NULL || module_name[0] == 0) {

+        m_DefaultModulePath = path;

+    } else {

+        m_ModulePathList.SetAt(module_name, FX_NEW CFX_ByteString(path, -1));

+    }

+}

+CFX_ByteString CPDF_ModuleMgr::GetModuleFilePath(FX_LPCSTR module_name, FX_LPCSTR name)

+{

+    CFX_ByteString* pPath = NULL;

+    if (m_ModulePathList.Lookup(module_name, (FX_LPVOID&)pPath)) {

+        return _GetPath(*pPath, name);

+    }

+    if (!m_DefaultModulePath.IsEmpty()) {

+        return _GetPath(m_DefaultModulePath, name);

+    }

+#if _FXM_PLATFORM_  == _FXM_PLATFORM_WINDOWS_

+    FX_WCHAR app_path[260];

+    ::GetModuleFileNameW(NULL, (LPWSTR)app_path, 260);

+    FX_INTPTR len = FXSYS_wcslen(app_path);

+    for (FX_INTPTR i = len; i >= 0; i --)

+        if (app_path[i] == '\\') {

+            app_path[i] = 0;

+            break;

+        }

+    CFX_ByteString path = CFX_ByteString::FromUnicode(app_path);

+    path += '\\';

+    path += name;

+    return path;

+#else

+    return name;

+#endif

+}

+void CPDF_ModuleMgr::NotifyModuleAvailable(FX_LPCSTR module_name)

+{

+    if (FXSYS_strcmp(module_name, ADDIN_NAME_CJK) == 0) {

+        m_pPageModule->NotifyCJKAvailable();

+    } else if (FXSYS_strcmp(module_name, ADDIN_NAME_DECODER) == 0) {

+        m_pRenderModule->NotifyDecoderAvailable();

+    }

+}

+void CPDF_ModuleMgr::RegisterSecurityHandler(FX_LPCSTR filter, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param)

+{

+    if (CreateHandler == NULL) {

+        m_SecurityHandlerMap.RemoveKey(filter);

+    } else {

+        m_SecurityHandlerMap.SetAt(filter, (void*)CreateHandler);

+    }

+    if (param) {

+        m_SecurityHandlerMap.SetAt(FX_BSTRC("_param_") + filter, param);

+    }

+}

+void CPDF_ModuleMgr::SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback)

+{

+    m_privateData.SetPrivateData(module_id, pData, callback);

+}

+FX_LPVOID CPDF_ModuleMgr::GetPrivateData(FX_LPVOID module_id)

+{

+    return m_privateData.GetPrivateData(module_id);

+}

+CPDF_SecurityHandler* CPDF_ModuleMgr::CreateSecurityHandler(FX_LPCSTR filter)

+{

+    CPDF_SecurityHandler* (*CreateHandler)(void*) = NULL;

+    if (!m_SecurityHandlerMap.Lookup(filter, (void*&)CreateHandler)) {

+        return NULL;

+    }

+    if (CreateHandler == NULL) {

+        return NULL;

+    }

+    void* param = NULL;

+    m_SecurityHandlerMap.Lookup(FX_BSTRC("_param_") + filter, param);

+    return CreateHandler(param);

+}

+ICodec_FaxModule* CPDF_ModuleMgr::GetFaxModule()

+{

+    return m_pCodecModule ? m_pCodecModule->GetFaxModule() : NULL;

+}

+ICodec_JpegModule* CPDF_ModuleMgr::GetJpegModule()

+{

+    return m_pCodecModule ? m_pCodecModule->GetJpegModule() : NULL;

+}

+ICodec_JpxModule* CPDF_ModuleMgr::GetJpxModule()

+{

+    return m_pCodecModule ? m_pCodecModule->GetJpxModule() : NULL;

+}

+ICodec_Jbig2Module* CPDF_ModuleMgr::GetJbig2Module()

+{

+    return m_pCodecModule ? m_pCodecModule->GetJbig2Module() : NULL;

+}

+ICodec_IccModule* CPDF_ModuleMgr::GetIccModule()

+{

+    return m_pCodecModule ? m_pCodecModule->GetIccModule() : NULL;

+}

+ICodec_FlateModule* CPDF_ModuleMgr::GetFlateModule()

+{

+    return m_pCodecModule ? m_pCodecModule->GetFlateModule() : NULL;

+}

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp
new file mode 100644
index 0000000..5899e28
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp
@@ -0,0 +1,2394 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+extern const unsigned short g_FXCMAP_CNS1CID2Unicode_5[19088] = {
+    0xFFFD, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026,
+    0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E,
+    0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036,
+    0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E,
+    0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046,
+    0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E,
+    0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056,
+    0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E,
+    0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066,
+    0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E,
+    0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076,
+    0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E,
+    0x00A9, 0x2122, 0x2026, 0x3000, 0xFF0C, 0x3001, 0x3002, 0xFF0E,
+    0x2027, 0xFF1B, 0xFF1A, 0xFF1F, 0xFF01, 0xFE30, 0x22EF, 0x2025,
+    0xFE50, 0xFE51, 0xFE52, 0x00B7, 0xFE54, 0xFE55, 0xFE56, 0xFE57,
+    0xFF5C, 0x2013, 0xFE31, 0x2014, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFF08, 0xFF09, 0xFE35, 0xFE36, 0xFF5B, 0xFF5D, 0xFE37, 0xFE38,
+    0x3014, 0x3015, 0xFE39, 0xFE3A, 0x3010, 0x3011, 0xFE3B, 0xFE3C,
+    0x300A, 0x300B, 0xFE3D, 0xFE3E, 0x3008, 0x3009, 0xFE3F, 0xFE40,
+    0x300C, 0x300D, 0xFE41, 0xFE42, 0x300E, 0x300F, 0xFE43, 0xFE44,
+    0xFE59, 0xFE5A, 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0x2018, 0x2019,
+    0x201C, 0x201D, 0x301D, 0x301E, 0x2035, 0x2032, 0xFF03, 0xFF06,
+    0xFF0A, 0x203B, 0x00A7, 0x3003, 0x25CB, 0x25CF, 0x25B3, 0x25B2,
+    0x25CE, 0x2606, 0x2605, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25BD,
+    0x25BC, 0x32A3, 0x2105, 0x203E, 0xFFE3, 0xFF3F, 0x02CD, 0xFE49,
+    0xFE4A, 0xFE4D, 0xFE4E, 0xFE4B, 0xFE4C, 0xFE5F, 0xFE60, 0xFE61,
+    0xFF0B, 0xFF0D, 0x00D7, 0x00F7, 0x00B1, 0x221A, 0xFF1C, 0xFF1E,
+    0xFF1D, 0x2266, 0x2267, 0x2260, 0x221E, 0x2252, 0x2261, 0xFE62,
+    0xFE63, 0xFE64, 0xFE65, 0xFE66, 0x223C, 0x2229, 0x222A, 0x22A5,
+    0x2220, 0x221F, 0x22BF, 0x33D2, 0x33D1, 0x222B, 0x222E, 0x2235,
+    0x2234, 0x2640, 0x2642, 0x2295, 0x2609, 0x2191, 0x2193, 0x2192,
+    0x2190, 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xFF0F,
+    0xFF3C, 0xFF0F, 0xFF3C, 0xFF04, 0x00A5, 0x3012, 0x00A2, 0x00A3,
+    0xFF05, 0xFF20, 0x2103, 0x2109, 0xFE69, 0xFE6A, 0xFE6B, 0x33D5,
+    0x339C, 0x339D, 0x339E, 0x33CE, 0x33A1, 0x338E, 0x338F, 0x33C4,
+    0x00B0, 0x5159, 0x515B, 0x515E, 0x515D, 0x5161, 0x5163, 0x55E7,
+    0x74E9, 0x7CCE, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586,
+    0x2587, 0x2588, 0x258F, 0x258E, 0x258D, 0x258C, 0x258B, 0x258A,
+    0x2589, 0x253C, 0x2534, 0x252C, 0x2524, 0x251C, 0x2594, 0x2500,
+    0x2502, 0x2595, 0x250C, 0x2510, 0x2514, 0x2518, 0x256D, 0x256E,
+    0x2570, 0x256F, 0x2550, 0x255E, 0x256A, 0x2561, 0x25E2, 0x25E3,
+    0x25E5, 0x25E4, 0x2571, 0x2572, 0x2573, 0xFF10, 0xFF11, 0xFF12,
+    0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0x2160,
+    0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,
+    0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027,
+    0x3028, 0x3029, 0x3038, 0x5344, 0x303A, 0xFF21, 0xFF22, 0xFF23,
+    0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B,
+    0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33,
+    0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF41,
+    0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49,
+    0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51,
+    0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59,
+    0xFF5A, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+    0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+    0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8,
+    0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
+    0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+    0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
+    0x03C9, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310A, 0x310B,
+    0x310C, 0x310D, 0x310E, 0x310F, 0x3110, 0x3111, 0x3112, 0x3113,
+    0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311A, 0x311B,
+    0x311C, 0x311D, 0x311E, 0x311F, 0x3120, 0x3121, 0x3122, 0x3123,
+    0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x02D9, 0x02CA,
+    0x02C7, 0x02CB, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465,
+    0x2466, 0x2467, 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477,
+    0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x2170, 0x2171,
+    0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179,
+    0x4E28, 0x4E36, 0x4E3F, 0x4E85, 0x4EA0, 0x5182, 0x5196, 0x51AB,
+    0x52F9, 0x5338, 0x5369, 0x53B6, 0x5902, 0x5B80, 0x5DDB, 0x5E7A,
+    0x5E7F, 0x5EF4, 0x5F50, 0x5F61, 0x6534, 0x65E0, 0x7592, 0x7676,
+    0x8FB5, 0x96B6, 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405,
+    0x2406, 0x2407, 0x2408, 0x2409, 0x240A, 0x240B, 0x240C, 0x240D,
+    0x240E, 0x240F, 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415,
+    0x2416, 0x2417, 0x2418, 0x2419, 0x241A, 0x241B, 0x241C, 0x241D,
+    0x241E, 0x241F, 0x2421, 0x4E00, 0x4E59, 0x4E01, 0x4E03, 0x4E43,
+    0x4E5D, 0x4E86, 0x4E8C, 0x4EBA, 0x513F, 0x5165, 0x516B, 0x51E0,
+    0x5200, 0x5201, 0x529B, 0x5315, 0x5341, 0x535C, 0x53C8, 0x4E09,
+    0x4E0B, 0x4E08, 0x4E0A, 0x4E2B, 0x4E38, 0x51E1, 0x4E45, 0x4E48,
+    0x4E5F, 0x4E5E, 0x4E8E, 0x4EA1, 0x5140, 0x5203, 0x52FA, 0x5343,
+    0x53C9, 0x53E3, 0x571F, 0x58EB, 0x5915, 0x5927, 0x5973, 0x5B50,
+    0x5B51, 0x5B53, 0x5BF8, 0x5C0F, 0x5C22, 0x5C38, 0x5C71, 0x5DDD,
+    0x5DE5, 0x5DF1, 0x5DF2, 0x5DF3, 0x5DFE, 0x5E72, 0x5EFE, 0x5F0B,
+    0x5F13, 0x624D, 0x4E11, 0x4E10, 0x4E0D, 0x4E2D, 0x4E30, 0x4E39,
+    0x4E4B, 0x5C39, 0x4E88, 0x4E91, 0x4E95, 0x4E92, 0x4E94, 0x4EA2,
+    0x4EC1, 0x4EC0, 0x4EC3, 0x4EC6, 0x4EC7, 0x4ECD, 0x4ECA, 0x4ECB,
+    0x4EC4, 0x5143, 0x5141, 0x5167, 0x516D, 0x516E, 0x516C, 0x5197,
+    0x51F6, 0x5206, 0x5207, 0x5208, 0x52FB, 0x52FE, 0x52FF, 0x5316,
+    0x5339, 0x5348, 0x5347, 0x5345, 0x535E, 0x5384, 0x53CB, 0x53CA,
+    0x53CD, 0x58EC, 0x5929, 0x592B, 0x592A, 0x592D, 0x5B54, 0x5C11,
+    0x5C24, 0x5C3A, 0x5C6F, 0x5DF4, 0x5E7B, 0x5EFF, 0x5F14, 0x5F15,
+    0x5FC3, 0x6208, 0x6236, 0x624B, 0x624E, 0x652F, 0x6587, 0x6597,
+    0x65A4, 0x65B9, 0x65E5, 0x66F0, 0x6708, 0x6728, 0x6B20, 0x6B62,
+    0x6B79, 0x6BCB, 0x6BD4, 0x6BDB, 0x6C0F, 0x6C34, 0x706B, 0x722A,
+    0x7236, 0x723B, 0x7247, 0x7259, 0x725B, 0x72AC, 0x738B, 0x4E19,
+    0x4E16, 0x4E15, 0x4E14, 0x4E18, 0x4E3B, 0x4E4D, 0x4E4F, 0x4E4E,
+    0x4EE5, 0x4ED8, 0x4ED4, 0x4ED5, 0x4ED6, 0x4ED7, 0x4EE3, 0x4EE4,
+    0x4ED9, 0x4EDE, 0x5145, 0x5144, 0x5189, 0x518A, 0x51AC, 0x51F9,
+    0x51FA, 0x51F8, 0x520A, 0x52A0, 0x529F, 0x5305, 0x5306, 0x5317,
+    0x531D, 0x4EDF, 0x534A, 0x5349, 0x5361, 0x5360, 0x536F, 0x536E,
+    0x53BB, 0x53EF, 0x53E4, 0x53F3, 0x53EC, 0x53EE, 0x53E9, 0x53E8,
+    0x53FC, 0x53F8, 0x53F5, 0x53EB, 0x53E6, 0x53EA, 0x53F2, 0x53F1,
+    0x53F0, 0x53E5, 0x53ED, 0x53FB, 0x56DB, 0x56DA, 0x5916, 0x592E,
+    0x5931, 0x5974, 0x5976, 0x5B55, 0x5B83, 0x5C3C, 0x5DE8, 0x5DE7,
+    0x5DE6, 0x5E02, 0x5E03, 0x5E73, 0x5E7C, 0x5F01, 0x5F18, 0x5F17,
+    0x5FC5, 0x620A, 0x6253, 0x6254, 0x6252, 0x6251, 0x65A5, 0x65E6,
+    0x672E, 0x672C, 0x672A, 0x672B, 0x672D, 0x6B63, 0x6BCD, 0x6C11,
+    0x6C10, 0x6C38, 0x6C41, 0x6C40, 0x6C3E, 0x72AF, 0x7384, 0x7389,
+    0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7529, 0x7530, 0x7531,
+    0x7532, 0x7533, 0x758B, 0x767D, 0x76AE, 0x76BF, 0x76EE, 0x77DB,
+    0x77E2, 0x77F3, 0x793A, 0x79BE, 0x7A74, 0x7ACB, 0x4E1E, 0x4E1F,
+    0x4E52, 0x4E53, 0x4E69, 0x4E99, 0x4EA4, 0x4EA6, 0x4EA5, 0x4EFF,
+    0x4F09, 0x4F19, 0x4F0A, 0x4F15, 0x4F0D, 0x4F10, 0x4F11, 0x4F0F,
+    0x4EF2, 0x4EF6, 0x4EFB, 0x4EF0, 0x4EF3, 0x4EFD, 0x4F01, 0x4F0B,
+    0x5149, 0x5147, 0x5146, 0x5148, 0x5168, 0x5171, 0x518D, 0x51B0,
+    0x5217, 0x5211, 0x5212, 0x520E, 0x5216, 0x52A3, 0x5308, 0x5321,
+    0x5320, 0x5370, 0x5371, 0x5409, 0x540F, 0x540C, 0x540A, 0x5410,
+    0x5401, 0x540B, 0x5404, 0x5411, 0x540D, 0x5408, 0x5403, 0x540E,
+    0x5406, 0x5412, 0x56E0, 0x56DE, 0x56DD, 0x5733, 0x5730, 0x5728,
+    0x572D, 0x572C, 0x572F, 0x5729, 0x5919, 0x591A, 0x5937, 0x5938,
+    0x5984, 0x5978, 0x5983, 0x597D, 0x5979, 0x5982, 0x5981, 0x5B57,
+    0x5B58, 0x5B87, 0x5B88, 0x5B85, 0x5B89, 0x5BFA, 0x5C16, 0x5C79,
+    0x5DDE, 0x5E06, 0x5E76, 0x5E74, 0x5F0F, 0x5F1B, 0x5FD9, 0x5FD6,
+    0x620E, 0x620C, 0x620D, 0x6210, 0x6263, 0x625B, 0x6258, 0x6536,
+    0x65E9, 0x65E8, 0x65EC, 0x65ED, 0x66F2, 0x66F3, 0x6709, 0x673D,
+    0x6734, 0x6731, 0x6735, 0x6B21, 0x6B64, 0x6B7B, 0x6C16, 0x6C5D,
+    0x6C57, 0x6C59, 0x6C5F, 0x6C60, 0x6C50, 0x6C55, 0x6C61, 0x6C5B,
+    0x6C4D, 0x6C4E, 0x7070, 0x725F, 0x725D, 0x767E, 0x7AF9, 0x7C73,
+    0x7CF8, 0x7F36, 0x7F8A, 0x7FBD, 0x8001, 0x8003, 0x800C, 0x8012,
+    0x8033, 0x807F, 0x8089, 0x808B, 0x808C, 0x81E3, 0x81EA, 0x81F3,
+    0x81FC, 0x820C, 0x821B, 0x821F, 0x826E, 0x8272, 0x827E, 0x866B,
+    0x8840, 0x884C, 0x8863, 0x897F, 0x9621, 0x4E32, 0x4EA8, 0x4F4D,
+    0x4F4F, 0x4F47, 0x4F57, 0x4F5E, 0x4F34, 0x4F5B, 0x4F55, 0x4F30,
+    0x4F50, 0x4F51, 0x4F3D, 0x4F3A, 0x4F38, 0x4F43, 0x4F54, 0x4F3C,
+    0x4F46, 0x4F63, 0x4F5C, 0x4F60, 0x4F2F, 0x4F4E, 0x4F36, 0x4F59,
+    0x4F5D, 0x4F48, 0x4F5A, 0x514C, 0x514B, 0x514D, 0x5175, 0x51B6,
+    0x51B7, 0x5225, 0x5224, 0x5229, 0x522A, 0x5228, 0x52AB, 0x52A9,
+    0x52AA, 0x52AC, 0x5323, 0x5373, 0x5375, 0x541D, 0x542D, 0x541E,
+    0x543E, 0x5426, 0x544E, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448,
+    0x5442, 0x541B, 0x5429, 0x544A, 0x5439, 0x543B, 0x5438, 0x542E,
+    0x5435, 0x5436, 0x5420, 0x543C, 0x5440, 0x5431, 0x542B, 0x541F,
+    0x542C, 0x56EA, 0x56F0, 0x56E4, 0x56EB, 0x574A, 0x5751, 0x5740,
+    0x574D, 0x5747, 0x574E, 0x573E, 0x5750, 0x574F, 0x573B, 0x58EF,
+    0x593E, 0x599D, 0x5992, 0x59A8, 0x599E, 0x59A3, 0x5999, 0x5996,
+    0x598D, 0x59A4, 0x5993, 0x598A, 0x59A5, 0x5B5D, 0x5B5C, 0x5B5A,
+    0x5B5B, 0x5B8C, 0x5B8B, 0x5B8F, 0x5C2C, 0x5C40, 0x5C41, 0x5C3F,
+    0x5C3E, 0x5C90, 0x5C91, 0x5C94, 0x5C8C, 0x5DEB, 0x5E0C, 0x5E8F,
+    0x5E87, 0x5E8A, 0x5EF7, 0x5F04, 0x5F1F, 0x5F64, 0x5F62, 0x5F77,
+    0x5F79, 0x5FD8, 0x5FCC, 0x5FD7, 0x5FCD, 0x5FF1, 0x5FEB, 0x5FF8,
+    0x5FEA, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276,
+    0x6289, 0x626D, 0x628A, 0x627C, 0x627E, 0x6279, 0x6273, 0x6292,
+    0x626F, 0x6298, 0x626E, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539,
+    0x653B, 0x6538, 0x65F1, 0x66F4, 0x675F, 0x674E, 0x674F, 0x6750,
+    0x6751, 0x675C, 0x6756, 0x675E, 0x6749, 0x6746, 0x6760, 0x6753,
+    0x6757, 0x6B65, 0x6BCF, 0x6C42, 0x6C5E, 0x6C99, 0x6C81, 0x6C88,
+    0x6C89, 0x6C85, 0x6C9B, 0x6C6A, 0x6C7A, 0x6C90, 0x6C70, 0x6C8C,
+    0x6C68, 0x6C96, 0x6C92, 0x6C7D, 0x6C83, 0x6C72, 0x6C7E, 0x6C74,
+    0x6C86, 0x6C76, 0x6C8D, 0x6C94, 0x6C98, 0x6C82, 0x7076, 0x707C,
+    0x707D, 0x7078, 0x7262, 0x7261, 0x7260, 0x72C4, 0x72C2, 0x7396,
+    0x752C, 0x752B, 0x7537, 0x7538, 0x7682, 0x76EF, 0x77E3, 0x79C1,
+    0x79C0, 0x79BF, 0x7A76, 0x7CFB, 0x7F55, 0x8096, 0x8093, 0x809D,
+    0x8098, 0x809B, 0x809A, 0x80B2, 0x826F, 0x8292, 0x828B, 0x828D,
+    0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, 0x8C55, 0x8C9D, 0x8D64,
+    0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, 0x8FB0, 0x8FC2, 0x8FC6,
+    0x8FC5, 0x8FC4, 0x5DE1, 0x9091, 0x90A2, 0x90AA, 0x90A6, 0x90A3,
+    0x9149, 0x91C6, 0x91CC, 0x9632, 0x962E, 0x9631, 0x962A, 0x962C,
+    0x4E26, 0x4E56, 0x4E73, 0x4E8B, 0x4E9B, 0x4E9E, 0x4EAB, 0x4EAC,
+    0x4F6F, 0x4F9D, 0x4F8D, 0x4F73, 0x4F7F, 0x4F6C, 0x4F9B, 0x4F8B,
+    0x4F86, 0x4F83, 0x4F70, 0x4F75, 0x4F88, 0x4F69, 0x4F7B, 0x4F96,
+    0x4F7E, 0x4F8F, 0x4F91, 0x4F7A, 0x5154, 0x5152, 0x5155, 0x5169,
+    0x5177, 0x5176, 0x5178, 0x51BD, 0x51FD, 0x523B, 0x5238, 0x5237,
+    0x523A, 0x5230, 0x522E, 0x5236, 0x5241, 0x52BE, 0x52BB, 0x5352,
+    0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, 0x53D6,
+    0x53D4, 0x53D7, 0x5473, 0x5475, 0x5496, 0x5478, 0x5495, 0x5480,
+    0x547B, 0x5477, 0x5484, 0x5492, 0x5486, 0x547C, 0x5490, 0x5471,
+    0x5476, 0x548C, 0x549A, 0x5462, 0x5468, 0x548B, 0x547D, 0x548E,
+    0x56FA, 0x5783, 0x5777, 0x576A, 0x5769, 0x5761, 0x5766, 0x5764,
+    0x577C, 0x591C, 0x5949, 0x5947, 0x5948, 0x5944, 0x5954, 0x59BE,
+    0x59BB, 0x59D4, 0x59B9, 0x59AE, 0x59D1, 0x59C6, 0x59D0, 0x59CD,
+    0x59CB, 0x59D3, 0x59CA, 0x59AF, 0x59B3, 0x59D2, 0x59C5, 0x5B5F,
+    0x5B64, 0x5B63, 0x5B97, 0x5B9A, 0x5B98, 0x5B9C, 0x5B99, 0x5B9B,
+    0x5C1A, 0x5C48, 0x5C45, 0x5C46, 0x5CB7, 0x5CA1, 0x5CB8, 0x5CA9,
+    0x5CAB, 0x5CB1, 0x5CB3, 0x5E18, 0x5E1A, 0x5E16, 0x5E15, 0x5E1B,
+    0x5E11, 0x5E78, 0x5E9A, 0x5E97, 0x5E9C, 0x5E95, 0x5E96, 0x5EF6,
+    0x5F26, 0x5F27, 0x5F29, 0x5F80, 0x5F81, 0x5F7F, 0x5F7C, 0x5FDD,
+    0x5FE0, 0x5FFD, 0x5FF5, 0x5FFF, 0x600F, 0x6014, 0x602F, 0x6035,
+    0x6016, 0x602A, 0x6015, 0x6021, 0x6027, 0x6029, 0x602B, 0x601B,
+    0x6216, 0x6215, 0x623F, 0x623E, 0x6240, 0x627F, 0x62C9, 0x62CC,
+    0x62C4, 0x62BF, 0x62C2, 0x62B9, 0x62D2, 0x62DB, 0x62AB, 0x62D3,
+    0x62D4, 0x62CB, 0x62C8, 0x62A8, 0x62BD, 0x62BC, 0x62D0, 0x62D9,
+    0x62C7, 0x62CD, 0x62B5, 0x62DA, 0x62B1, 0x62D8, 0x62D6, 0x62D7,
+    0x62C6, 0x62AC, 0x62CE, 0x653E, 0x65A7, 0x65BC, 0x65FA, 0x6614,
+    0x6613, 0x660C, 0x6606, 0x6602, 0x660E, 0x6600, 0x660F, 0x6615,
+    0x660A, 0x6607, 0x670D, 0x670B, 0x676D, 0x678B, 0x6795, 0x6771,
+    0x679C, 0x6773, 0x6777, 0x6787, 0x679D, 0x6797, 0x676F, 0x6770,
+    0x677F, 0x6789, 0x677E, 0x6790, 0x6775, 0x679A, 0x6793, 0x677C,
+    0x676A, 0x6772, 0x6B23, 0x6B66, 0x6B67, 0x6B7F, 0x6C13, 0x6C1B,
+    0x6CE3, 0x6CE8, 0x6CF3, 0x6CB1, 0x6CCC, 0x6CE5, 0x6CB3, 0x6CBD,
+    0x6CBE, 0x6CBC, 0x6CE2, 0x6CAB, 0x6CD5, 0x6CD3, 0x6CB8, 0x6CC4,
+    0x6CB9, 0x6CC1, 0x6CAE, 0x6CD7, 0x6CC5, 0x6CF1, 0x6CBF, 0x6CBB,
+    0x6CE1, 0x6CDB, 0x6CCA, 0x6CAC, 0x6CEF, 0x6CDC, 0x6CD6, 0x6CE0,
+    0x7095, 0x708E, 0x7092, 0x708A, 0x7099, 0x722C, 0x722D, 0x7238,
+    0x7248, 0x7267, 0x7269, 0x72C0, 0x72CE, 0x72D9, 0x72D7, 0x72D0,
+    0x73A9, 0x73A8, 0x739F, 0x73AB, 0x73A5, 0x753D, 0x759D, 0x7599,
+    0x759A, 0x7684, 0x76C2, 0x76F2, 0x76F4, 0x77E5, 0x77FD, 0x793E,
+    0x7940, 0x7941, 0x79C9, 0x79C8, 0x7A7A, 0x7A79, 0x7AFA, 0x7CFE,
+    0x7F54, 0x7F8C, 0x7F8B, 0x8005, 0x80BA, 0x80A5, 0x80A2, 0x80B1,
+    0x80A1, 0x80AB, 0x80A9, 0x80B4, 0x80AA, 0x80AF, 0x81E5, 0x81FE,
+    0x820D, 0x82B3, 0x829D, 0x8299, 0x82AD, 0x82BD, 0x829F, 0x82B9,
+    0x82B1, 0x82AC, 0x82A5, 0x82AF, 0x82B8, 0x82A3, 0x82B0, 0x82BE,
+    0x82B7, 0x864E, 0x8671, 0x521D, 0x8868, 0x8ECB, 0x8FCE, 0x8FD4,
+    0x8FD1, 0x90B5, 0x90B8, 0x90B1, 0x90B6, 0x91C7, 0x91D1, 0x9577,
+    0x9580, 0x961C, 0x9640, 0x963F, 0x963B, 0x9644, 0x9642, 0x96B9,
+    0x96E8, 0x9752, 0x975E, 0x4E9F, 0x4EAD, 0x4EAE, 0x4FE1, 0x4FB5,
+    0x4FAF, 0x4FBF, 0x4FE0, 0x4FD1, 0x4FCF, 0x4FDD, 0x4FC3, 0x4FB6,
+    0x4FD8, 0x4FDF, 0x4FCA, 0x4FD7, 0x4FAE, 0x4FD0, 0x4FC4, 0x4FC2,
+    0x4FDA, 0x4FCE, 0x4FDE, 0x4FB7, 0x5157, 0x5192, 0x5191, 0x51A0,
+    0x524E, 0x5243, 0x524A, 0x524D, 0x524C, 0x524B, 0x5247, 0x52C7,
+    0x52C9, 0x52C3, 0x52C1, 0x530D, 0x5357, 0x537B, 0x539A, 0x53DB,
+    0x54AC, 0x54C0, 0x54A8, 0x54CE, 0x54C9, 0x54B8, 0x54A6, 0x54B3,
+    0x54C7, 0x54C2, 0x54BD, 0x54AA, 0x54C1, 0x54C4, 0x54C8, 0x54AF,
+    0x54AB, 0x54B1, 0x54BB, 0x54A9, 0x54A7, 0x54BF, 0x56FF, 0x5782,
+    0x578B, 0x57A0, 0x57A3, 0x57A2, 0x57CE, 0x57AE, 0x5793, 0x5955,
+    0x5951, 0x594F, 0x594E, 0x5950, 0x59DC, 0x59D8, 0x59FF, 0x59E3,
+    0x59E8, 0x5A03, 0x59E5, 0x59EA, 0x59DA, 0x59E6, 0x5A01, 0x59FB,
+    0x5B69, 0x5BA3, 0x5BA6, 0x5BA4, 0x5BA2, 0x5BA5, 0x5C01, 0x5C4E,
+    0x5C4F, 0x5C4D, 0x5C4B, 0x5CD9, 0x5CD2, 0x5DF7, 0x5E1D, 0x5E25,
+    0x5E1F, 0x5E7D, 0x5EA0, 0x5EA6, 0x5EFA, 0x5F08, 0x5F2D, 0x5F65,
+    0x5F88, 0x5F85, 0x5F8A, 0x5F8B, 0x5F87, 0x5F8C, 0x5F89, 0x6012,
+    0x601D, 0x6020, 0x6025, 0x600E, 0x6028, 0x604D, 0x6070, 0x6068,
+    0x6062, 0x6046, 0x6043, 0x606C, 0x606B, 0x606A, 0x6064, 0x6241,
+    0x62DC, 0x6316, 0x6309, 0x62FC, 0x62ED, 0x6301, 0x62EE, 0x62FD,
+    0x6307, 0x62F1, 0x62F7, 0x62EF, 0x62EC, 0x62FE, 0x62F4, 0x6311,
+    0x6302, 0x653F, 0x6545, 0x65AB, 0x65BD, 0x65E2, 0x6625, 0x662D,
+    0x6620, 0x6627, 0x662F, 0x661F, 0x6628, 0x6631, 0x6624, 0x66F7,
+    0x67FF, 0x67D3, 0x67F1, 0x67D4, 0x67D0, 0x67EC, 0x67B6, 0x67AF,
+    0x67F5, 0x67E9, 0x67EF, 0x67C4, 0x67D1, 0x67B4, 0x67DA, 0x67E5,
+    0x67B8, 0x67CF, 0x67DE, 0x67F3, 0x67B0, 0x67D9, 0x67E2, 0x67DD,
+    0x67D2, 0x6B6A, 0x6B83, 0x6B86, 0x6BB5, 0x6BD2, 0x6BD7, 0x6C1F,
+    0x6CC9, 0x6D0B, 0x6D32, 0x6D2A, 0x6D41, 0x6D25, 0x6D0C, 0x6D31,
+    0x6D1E, 0x6D17, 0x6D3B, 0x6D3D, 0x6D3E, 0x6D36, 0x6D1B, 0x6CF5,
+    0x6D39, 0x6D27, 0x6D38, 0x6D29, 0x6D2E, 0x6D35, 0x6D0E, 0x6D2B,
+    0x70AB, 0x70BA, 0x70B3, 0x70AC, 0x70AF, 0x70AD, 0x70B8, 0x70AE,
+    0x70A4, 0x7230, 0x7272, 0x726F, 0x7274, 0x72E9, 0x72E0, 0x72E1,
+    0x73B7, 0x73CA, 0x73BB, 0x73B2, 0x73CD, 0x73C0, 0x73B3, 0x751A,
+    0x752D, 0x754F, 0x754C, 0x754E, 0x754B, 0x75AB, 0x75A4, 0x75A5,
+    0x75A2, 0x75A3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76C8, 0x76C6,
+    0x76C3, 0x76C5, 0x7701, 0x76F9, 0x76F8, 0x7709, 0x770B, 0x76FE,
+    0x76FC, 0x7707, 0x77DC, 0x7802, 0x7814, 0x780C, 0x780D, 0x7946,
+    0x7949, 0x7948, 0x7947, 0x79B9, 0x79BA, 0x79D1, 0x79D2, 0x79CB,
+    0x7A7F, 0x7A81, 0x7AFF, 0x7AFD, 0x7C7D, 0x7D02, 0x7D05, 0x7D00,
+    0x7D09, 0x7D07, 0x7D04, 0x7D06, 0x7F38, 0x7F8E, 0x7FBF, 0x8010,
+    0x800D, 0x8011, 0x8036, 0x80D6, 0x80E5, 0x80DA, 0x80C3, 0x80C4,
+    0x80CC, 0x80E1, 0x80DB, 0x80CE, 0x80DE, 0x80E4, 0x80DD, 0x81F4,
+    0x8222, 0x82E7, 0x8303, 0x8305, 0x82E3, 0x82DB, 0x82E6, 0x8304,
+    0x82E5, 0x8302, 0x8309, 0x82D2, 0x82D7, 0x82F1, 0x8301, 0x82DC,
+    0x82D4, 0x82D1, 0x82DE, 0x82D3, 0x82DF, 0x82EF, 0x8306, 0x8650,
+    0x8679, 0x867B, 0x867A, 0x884D, 0x886B, 0x8981, 0x89D4, 0x8A08,
+    0x8A02, 0x8A03, 0x8C9E, 0x8CA0, 0x8D74, 0x8D73, 0x8DB4, 0x8ECD,
+    0x8ECC, 0x8FF0, 0x8FE6, 0x8FE2, 0x8FEA, 0x8FE5, 0x8FED, 0x8FEB,
+    0x8FE4, 0x8FE8, 0x90CA, 0x90CE, 0x90C1, 0x90C3, 0x914B, 0x914A,
+    0x91CD, 0x9582, 0x9650, 0x964B, 0x964C, 0x964D, 0x9762, 0x9769,
+    0x97CB, 0x97ED, 0x97F3, 0x9801, 0x98A8, 0x98DB, 0x98DF, 0x9996,
+    0x9999, 0x4E58, 0x4EB3, 0x500C, 0x500D, 0x5023, 0x4FEF, 0x5026,
+    0x5025, 0x4FF8, 0x5029, 0x5016, 0x5006, 0x503C, 0x501F, 0x501A,
+    0x5012, 0x5011, 0x4FFA, 0x5000, 0x5014, 0x5028, 0x4FF1, 0x5021,
+    0x500B, 0x5019, 0x5018, 0x4FF3, 0x4FEE, 0x502D, 0x502A, 0x4FFE,
+    0x502B, 0x5009, 0x517C, 0x51A4, 0x51A5, 0x51A2, 0x51CD, 0x51CC,
+    0x51C6, 0x51CB, 0x5256, 0x525C, 0x5254, 0x525B, 0x525D, 0x532A,
+    0x537F, 0x539F, 0x539D, 0x53DF, 0x54E8, 0x5510, 0x5501, 0x5537,
+    0x54FC, 0x54E5, 0x54F2, 0x5506, 0x54FA, 0x5514, 0x54E9, 0x54ED,
+    0x54E1, 0x5509, 0x54EE, 0x54EA, 0x54E6, 0x5527, 0x5507, 0x54FD,
+    0x550F, 0x5703, 0x5704, 0x57C2, 0x57D4, 0x57CB, 0x57C3, 0x5809,
+    0x590F, 0x5957, 0x5958, 0x595A, 0x5A11, 0x5A18, 0x5A1C, 0x5A1F,
+    0x5A1B, 0x5A13, 0x59EC, 0x5A20, 0x5A23, 0x5A29, 0x5A25, 0x5A0C,
+    0x5A09, 0x5B6B, 0x5C58, 0x5BB0, 0x5BB3, 0x5BB6, 0x5BB4, 0x5BAE,
+    0x5BB5, 0x5BB9, 0x5BB8, 0x5C04, 0x5C51, 0x5C55, 0x5C50, 0x5CED,
+    0x5CFD, 0x5CFB, 0x5CEA, 0x5CE8, 0x5CF0, 0x5CF6, 0x5D01, 0x5CF4,
+    0x5DEE, 0x5E2D, 0x5E2B, 0x5EAB, 0x5EAD, 0x5EA7, 0x5F31, 0x5F92,
+    0x5F91, 0x5F90, 0x6059, 0x6063, 0x6065, 0x6050, 0x6055, 0x606D,
+    0x6069, 0x606F, 0x6084, 0x609F, 0x609A, 0x608D, 0x6094, 0x608C,
+    0x6085, 0x6096, 0x6247, 0x62F3, 0x6308, 0x62FF, 0x634E, 0x633E,
+    0x632F, 0x6355, 0x6342, 0x6346, 0x634F, 0x6349, 0x633A, 0x6350,
+    0x633D, 0x632A, 0x632B, 0x6328, 0x634D, 0x634C, 0x6548, 0x6549,
+    0x6599, 0x65C1, 0x65C5, 0x6642, 0x6649, 0x664F, 0x6643, 0x6652,
+    0x664C, 0x6645, 0x6641, 0x66F8, 0x6714, 0x6715, 0x6717, 0x6821,
+    0x6838, 0x6848, 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829,
+    0x68B3, 0x6817, 0x684C, 0x6851, 0x683D, 0x67F4, 0x6850, 0x6840,
+    0x683C, 0x6843, 0x682A, 0x6845, 0x6813, 0x6818, 0x6841, 0x6B8A,
+    0x6B89, 0x6BB7, 0x6C23, 0x6C27, 0x6C28, 0x6C26, 0x6C24, 0x6CF0,
+    0x6D6A, 0x6D95, 0x6D88, 0x6D87, 0x6D66, 0x6D78, 0x6D77, 0x6D59,
+    0x6D93, 0x6D6C, 0x6D89, 0x6D6E, 0x6D5A, 0x6D74, 0x6D69, 0x6D8C,
+    0x6D8A, 0x6D79, 0x6D85, 0x6D65, 0x6D94, 0x70CA, 0x70D8, 0x70E4,
+    0x70D9, 0x70C8, 0x70CF, 0x7239, 0x7279, 0x72FC, 0x72F9, 0x72FD,
+    0x72F8, 0x72F7, 0x7386, 0x73ED, 0x7409, 0x73EE, 0x73E0, 0x73EA,
+    0x73DE, 0x7554, 0x755D, 0x755C, 0x755A, 0x7559, 0x75BE, 0x75C5,
+    0x75C7, 0x75B2, 0x75B3, 0x75BD, 0x75BC, 0x75B9, 0x75C2, 0x75B8,
+    0x768B, 0x76B0, 0x76CA, 0x76CD, 0x76CE, 0x7729, 0x771F, 0x7720,
+    0x7728, 0x77E9, 0x7830, 0x7827, 0x7838, 0x781D, 0x7834, 0x7837,
+    0x7825, 0x782D, 0x7820, 0x781F, 0x7832, 0x7955, 0x7950, 0x7960,
+    0x795F, 0x7956, 0x795E, 0x795D, 0x7957, 0x795A, 0x79E4, 0x79E3,
+    0x79E7, 0x79DF, 0x79E6, 0x79E9, 0x79D8, 0x7A84, 0x7A88, 0x7AD9,
+    0x7B06, 0x7B11, 0x7C89, 0x7D21, 0x7D17, 0x7D0B, 0x7D0A, 0x7D20,
+    0x7D22, 0x7D14, 0x7D10, 0x7D15, 0x7D1A, 0x7D1C, 0x7D0D, 0x7D19,
+    0x7D1B, 0x7F3A, 0x7F5F, 0x7F94, 0x7FC5, 0x7FC1, 0x8006, 0x8004,
+    0x8018, 0x8015, 0x8019, 0x8017, 0x803D, 0x803F, 0x80F1, 0x8102,
+    0x80F0, 0x8105, 0x80ED, 0x80F4, 0x8106, 0x80F8, 0x80F3, 0x8108,
+    0x80FD, 0x810A, 0x80FC, 0x80EF, 0x81ED, 0x81EC, 0x8200, 0x8210,
+    0x822A, 0x822B, 0x8228, 0x822C, 0x82BB, 0x832B, 0x8352, 0x8354,
+    0x834A, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834F, 0x8332,
+    0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, 0x8654,
+    0x868A, 0x86AA, 0x8693, 0x86A4, 0x86A9, 0x868C, 0x86A3, 0x869C,
+    0x8870, 0x8877, 0x8881, 0x8882, 0x887D, 0x8879, 0x8A18, 0x8A10,
+    0x8A0E, 0x8A0C, 0x8A15, 0x8A0A, 0x8A17, 0x8A13, 0x8A16, 0x8A0F,
+    0x8A11, 0x8C48, 0x8C7A, 0x8C79, 0x8CA1, 0x8CA2, 0x8D77, 0x8EAC,
+    0x8ED2, 0x8ED4, 0x8ECF, 0x8FB1, 0x9001, 0x9006, 0x8FF7, 0x9000,
+    0x8FFA, 0x8FF4, 0x9003, 0x8FFD, 0x9005, 0x8FF8, 0x9095, 0x90E1,
+    0x90DD, 0x90E2, 0x9152, 0x914D, 0x914C, 0x91D8, 0x91DD, 0x91D7,
+    0x91DC, 0x91D9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965B, 0x965D,
+    0x9664, 0x9658, 0x965E, 0x96BB, 0x98E2, 0x99AC, 0x9AA8, 0x9AD8,
+    0x9B25, 0x9B32, 0x9B3C, 0x4E7E, 0x507A, 0x507D, 0x505C, 0x5047,
+    0x5043, 0x504C, 0x505A, 0x5049, 0x5065, 0x5076, 0x504E, 0x5055,
+    0x5075, 0x5074, 0x5077, 0x504F, 0x500F, 0x506F, 0x506D, 0x515C,
+    0x5195, 0x51F0, 0x526A, 0x526F, 0x52D2, 0x52D9, 0x52D8, 0x52D5,
+    0x5310, 0x530F, 0x5319, 0x533F, 0x5340, 0x533E, 0x53C3, 0x66FC,
+    0x5546, 0x556A, 0x5566, 0x5544, 0x555E, 0x5561, 0x5543, 0x554A,
+    0x5531, 0x5556, 0x554F, 0x5555, 0x552F, 0x5564, 0x5538, 0x552E,
+    0x555C, 0x552C, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570B,
+    0x5709, 0x57DF, 0x5805, 0x580A, 0x5806, 0x57E0, 0x57E4, 0x57FA,
+    0x5802, 0x5835, 0x57F7, 0x57F9, 0x5920, 0x5962, 0x5A36, 0x5A41,
+    0x5A49, 0x5A66, 0x5A6A, 0x5A40, 0x5A3C, 0x5A62, 0x5A5A, 0x5A46,
+    0x5A4A, 0x5B70, 0x5BC7, 0x5BC5, 0x5BC4, 0x5BC2, 0x5BBF, 0x5BC6,
+    0x5C09, 0x5C08, 0x5C07, 0x5C60, 0x5C5C, 0x5C5D, 0x5D07, 0x5D06,
+    0x5D0E, 0x5D1B, 0x5D16, 0x5D22, 0x5D11, 0x5D29, 0x5D14, 0x5D19,
+    0x5D24, 0x5D27, 0x5D17, 0x5DE2, 0x5E38, 0x5E36, 0x5E33, 0x5E37,
+    0x5EB7, 0x5EB8, 0x5EB6, 0x5EB5, 0x5EBE, 0x5F35, 0x5F37, 0x5F57,
+    0x5F6C, 0x5F69, 0x5F6B, 0x5F97, 0x5F99, 0x5F9E, 0x5F98, 0x5FA1,
+    0x5FA0, 0x5F9C, 0x607F, 0x60A3, 0x6089, 0x60A0, 0x60A8, 0x60CB,
+    0x60B4, 0x60E6, 0x60BD, 0x60C5, 0x60BB, 0x60B5, 0x60DC, 0x60BC,
+    0x60D8, 0x60D5, 0x60C6, 0x60DF, 0x60B8, 0x60DA, 0x60C7, 0x621A,
+    0x621B, 0x6248, 0x63A0, 0x63A7, 0x6372, 0x6396, 0x63A2, 0x63A5,
+    0x6377, 0x6367, 0x6398, 0x63AA, 0x6371, 0x63A9, 0x6389, 0x6383,
+    0x639B, 0x636B, 0x63A8, 0x6384, 0x6388, 0x6399, 0x63A1, 0x63AC,
+    0x6392, 0x638F, 0x6380, 0x637B, 0x6369, 0x6368, 0x637A, 0x655D,
+    0x6556, 0x6551, 0x6559, 0x6557, 0x555F, 0x654F, 0x6558, 0x6555,
+    0x6554, 0x659C, 0x659B, 0x65AC, 0x65CF, 0x65CB, 0x65CC, 0x65CE,
+    0x665D, 0x665A, 0x6664, 0x6668, 0x6666, 0x665E, 0x66F9, 0x52D7,
+    0x671B, 0x6881, 0x68AF, 0x68A2, 0x6893, 0x68B5, 0x687F, 0x6876,
+    0x68B1, 0x68A7, 0x6897, 0x68B0, 0x6883, 0x68C4, 0x68AD, 0x6886,
+    0x6885, 0x6894, 0x689D, 0x68A8, 0x689F, 0x68A1, 0x6882, 0x6B32,
+    0x6BBA, 0x6BEB, 0x6BEC, 0x6C2B, 0x6D8E, 0x6DBC, 0x6DF3, 0x6DD9,
+    0x6DB2, 0x6DE1, 0x6DCC, 0x6DE4, 0x6DFB, 0x6DFA, 0x6E05, 0x6DC7,
+    0x6DCB, 0x6DAF, 0x6DD1, 0x6DAE, 0x6DDE, 0x6DF9, 0x6DB8, 0x6DF7,
+    0x6DF5, 0x6DC5, 0x6DD2, 0x6E1A, 0x6DB5, 0x6DDA, 0x6DEB, 0x6DD8,
+    0x6DEA, 0x6DF1, 0x6DEE, 0x6DE8, 0x6DC6, 0x6DC4, 0x6DAA, 0x6DEC,
+    0x6DBF, 0x6DE6, 0x70F9, 0x7109, 0x710A, 0x70FD, 0x70EF, 0x723D,
+    0x727D, 0x7281, 0x731C, 0x731B, 0x7316, 0x7313, 0x7319, 0x7387,
+    0x7405, 0x740A, 0x7403, 0x7406, 0x73FE, 0x740D, 0x74E0, 0x74F6,
+    0x74F7, 0x751C, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758F,
+    0x75D4, 0x75D5, 0x75B5, 0x75CA, 0x75CD, 0x768E, 0x76D4, 0x76D2,
+    0x76DB, 0x7737, 0x773E, 0x773C, 0x7736, 0x7738, 0x773A, 0x786B,
+    0x7843, 0x784E, 0x7965, 0x7968, 0x796D, 0x79FB, 0x7A92, 0x7A95,
+    0x7B20, 0x7B28, 0x7B1B, 0x7B2C, 0x7B26, 0x7B19, 0x7B1E, 0x7B2E,
+    0x7C92, 0x7C97, 0x7C95, 0x7D46, 0x7D43, 0x7D71, 0x7D2E, 0x7D39,
+    0x7D3C, 0x7D40, 0x7D30, 0x7D33, 0x7D44, 0x7D2F, 0x7D42, 0x7D32,
+    0x7D31, 0x7F3D, 0x7F9E, 0x7F9A, 0x7FCC, 0x7FCE, 0x7FD2, 0x801C,
+    0x804A, 0x8046, 0x812F, 0x8116, 0x8123, 0x812B, 0x8129, 0x8130,
+    0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838E, 0x839E,
+    0x8398, 0x8378, 0x83A2, 0x8396, 0x83BD, 0x83AB, 0x8392, 0x838A,
+    0x8393, 0x8389, 0x83A0, 0x8377, 0x837B, 0x837C, 0x8386, 0x83A7,
+    0x8655, 0x5F6A, 0x86C7, 0x86C0, 0x86B6, 0x86C4, 0x86B5, 0x86C6,
+    0x86CB, 0x86B1, 0x86AF, 0x86C9, 0x8853, 0x889E, 0x8888, 0x88AB,
+    0x8892, 0x8896, 0x888D, 0x888B, 0x8993, 0x898F, 0x8A2A, 0x8A1D,
+    0x8A23, 0x8A25, 0x8A31, 0x8A2D, 0x8A1F, 0x8A1B, 0x8A22, 0x8C49,
+    0x8C5A, 0x8CA9, 0x8CAC, 0x8CAB, 0x8CA8, 0x8CAA, 0x8CA7, 0x8D67,
+    0x8D66, 0x8DBE, 0x8DBA, 0x8EDB, 0x8EDF, 0x9019, 0x900D, 0x901A,
+    0x9017, 0x9023, 0x901F, 0x901D, 0x9010, 0x9015, 0x901E, 0x9020,
+    0x900F, 0x9022, 0x9016, 0x901B, 0x9014, 0x90E8, 0x90ED, 0x90FD,
+    0x9157, 0x91CE, 0x91F5, 0x91E6, 0x91E3, 0x91E7, 0x91ED, 0x91E9,
+    0x9589, 0x966A, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676,
+    0x9677, 0x966C, 0x96C0, 0x96EA, 0x96E9, 0x7AE0, 0x7ADF, 0x9802,
+    0x9803, 0x9B5A, 0x9CE5, 0x9E75, 0x9E7F, 0x9EA5, 0x9EBB, 0x50A2,
+    0x508D, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, 0x5098, 0x509A,
+    0x6700, 0x51F1, 0x5272, 0x5274, 0x5275, 0x5269, 0x52DE, 0x52DD,
+    0x52DB, 0x535A, 0x53A5, 0x557B, 0x5580, 0x55A7, 0x557C, 0x558A,
+    0x559D, 0x5598, 0x5582, 0x559C, 0x55AA, 0x5594, 0x5587, 0x558B,
+    0x5583, 0x55B3, 0x55AE, 0x559F, 0x553E, 0x55B2, 0x559A, 0x55BB,
+    0x55AC, 0x55B1, 0x557E, 0x5589, 0x55AB, 0x5599, 0x570D, 0x582F,
+    0x582A, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581D, 0x5820,
+    0x58F9, 0x58FA, 0x5960, 0x5A77, 0x5A9A, 0x5A7F, 0x5A92, 0x5A9B,
+    0x5AA7, 0x5B73, 0x5B71, 0x5BD2, 0x5BCC, 0x5BD3, 0x5BD0, 0x5C0A,
+    0x5C0B, 0x5C31, 0x5D4C, 0x5D50, 0x5D34, 0x5D47, 0x5DFD, 0x5E45,
+    0x5E3D, 0x5E40, 0x5E43, 0x5E7E, 0x5ECA, 0x5EC1, 0x5EC2, 0x5EC4,
+    0x5F3C, 0x5F6D, 0x5FA9, 0x5FAA, 0x5FA8, 0x60D1, 0x60E1, 0x60B2,
+    0x60B6, 0x60E0, 0x611C, 0x6123, 0x60FA, 0x6115, 0x60F0, 0x60FB,
+    0x60F4, 0x6168, 0x60F1, 0x610E, 0x60F6, 0x6109, 0x6100, 0x6112,
+    0x621F, 0x6249, 0x63A3, 0x638C, 0x63CF, 0x63C0, 0x63E9, 0x63C9,
+    0x63C6, 0x63CD, 0x63D2, 0x63E3, 0x63D0, 0x63E1, 0x63D6, 0x63ED,
+    0x63EE, 0x6376, 0x63F4, 0x63EA, 0x63DB, 0x6452, 0x63DA, 0x63F9,
+    0x655E, 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65AF, 0x666E,
+    0x6670, 0x6674, 0x6676, 0x666F, 0x6691, 0x667A, 0x667E, 0x6677,
+    0x66FE, 0x66FF, 0x671F, 0x671D, 0x68FA, 0x68D5, 0x68E0, 0x68D8,
+    0x68D7, 0x6905, 0x68DF, 0x68F5, 0x68EE, 0x68E7, 0x68F9, 0x68D2,
+    0x68F2, 0x68E3, 0x68CB, 0x68CD, 0x690D, 0x6912, 0x690E, 0x68C9,
+    0x68DA, 0x696E, 0x68FB, 0x6B3E, 0x6B3A, 0x6B3D, 0x6B98, 0x6B96,
+    0x6BBC, 0x6BEF, 0x6C2E, 0x6C2F, 0x6C2C, 0x6E2F, 0x6E38, 0x6E54,
+    0x6E21, 0x6E32, 0x6E67, 0x6E4A, 0x6E20, 0x6E25, 0x6E23, 0x6E1B,
+    0x6E5B, 0x6E58, 0x6E24, 0x6E56, 0x6E6E, 0x6E2D, 0x6E26, 0x6E6F,
+    0x6E34, 0x6E4D, 0x6E3A, 0x6E2C, 0x6E43, 0x6E1D, 0x6E3E, 0x6ECB,
+    0x6E89, 0x6E19, 0x6E4E, 0x6E63, 0x6E44, 0x6E72, 0x6E69, 0x6E5F,
+    0x7119, 0x711A, 0x7126, 0x7130, 0x7121, 0x7136, 0x716E, 0x711C,
+    0x724C, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743A,
+    0x742A, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742F,
+    0x741B, 0x7426, 0x7428, 0x7525, 0x7526, 0x756B, 0x756A, 0x75E2,
+    0x75DB, 0x75E3, 0x75D9, 0x75D8, 0x75DE, 0x75E0, 0x767B, 0x767C,
+    0x7696, 0x7693, 0x76B4, 0x76DC, 0x774F, 0x77ED, 0x785D, 0x786C,
+    0x786F, 0x7A0D, 0x7A08, 0x7A0B, 0x7A05, 0x7A00, 0x7A98, 0x7A97,
+    0x7A96, 0x7AE5, 0x7AE3, 0x7B49, 0x7B56, 0x7B46, 0x7B50, 0x7B52,
+    0x7B54, 0x7B4D, 0x7B4B, 0x7B4F, 0x7B51, 0x7C9F, 0x7CA5, 0x7D5E,
+    0x7D50, 0x7D68, 0x7D55, 0x7D2B, 0x7D6E, 0x7D72, 0x7D61, 0x7D66,
+    0x7D62, 0x7D70, 0x7D73, 0x5584, 0x7FD4, 0x7FD5, 0x800B, 0x8052,
+    0x8085, 0x8155, 0x8154, 0x814B, 0x8151, 0x814E, 0x8139, 0x8146,
+    0x813E, 0x814C, 0x8153, 0x8174, 0x8212, 0x821C, 0x83E9, 0x8403,
+    0x83F8, 0x840D, 0x83E0, 0x83C5, 0x840B, 0x83C1, 0x83EF, 0x83F1,
+    0x83F4, 0x8457, 0x840A, 0x83F0, 0x840C, 0x83CC, 0x83FD, 0x83F2,
+    0x83CA, 0x8438, 0x840E, 0x8404, 0x83DC, 0x8407, 0x83D4, 0x83DF,
+    0x865B, 0x86DF, 0x86D9, 0x86ED, 0x86D4, 0x86DB, 0x86E4, 0x86D0,
+    0x86DE, 0x8857, 0x88C1, 0x88C2, 0x88B1, 0x8983, 0x8996, 0x8A3B,
+    0x8A60, 0x8A55, 0x8A5E, 0x8A3C, 0x8A41, 0x8A54, 0x8A5B, 0x8A50,
+    0x8A46, 0x8A34, 0x8A3A, 0x8A36, 0x8A56, 0x8C61, 0x8C82, 0x8CAF,
+    0x8CBC, 0x8CB3, 0x8CBD, 0x8CC1, 0x8CBB, 0x8CC0, 0x8CB4, 0x8CB7,
+    0x8CB6, 0x8CBF, 0x8CB8, 0x8D8A, 0x8D85, 0x8D81, 0x8DCE, 0x8DDD,
+    0x8DCB, 0x8DDA, 0x8DD1, 0x8DCC, 0x8DDB, 0x8DC6, 0x8EFB, 0x8EF8,
+    0x8EFC, 0x8F9C, 0x902E, 0x9035, 0x9031, 0x9038, 0x9032, 0x9036,
+    0x9102, 0x90F5, 0x9109, 0x90FE, 0x9163, 0x9165, 0x91CF, 0x9214,
+    0x9215, 0x9223, 0x9209, 0x921E, 0x920D, 0x9210, 0x9207, 0x9211,
+    0x9594, 0x958F, 0x958B, 0x9591, 0x9593, 0x9592, 0x958E, 0x968A,
+    0x968E, 0x968B, 0x967D, 0x9685, 0x9686, 0x968D, 0x9672, 0x9684,
+    0x96C1, 0x96C5, 0x96C4, 0x96C6, 0x96C7, 0x96EF, 0x96F2, 0x97CC,
+    0x9805, 0x9806, 0x9808, 0x98E7, 0x98EA, 0x98EF, 0x98E9, 0x98F2,
+    0x98ED, 0x99AE, 0x99AD, 0x9EC3, 0x9ECD, 0x9ED1, 0x4E82, 0x50AD,
+    0x50B5, 0x50B2, 0x50B3, 0x50C5, 0x50BE, 0x50AC, 0x50B7, 0x50BB,
+    0x50AF, 0x50C7, 0x527F, 0x5277, 0x527D, 0x52DF, 0x52E6, 0x52E4,
+    0x52E2, 0x52E3, 0x532F, 0x55DF, 0x55E8, 0x55D3, 0x55E6, 0x55CE,
+    0x55DC, 0x55C7, 0x55D1, 0x55E3, 0x55E4, 0x55EF, 0x55DA, 0x55E1,
+    0x55C5, 0x55C6, 0x55E5, 0x55C9, 0x5712, 0x5713, 0x585E, 0x5851,
+    0x5858, 0x5857, 0x585A, 0x5854, 0x586B, 0x584C, 0x586D, 0x584A,
+    0x5862, 0x5852, 0x584B, 0x5967, 0x5AC1, 0x5AC9, 0x5ACC, 0x5ABE,
+    0x5ABD, 0x5ABC, 0x5AB3, 0x5AC2, 0x5AB2, 0x5D69, 0x5D6F, 0x5E4C,
+    0x5E79, 0x5EC9, 0x5EC8, 0x5F12, 0x5F59, 0x5FAC, 0x5FAE, 0x611A,
+    0x610F, 0x6148, 0x611F, 0x60F3, 0x611B, 0x60F9, 0x6101, 0x6108,
+    0x614E, 0x614C, 0x6144, 0x614D, 0x613E, 0x6134, 0x6127, 0x610D,
+    0x6106, 0x6137, 0x6221, 0x6222, 0x6413, 0x643E, 0x641E, 0x642A,
+    0x642D, 0x643D, 0x642C, 0x640F, 0x641C, 0x6414, 0x640D, 0x6436,
+    0x6416, 0x6417, 0x6406, 0x656C, 0x659F, 0x65B0, 0x6697, 0x6689,
+    0x6687, 0x6688, 0x6696, 0x6684, 0x6698, 0x668D, 0x6703, 0x6994,
+    0x696D, 0x695A, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982,
+    0x694A, 0x6968, 0x696B, 0x695E, 0x6953, 0x6979, 0x6986, 0x695D,
+    0x6963, 0x695B, 0x6B47, 0x6B72, 0x6BC0, 0x6BBF, 0x6BD3, 0x6BFD,
+    0x6EA2, 0x6EAF, 0x6ED3, 0x6EB6, 0x6EC2, 0x6E90, 0x6E9D, 0x6EC7,
+    0x6EC5, 0x6EA5, 0x6E98, 0x6EBC, 0x6EBA, 0x6EAB, 0x6ED1, 0x6E96,
+    0x6E9C, 0x6EC4, 0x6ED4, 0x6EAA, 0x6EA7, 0x6EB4, 0x714E, 0x7159,
+    0x7169, 0x7164, 0x7149, 0x7167, 0x715C, 0x716C, 0x7166, 0x714C,
+    0x7165, 0x715E, 0x7146, 0x7168, 0x7156, 0x723A, 0x7252, 0x7337,
+    0x7345, 0x733F, 0x733E, 0x746F, 0x745A, 0x7455, 0x745F, 0x745E,
+    0x7441, 0x743F, 0x7459, 0x745B, 0x745C, 0x7576, 0x7578, 0x7600,
+    0x75F0, 0x7601, 0x75F2, 0x75F1, 0x75FA, 0x75FF, 0x75F4, 0x75F3,
+    0x76DE, 0x76DF, 0x775B, 0x776B, 0x7766, 0x775E, 0x7763, 0x7779,
+    0x776A, 0x776C, 0x775C, 0x7765, 0x7768, 0x7762, 0x77EE, 0x788E,
+    0x78B0, 0x7897, 0x7898, 0x788C, 0x7889, 0x787C, 0x7891, 0x7893,
+    0x787F, 0x797A, 0x797F, 0x7981, 0x842C, 0x79BD, 0x7A1C, 0x7A1A,
+    0x7A20, 0x7A14, 0x7A1F, 0x7A1E, 0x7A9F, 0x7AA0, 0x7B77, 0x7BC0,
+    0x7B60, 0x7B6E, 0x7B67, 0x7CB1, 0x7CB3, 0x7CB5, 0x7D93, 0x7D79,
+    0x7D91, 0x7D81, 0x7D8F, 0x7D5B, 0x7F6E, 0x7F69, 0x7F6A, 0x7F72,
+    0x7FA9, 0x7FA8, 0x7FA4, 0x8056, 0x8058, 0x8086, 0x8084, 0x8171,
+    0x8170, 0x8178, 0x8165, 0x816E, 0x8173, 0x816B, 0x8179, 0x817A,
+    0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843D, 0x8431, 0x8475,
+    0x8466, 0x846B, 0x8449, 0x846C, 0x845B, 0x843C, 0x8435, 0x8461,
+    0x8463, 0x8469, 0x846D, 0x8446, 0x865E, 0x865C, 0x865F, 0x86F9,
+    0x8713, 0x8708, 0x8707, 0x8700, 0x86FE, 0x86FB, 0x8702, 0x8703,
+    0x8706, 0x870A, 0x8859, 0x88DF, 0x88D4, 0x88D9, 0x88DC, 0x88D8,
+    0x88DD, 0x88E1, 0x88CA, 0x88D5, 0x88D2, 0x899C, 0x89E3, 0x8A6B,
+    0x8A72, 0x8A73, 0x8A66, 0x8A69, 0x8A70, 0x8A87, 0x8A7C, 0x8A63,
+    0x8AA0, 0x8A71, 0x8A85, 0x8A6D, 0x8A62, 0x8A6E, 0x8A6C, 0x8A79,
+    0x8A7B, 0x8A3E, 0x8A68, 0x8C62, 0x8C8A, 0x8C89, 0x8CCA, 0x8CC7,
+    0x8CC8, 0x8CC4, 0x8CB2, 0x8CC3, 0x8CC2, 0x8CC5, 0x8DE1, 0x8DDF,
+    0x8DE8, 0x8DEF, 0x8DF3, 0x8DFA, 0x8DEA, 0x8DE4, 0x8DE6, 0x8EB2,
+    0x8F03, 0x8F09, 0x8EFE, 0x8F0A, 0x8F9F, 0x8FB2, 0x904B, 0x904A,
+    0x9053, 0x9042, 0x9054, 0x903C, 0x9055, 0x9050, 0x9047, 0x904F,
+    0x904E, 0x904D, 0x9051, 0x903E, 0x9041, 0x9112, 0x9117, 0x916C,
+    0x916A, 0x9169, 0x91C9, 0x9237, 0x9257, 0x9238, 0x923D, 0x9240,
+    0x923E, 0x925B, 0x924B, 0x9264, 0x9251, 0x9234, 0x9249, 0x924D,
+    0x9245, 0x9239, 0x923F, 0x925A, 0x9598, 0x9698, 0x9694, 0x9695,
+    0x96CD, 0x96CB, 0x96C9, 0x96CA, 0x96F7, 0x96FB, 0x96F9, 0x96F6,
+    0x9756, 0x9774, 0x9776, 0x9810, 0x9811, 0x9813, 0x980A, 0x9812,
+    0x980C, 0x98FC, 0x98F4, 0x98FD, 0x98FE, 0x99B3, 0x99B1, 0x99B4,
+    0x9AE1, 0x9CE9, 0x9E82, 0x9F0E, 0x9F13, 0x9F20, 0x50E7, 0x50EE,
+    0x50E5, 0x50D6, 0x50ED, 0x50DA, 0x50D5, 0x50CF, 0x50D1, 0x50F1,
+    0x50CE, 0x50E9, 0x5162, 0x51F3, 0x5283, 0x5282, 0x5331, 0x53AD,
+    0x55FE, 0x5600, 0x561B, 0x5617, 0x55FD, 0x5614, 0x5606, 0x5609,
+    0x560D, 0x560E, 0x55F7, 0x5616, 0x561F, 0x5608, 0x5610, 0x55F6,
+    0x5718, 0x5716, 0x5875, 0x587E, 0x5883, 0x5893, 0x588A, 0x5879,
+    0x5885, 0x587D, 0x58FD, 0x5925, 0x5922, 0x5924, 0x596A, 0x5969,
+    0x5AE1, 0x5AE6, 0x5AE9, 0x5AD7, 0x5AD6, 0x5AD8, 0x5AE3, 0x5B75,
+    0x5BDE, 0x5BE7, 0x5BE1, 0x5BE5, 0x5BE6, 0x5BE8, 0x5BE2, 0x5BE4,
+    0x5BDF, 0x5C0D, 0x5C62, 0x5D84, 0x5D87, 0x5E5B, 0x5E63, 0x5E55,
+    0x5E57, 0x5E54, 0x5ED3, 0x5ED6, 0x5F0A, 0x5F46, 0x5F70, 0x5FB9,
+    0x6147, 0x613F, 0x614B, 0x6177, 0x6162, 0x6163, 0x615F, 0x615A,
+    0x6158, 0x6175, 0x622A, 0x6487, 0x6458, 0x6454, 0x64A4, 0x6478,
+    0x645F, 0x647A, 0x6451, 0x6467, 0x6434, 0x646D, 0x647B, 0x6572,
+    0x65A1, 0x65D7, 0x65D6, 0x66A2, 0x66A8, 0x669D, 0x699C, 0x69A8,
+    0x6995, 0x69C1, 0x69AE, 0x69D3, 0x69CB, 0x699B, 0x69B7, 0x69BB,
+    0x69AB, 0x69B4, 0x69D0, 0x69CD, 0x69AD, 0x69CC, 0x69A6, 0x69C3,
+    0x69A3, 0x6B49, 0x6B4C, 0x6C33, 0x6F33, 0x6F14, 0x6EFE, 0x6F13,
+    0x6EF4, 0x6F29, 0x6F3E, 0x6F20, 0x6F2C, 0x6F0F, 0x6F02, 0x6F22,
+    0x6EFF, 0x6EEF, 0x6F06, 0x6F31, 0x6F38, 0x6F32, 0x6F23, 0x6F15,
+    0x6F2B, 0x6F2F, 0x6F88, 0x6F2A, 0x6EEC, 0x6F01, 0x6EF2, 0x6ECC,
+    0x6EF7, 0x7194, 0x7199, 0x717D, 0x718A, 0x7184, 0x7192, 0x723E,
+    0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746A, 0x7470,
+    0x746D, 0x7504, 0x7591, 0x7627, 0x760D, 0x760B, 0x7609, 0x7613,
+    0x76E1, 0x76E3, 0x7784, 0x777D, 0x777F, 0x7761, 0x78C1, 0x789F,
+    0x78A7, 0x78B3, 0x78A9, 0x78A3, 0x798E, 0x798F, 0x798D, 0x7A2E,
+    0x7A31, 0x7AAA, 0x7AA9, 0x7AED, 0x7AEF, 0x7BA1, 0x7B95, 0x7B8B,
+    0x7B75, 0x7B97, 0x7B9D, 0x7B94, 0x7B8F, 0x7BB8, 0x7B87, 0x7B84,
+    0x7CB9, 0x7CBD, 0x7CBE, 0x7DBB, 0x7DB0, 0x7D9C, 0x7DBD, 0x7DBE,
+    0x7DA0, 0x7DCA, 0x7DB4, 0x7DB2, 0x7DB1, 0x7DBA, 0x7DA2, 0x7DBF,
+    0x7DB5, 0x7DB8, 0x7DAD, 0x7DD2, 0x7DC7, 0x7DAC, 0x7F70, 0x7FE0,
+    0x7FE1, 0x7FDF, 0x805E, 0x805A, 0x8087, 0x8150, 0x8180, 0x818F,
+    0x8188, 0x818A, 0x817F, 0x8182, 0x81E7, 0x81FA, 0x8207, 0x8214,
+    0x821E, 0x824B, 0x84C9, 0x84BF, 0x84C6, 0x84C4, 0x8499, 0x849E,
+    0x84B2, 0x849C, 0x84CB, 0x84B8, 0x84C0, 0x84D3, 0x8490, 0x84BC,
+    0x84D1, 0x84CA, 0x873F, 0x871C, 0x873B, 0x8722, 0x8725, 0x8734,
+    0x8718, 0x8755, 0x8737, 0x8729, 0x88F3, 0x8902, 0x88F4, 0x88F9,
+    0x88F8, 0x88FD, 0x88E8, 0x891A, 0x88EF, 0x8AA6, 0x8A8C, 0x8A9E,
+    0x8AA3, 0x8A8D, 0x8AA1, 0x8A93, 0x8AA4, 0x8AAA, 0x8AA5, 0x8AA8,
+    0x8A98, 0x8A91, 0x8A9A, 0x8AA7, 0x8C6A, 0x8C8D, 0x8C8C, 0x8CD3,
+    0x8CD1, 0x8CD2, 0x8D6B, 0x8D99, 0x8D95, 0x8DFC, 0x8F14, 0x8F12,
+    0x8F15, 0x8F13, 0x8FA3, 0x9060, 0x9058, 0x905C, 0x9063, 0x9059,
+    0x905E, 0x9062, 0x905D, 0x905B, 0x9119, 0x9118, 0x911E, 0x9175,
+    0x9178, 0x9177, 0x9174, 0x9278, 0x92AC, 0x9280, 0x9285, 0x9298,
+    0x9296, 0x927B, 0x9293, 0x929C, 0x92A8, 0x927C, 0x9291, 0x95A1,
+    0x95A8, 0x95A9, 0x95A3, 0x95A5, 0x95A4, 0x9699, 0x969C, 0x969B,
+    0x96CC, 0x96D2, 0x9700, 0x977C, 0x9785, 0x97F6, 0x9817, 0x9818,
+    0x98AF, 0x98B1, 0x9903, 0x9905, 0x990C, 0x9909, 0x99C1, 0x9AAF,
+    0x9AB0, 0x9AE6, 0x9B41, 0x9B42, 0x9CF4, 0x9CF6, 0x9CF3, 0x9EBC,
+    0x9F3B, 0x9F4A, 0x5104, 0x5100, 0x50FB, 0x50F5, 0x50F9, 0x5102,
+    0x5108, 0x5109, 0x5105, 0x51DC, 0x5287, 0x5288, 0x5289, 0x528D,
+    0x528A, 0x52F0, 0x53B2, 0x562E, 0x563B, 0x5639, 0x5632, 0x563F,
+    0x5634, 0x5629, 0x5653, 0x564E, 0x5657, 0x5674, 0x5636, 0x562F,
+    0x5630, 0x5880, 0x589F, 0x589E, 0x58B3, 0x589C, 0x58AE, 0x58A9,
+    0x58A6, 0x596D, 0x5B09, 0x5AFB, 0x5B0B, 0x5AF5, 0x5B0C, 0x5B08,
+    0x5BEE, 0x5BEC, 0x5BE9, 0x5BEB, 0x5C64, 0x5C65, 0x5D9D, 0x5D94,
+    0x5E62, 0x5E5F, 0x5E61, 0x5EE2, 0x5EDA, 0x5EDF, 0x5EDD, 0x5EE3,
+    0x5EE0, 0x5F48, 0x5F71, 0x5FB7, 0x5FB5, 0x6176, 0x6167, 0x616E,
+    0x615D, 0x6155, 0x6182, 0x617C, 0x6170, 0x616B, 0x617E, 0x61A7,
+    0x6190, 0x61AB, 0x618E, 0x61AC, 0x619A, 0x61A4, 0x6194, 0x61AE,
+    0x622E, 0x6469, 0x646F, 0x6479, 0x649E, 0x64B2, 0x6488, 0x6490,
+    0x64B0, 0x64A5, 0x6493, 0x6495, 0x64A9, 0x6492, 0x64AE, 0x64AD,
+    0x64AB, 0x649A, 0x64AC, 0x6499, 0x64A2, 0x64B3, 0x6575, 0x6577,
+    0x6578, 0x66AE, 0x66AB, 0x66B4, 0x66B1, 0x6A23, 0x6A1F, 0x69E8,
+    0x6A01, 0x6A1E, 0x6A19, 0x69FD, 0x6A21, 0x6A13, 0x6A0A, 0x69F3,
+    0x6A02, 0x6A05, 0x69ED, 0x6A11, 0x6B50, 0x6B4E, 0x6BA4, 0x6BC5,
+    0x6BC6, 0x6F3F, 0x6F7C, 0x6F84, 0x6F51, 0x6F66, 0x6F54, 0x6F86,
+    0x6F6D, 0x6F5B, 0x6F78, 0x6F6E, 0x6F8E, 0x6F7A, 0x6F70, 0x6F64,
+    0x6F97, 0x6F58, 0x6ED5, 0x6F6F, 0x6F60, 0x6F5F, 0x719F, 0x71AC,
+    0x71B1, 0x71A8, 0x7256, 0x729B, 0x734E, 0x7357, 0x7469, 0x748B,
+    0x7483, 0x747E, 0x7480, 0x757F, 0x7620, 0x7629, 0x761F, 0x7624,
+    0x7626, 0x7621, 0x7622, 0x769A, 0x76BA, 0x76E4, 0x778E, 0x7787,
+    0x778C, 0x7791, 0x778B, 0x78CB, 0x78C5, 0x78BA, 0x78CA, 0x78BE,
+    0x78D5, 0x78BC, 0x78D0, 0x7A3F, 0x7A3C, 0x7A40, 0x7A3D, 0x7A37,
+    0x7A3B, 0x7AAF, 0x7AAE, 0x7BAD, 0x7BB1, 0x7BC4, 0x7BB4, 0x7BC6,
+    0x7BC7, 0x7BC1, 0x7BA0, 0x7BCC, 0x7CCA, 0x7DE0, 0x7DF4, 0x7DEF,
+    0x7DFB, 0x7DD8, 0x7DEC, 0x7DDD, 0x7DE8, 0x7DE3, 0x7DDA, 0x7DDE,
+    0x7DE9, 0x7D9E, 0x7DD9, 0x7DF2, 0x7DF9, 0x7F75, 0x7F77, 0x7FAF,
+    0x7FE9, 0x8026, 0x819B, 0x819C, 0x819D, 0x81A0, 0x819A, 0x8198,
+    0x8517, 0x853D, 0x851A, 0x84EE, 0x852C, 0x852D, 0x8513, 0x8511,
+    0x8523, 0x8521, 0x8514, 0x84EC, 0x8525, 0x84FF, 0x8506, 0x8782,
+    0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757,
+    0x874C, 0x8753, 0x885B, 0x885D, 0x8910, 0x8907, 0x8912, 0x8913,
+    0x8915, 0x890A, 0x8ABC, 0x8AD2, 0x8AC7, 0x8AC4, 0x8A95, 0x8ACB,
+    0x8AF8, 0x8AB2, 0x8AC9, 0x8AC2, 0x8ABF, 0x8AB0, 0x8AD6, 0x8ACD,
+    0x8AB6, 0x8AB9, 0x8ADB, 0x8C4C, 0x8C4E, 0x8C6C, 0x8CE0, 0x8CDE,
+    0x8CE6, 0x8CE4, 0x8CEC, 0x8CED, 0x8CE2, 0x8CE3, 0x8CDC, 0x8CEA,
+    0x8CE1, 0x8D6D, 0x8D9F, 0x8DA3, 0x8E2B, 0x8E10, 0x8E1D, 0x8E22,
+    0x8E0F, 0x8E29, 0x8E1F, 0x8E21, 0x8E1E, 0x8EBA, 0x8F1D, 0x8F1B,
+    0x8F1F, 0x8F29, 0x8F26, 0x8F2A, 0x8F1C, 0x8F1E, 0x8F25, 0x9069,
+    0x906E, 0x9068, 0x906D, 0x9077, 0x9130, 0x912D, 0x9127, 0x9131,
+    0x9187, 0x9189, 0x918B, 0x9183, 0x92C5, 0x92BB, 0x92B7, 0x92EA,
+    0x92E4, 0x92C1, 0x92B3, 0x92BC, 0x92D2, 0x92C7, 0x92F0, 0x92B2,
+    0x95AD, 0x95B1, 0x9704, 0x9706, 0x9707, 0x9709, 0x9760, 0x978D,
+    0x978B, 0x978F, 0x9821, 0x982B, 0x981C, 0x98B3, 0x990A, 0x9913,
+    0x9912, 0x9918, 0x99DD, 0x99D0, 0x99DF, 0x99DB, 0x99D1, 0x99D5,
+    0x99D2, 0x99D9, 0x9AB7, 0x9AEE, 0x9AEF, 0x9B27, 0x9B45, 0x9B44,
+    0x9B77, 0x9B6F, 0x9D06, 0x9D09, 0x9D03, 0x9EA9, 0x9EBE, 0x9ECE,
+    0x58A8, 0x9F52, 0x5112, 0x5118, 0x5114, 0x5110, 0x5115, 0x5180,
+    0x51AA, 0x51DD, 0x5291, 0x5293, 0x52F3, 0x5659, 0x566B, 0x5679,
+    0x5669, 0x5664, 0x5678, 0x566A, 0x5668, 0x5665, 0x5671, 0x566F,
+    0x566C, 0x5662, 0x5676, 0x58C1, 0x58BE, 0x58C7, 0x58C5, 0x596E,
+    0x5B1D, 0x5B34, 0x5B78, 0x5BF0, 0x5C0E, 0x5F4A, 0x61B2, 0x6191,
+    0x61A9, 0x618A, 0x61CD, 0x61B6, 0x61BE, 0x61CA, 0x61C8, 0x6230,
+    0x64C5, 0x64C1, 0x64CB, 0x64BB, 0x64BC, 0x64DA, 0x64C4, 0x64C7,
+    0x64C2, 0x64CD, 0x64BF, 0x64D2, 0x64D4, 0x64BE, 0x6574, 0x66C6,
+    0x66C9, 0x66B9, 0x66C4, 0x66C7, 0x66B8, 0x6A3D, 0x6A38, 0x6A3A,
+    0x6A59, 0x6A6B, 0x6A58, 0x6A39, 0x6A44, 0x6A62, 0x6A61, 0x6A4B,
+    0x6A47, 0x6A35, 0x6A5F, 0x6A48, 0x6B59, 0x6B77, 0x6C05, 0x6FC2,
+    0x6FB1, 0x6FA1, 0x6FC3, 0x6FA4, 0x6FC1, 0x6FA7, 0x6FB3, 0x6FC0,
+    0x6FB9, 0x6FB6, 0x6FA6, 0x6FA0, 0x6FB4, 0x71BE, 0x71C9, 0x71D0,
+    0x71D2, 0x71C8, 0x71D5, 0x71B9, 0x71CE, 0x71D9, 0x71DC, 0x71C3,
+    0x71C4, 0x7368, 0x749C, 0x74A3, 0x7498, 0x749F, 0x749E, 0x74E2,
+    0x750C, 0x750D, 0x7634, 0x7638, 0x763A, 0x76E7, 0x76E5, 0x77A0,
+    0x779E, 0x779F, 0x77A5, 0x78E8, 0x78DA, 0x78EC, 0x78E7, 0x79A6,
+    0x7A4D, 0x7A4E, 0x7A46, 0x7A4C, 0x7A4B, 0x7ABA, 0x7BD9, 0x7C11,
+    0x7BC9, 0x7BE4, 0x7BDB, 0x7BE1, 0x7BE9, 0x7BE6, 0x7CD5, 0x7CD6,
+    0x7E0A, 0x7E11, 0x7E08, 0x7E1B, 0x7E23, 0x7E1E, 0x7E1D, 0x7E09,
+    0x7E10, 0x7F79, 0x7FB2, 0x7FF0, 0x7FF1, 0x7FEE, 0x8028, 0x81B3,
+    0x81A9, 0x81A8, 0x81FB, 0x8208, 0x8258, 0x8259, 0x854A, 0x8559,
+    0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856D, 0x856A, 0x855E,
+    0x8783, 0x879F, 0x879E, 0x87A2, 0x878D, 0x8861, 0x892A, 0x8932,
+    0x8925, 0x892B, 0x8921, 0x89AA, 0x89A6, 0x8AE6, 0x8AFA, 0x8AEB,
+    0x8AF1, 0x8B00, 0x8ADC, 0x8AE7, 0x8AEE, 0x8AFE, 0x8B01, 0x8B02,
+    0x8AF7, 0x8AED, 0x8AF3, 0x8AF6, 0x8AFC, 0x8C6B, 0x8C6D, 0x8C93,
+    0x8CF4, 0x8E44, 0x8E31, 0x8E34, 0x8E42, 0x8E39, 0x8E35, 0x8F3B,
+    0x8F2F, 0x8F38, 0x8F33, 0x8FA8, 0x8FA6, 0x9075, 0x9074, 0x9078,
+    0x9072, 0x907C, 0x907A, 0x9134, 0x9192, 0x9320, 0x9336, 0x92F8,
+    0x9333, 0x932F, 0x9322, 0x92FC, 0x932B, 0x9304, 0x931A, 0x9310,
+    0x9326, 0x9321, 0x9315, 0x932E, 0x9319, 0x95BB, 0x96A7, 0x96A8,
+    0x96AA, 0x96D5, 0x970E, 0x9711, 0x9716, 0x970D, 0x9713, 0x970F,
+    0x975B, 0x975C, 0x9766, 0x9798, 0x9830, 0x9838, 0x983B, 0x9837,
+    0x982D, 0x9839, 0x9824, 0x9910, 0x9928, 0x991E, 0x991B, 0x9921,
+    0x991A, 0x99ED, 0x99E2, 0x99F1, 0x9AB8, 0x9ABC, 0x9AFB, 0x9AED,
+    0x9B28, 0x9B91, 0x9D15, 0x9D23, 0x9D26, 0x9D28, 0x9D12, 0x9D1B,
+    0x9ED8, 0x9ED4, 0x9F8D, 0x9F9C, 0x512A, 0x511F, 0x5121, 0x5132,
+    0x52F5, 0x568E, 0x5680, 0x5690, 0x5685, 0x5687, 0x568F, 0x58D5,
+    0x58D3, 0x58D1, 0x58CE, 0x5B30, 0x5B2A, 0x5B24, 0x5B7A, 0x5C37,
+    0x5C68, 0x5DBC, 0x5DBA, 0x5DBD, 0x5DB8, 0x5E6B, 0x5F4C, 0x5FBD,
+    0x61C9, 0x61C2, 0x61C7, 0x61E6, 0x61CB, 0x6232, 0x6234, 0x64CE,
+    0x64CA, 0x64D8, 0x64E0, 0x64F0, 0x64E6, 0x64EC, 0x64F1, 0x64E2,
+    0x64ED, 0x6582, 0x6583, 0x66D9, 0x66D6, 0x6A80, 0x6A94, 0x6A84,
+    0x6AA2, 0x6A9C, 0x6ADB, 0x6AA3, 0x6A7E, 0x6A97, 0x6A90, 0x6AA0,
+    0x6B5C, 0x6BAE, 0x6BDA, 0x6C08, 0x6FD8, 0x6FF1, 0x6FDF, 0x6FE0,
+    0x6FDB, 0x6FE4, 0x6FEB, 0x6FEF, 0x6F80, 0x6FEC, 0x6FE1, 0x6FE9,
+    0x6FD5, 0x6FEE, 0x6FF0, 0x71E7, 0x71DF, 0x71EE, 0x71E6, 0x71E5,
+    0x71ED, 0x71EC, 0x71F4, 0x71E0, 0x7235, 0x7246, 0x7370, 0x7372,
+    0x74A9, 0x74B0, 0x74A6, 0x74A8, 0x7646, 0x7642, 0x764C, 0x76EA,
+    0x77B3, 0x77AA, 0x77B0, 0x77AC, 0x77A7, 0x77AD, 0x77EF, 0x78F7,
+    0x78FA, 0x78F4, 0x78EF, 0x7901, 0x79A7, 0x79AA, 0x7A57, 0x7ABF,
+    0x7C07, 0x7C0D, 0x7BFE, 0x7BF7, 0x7C0C, 0x7BE0, 0x7CE0, 0x7CDC,
+    0x7CDE, 0x7CE2, 0x7CDF, 0x7CD9, 0x7CDD, 0x7E2E, 0x7E3E, 0x7E46,
+    0x7E37, 0x7E32, 0x7E43, 0x7E2B, 0x7E3D, 0x7E31, 0x7E45, 0x7E41,
+    0x7E34, 0x7E39, 0x7E48, 0x7E35, 0x7E3F, 0x7E2F, 0x7F44, 0x7FF3,
+    0x7FFC, 0x8071, 0x8072, 0x8070, 0x806F, 0x8073, 0x81C6, 0x81C3,
+    0x81BA, 0x81C2, 0x81C0, 0x81BF, 0x81BD, 0x81C9, 0x81BE, 0x81E8,
+    0x8209, 0x8271, 0x85AA, 0x8584, 0x857E, 0x859C, 0x8591, 0x8594,
+    0x85AF, 0x859B, 0x8587, 0x85A8, 0x858A, 0x85A6, 0x8667, 0x87C0,
+    0x87D1, 0x87B3, 0x87D2, 0x87C6, 0x87AB, 0x87BB, 0x87BA, 0x87C8,
+    0x87CB, 0x893B, 0x8936, 0x8944, 0x8938, 0x893D, 0x89AC, 0x8B0E,
+    0x8B17, 0x8B19, 0x8B1B, 0x8B0A, 0x8B20, 0x8B1D, 0x8B04, 0x8B10,
+    0x8C41, 0x8C3F, 0x8C73, 0x8CFA, 0x8CFD, 0x8CFC, 0x8CF8, 0x8CFB,
+    0x8DA8, 0x8E49, 0x8E4B, 0x8E48, 0x8E4A, 0x8F44, 0x8F3E, 0x8F42,
+    0x8F45, 0x8F3F, 0x907F, 0x907D, 0x9084, 0x9081, 0x9082, 0x9080,
+    0x9139, 0x91A3, 0x919E, 0x919C, 0x934D, 0x9382, 0x9328, 0x9375,
+    0x934A, 0x9365, 0x934B, 0x9318, 0x937E, 0x936C, 0x935B, 0x9370,
+    0x935A, 0x9354, 0x95CA, 0x95CB, 0x95CC, 0x95C8, 0x95C6, 0x96B1,
+    0x96B8, 0x96D6, 0x971C, 0x971E, 0x97A0, 0x97D3, 0x9846, 0x98B6,
+    0x9935, 0x9A01, 0x99FF, 0x9BAE, 0x9BAB, 0x9BAA, 0x9BAD, 0x9D3B,
+    0x9D3F, 0x9E8B, 0x9ECF, 0x9EDE, 0x9EDC, 0x9EDD, 0x9EDB, 0x9F3E,
+    0x9F4B, 0x53E2, 0x5695, 0x56AE, 0x58D9, 0x58D8, 0x5B38, 0x5F5D,
+    0x61E3, 0x6233, 0x64F4, 0x64F2, 0x64FE, 0x6506, 0x64FA, 0x64FB,
+    0x64F7, 0x65B7, 0x66DC, 0x6726, 0x6AB3, 0x6AAC, 0x6AC3, 0x6ABB,
+    0x6AB8, 0x6AC2, 0x6AAE, 0x6AAF, 0x6B5F, 0x6B78, 0x6BAF, 0x7009,
+    0x700B, 0x6FFE, 0x7006, 0x6FFA, 0x7011, 0x700F, 0x71FB, 0x71FC,
+    0x71FE, 0x71F8, 0x7377, 0x7375, 0x74A7, 0x74BF, 0x7515, 0x7656,
+    0x7658, 0x7652, 0x77BD, 0x77BF, 0x77BB, 0x77BC, 0x790E, 0x79AE,
+    0x7A61, 0x7A62, 0x7A60, 0x7AC4, 0x7AC5, 0x7C2B, 0x7C27, 0x7C2A,
+    0x7C1E, 0x7C23, 0x7C21, 0x7CE7, 0x7E54, 0x7E55, 0x7E5E, 0x7E5A,
+    0x7E61, 0x7E52, 0x7E59, 0x7F48, 0x7FF9, 0x7FFB, 0x8077, 0x8076,
+    0x81CD, 0x81CF, 0x820A, 0x85CF, 0x85A9, 0x85CD, 0x85D0, 0x85C9,
+    0x85B0, 0x85BA, 0x85B9, 0x87EF, 0x87EC, 0x87F2, 0x87E0, 0x8986,
+    0x89B2, 0x89F4, 0x8B28, 0x8B39, 0x8B2C, 0x8B2B, 0x8C50, 0x8D05,
+    0x8E59, 0x8E63, 0x8E66, 0x8E64, 0x8E5F, 0x8E55, 0x8EC0, 0x8F49,
+    0x8F4D, 0x9087, 0x9083, 0x9088, 0x91AB, 0x91AC, 0x91D0, 0x9394,
+    0x938A, 0x9396, 0x93A2, 0x93B3, 0x93AE, 0x93AC, 0x93B0, 0x9398,
+    0x939A, 0x9397, 0x95D4, 0x95D6, 0x95D0, 0x95D5, 0x96E2, 0x96DC,
+    0x96D9, 0x96DB, 0x96DE, 0x9724, 0x97A3, 0x97A6, 0x97AD, 0x97F9,
+    0x984D, 0x984F, 0x984C, 0x984E, 0x9853, 0x98BA, 0x993E, 0x993F,
+    0x993D, 0x992E, 0x99A5, 0x9A0E, 0x9AC1, 0x9B03, 0x9B06, 0x9B4F,
+    0x9B4E, 0x9B4D, 0x9BCA, 0x9BC9, 0x9BFD, 0x9BC8, 0x9BC0, 0x9D51,
+    0x9D5D, 0x9D60, 0x9EE0, 0x9F15, 0x9F2C, 0x5133, 0x56A5, 0x56A8,
+    0x58DE, 0x58DF, 0x58E2, 0x5BF5, 0x9F90, 0x5EEC, 0x61F2, 0x61F7,
+    0x61F6, 0x61F5, 0x6500, 0x650F, 0x66E0, 0x66DD, 0x6AE5, 0x6ADD,
+    0x6ADA, 0x6AD3, 0x701B, 0x701F, 0x7028, 0x701A, 0x701D, 0x7015,
+    0x7018, 0x7206, 0x720D, 0x7258, 0x72A2, 0x7378, 0x737A, 0x74BD,
+    0x74CA, 0x74E3, 0x7587, 0x7586, 0x765F, 0x7661, 0x77C7, 0x7919,
+    0x79B1, 0x7A6B, 0x7A69, 0x7C3E, 0x7C3F, 0x7C38, 0x7C3D, 0x7C37,
+    0x7C40, 0x7E6B, 0x7E6D, 0x7E79, 0x7E69, 0x7E6A, 0x7E73, 0x7F85,
+    0x7FB6, 0x7FB9, 0x7FB8, 0x81D8, 0x85E9, 0x85DD, 0x85EA, 0x85D5,
+    0x85E4, 0x85E5, 0x85F7, 0x87FB, 0x8805, 0x880D, 0x87F9, 0x87FE,
+    0x8960, 0x895F, 0x8956, 0x895E, 0x8B41, 0x8B5C, 0x8B58, 0x8B49,
+    0x8B5A, 0x8B4E, 0x8B4F, 0x8B46, 0x8B59, 0x8D08, 0x8D0A, 0x8E7C,
+    0x8E72, 0x8E87, 0x8E76, 0x8E6C, 0x8E7A, 0x8E74, 0x8F54, 0x8F4E,
+    0x8FAD, 0x908A, 0x908B, 0x91B1, 0x91AE, 0x93E1, 0x93D1, 0x93DF,
+    0x93C3, 0x93C8, 0x93DC, 0x93DD, 0x93D6, 0x93E2, 0x93CD, 0x93D8,
+    0x93E4, 0x93D7, 0x93E8, 0x95DC, 0x96B4, 0x96E3, 0x972A, 0x9727,
+    0x9761, 0x97DC, 0x97FB, 0x985E, 0x9858, 0x985B, 0x98BC, 0x9945,
+    0x9949, 0x9A16, 0x9A19, 0x9B0D, 0x9BE8, 0x9BE7, 0x9BD6, 0x9BDB,
+    0x9D89, 0x9D61, 0x9D72, 0x9D6A, 0x9D6C, 0x9E92, 0x9E97, 0x9E93,
+    0x9EB4, 0x52F8, 0x56B7, 0x56B6, 0x56B4, 0x56BC, 0x58E4, 0x5B40,
+    0x5B43, 0x5B7D, 0x5BF6, 0x5DC9, 0x61F8, 0x61FA, 0x6518, 0x6514,
+    0x6519, 0x66E6, 0x6727, 0x6AEC, 0x703E, 0x7030, 0x7032, 0x7210,
+    0x737B, 0x74CF, 0x7662, 0x7665, 0x7926, 0x792A, 0x792C, 0x792B,
+    0x7AC7, 0x7AF6, 0x7C4C, 0x7C43, 0x7C4D, 0x7CEF, 0x7CF0, 0x8FAE,
+    0x7E7D, 0x7E7C, 0x7E82, 0x7F4C, 0x8000, 0x81DA, 0x8266, 0x85FB,
+    0x85F9, 0x8611, 0x85FA, 0x8606, 0x860B, 0x8607, 0x860A, 0x8814,
+    0x8815, 0x8964, 0x89BA, 0x89F8, 0x8B70, 0x8B6C, 0x8B66, 0x8B6F,
+    0x8B5F, 0x8B6B, 0x8D0F, 0x8D0D, 0x8E89, 0x8E81, 0x8E85, 0x8E82,
+    0x91B4, 0x91CB, 0x9418, 0x9403, 0x93FD, 0x95E1, 0x9730, 0x98C4,
+    0x9952, 0x9951, 0x99A8, 0x9A2B, 0x9A30, 0x9A37, 0x9A35, 0x9C13,
+    0x9C0D, 0x9E79, 0x9EB5, 0x9EE8, 0x9F2F, 0x9F5F, 0x9F63, 0x9F61,
+    0x5137, 0x5138, 0x56C1, 0x56C0, 0x56C2, 0x5914, 0x5C6C, 0x5DCD,
+    0x61FC, 0x61FE, 0x651D, 0x651C, 0x6595, 0x66E9, 0x6AFB, 0x6B04,
+    0x6AFA, 0x6BB2, 0x704C, 0x721B, 0x72A7, 0x74D6, 0x74D4, 0x7669,
+    0x77D3, 0x7C50, 0x7E8F, 0x7E8C, 0x7FBC, 0x8617, 0x862D, 0x861A,
+    0x8823, 0x8822, 0x8821, 0x881F, 0x896A, 0x896C, 0x89BD, 0x8B74,
+    0x8B77, 0x8B7D, 0x8D13, 0x8E8A, 0x8E8D, 0x8E8B, 0x8F5F, 0x8FAF,
+    0x91BA, 0x942E, 0x9433, 0x9435, 0x943A, 0x9438, 0x9432, 0x942B,
+    0x95E2, 0x9738, 0x9739, 0x9732, 0x97FF, 0x9867, 0x9865, 0x9957,
+    0x9A45, 0x9A43, 0x9A40, 0x9A3E, 0x9ACF, 0x9B54, 0x9B51, 0x9C2D,
+    0x9C25, 0x9DAF, 0x9DB4, 0x9DC2, 0x9DB8, 0x9E9D, 0x9EEF, 0x9F19,
+    0x9F5C, 0x9F66, 0x9F67, 0x513C, 0x513B, 0x56C8, 0x56CA, 0x56C9,
+    0x5B7F, 0x5DD4, 0x5DD2, 0x5F4E, 0x61FF, 0x6524, 0x6B0A, 0x6B61,
+    0x7051, 0x7058, 0x7380, 0x74E4, 0x758A, 0x766E, 0x766C, 0x79B3,
+    0x7C60, 0x7C5F, 0x807E, 0x807D, 0x81DF, 0x8972, 0x896F, 0x89FC,
+    0x8B80, 0x8D16, 0x8D17, 0x8E91, 0x8E93, 0x8F61, 0x9148, 0x9444,
+    0x9451, 0x9452, 0x973D, 0x973E, 0x97C3, 0x97C1, 0x986B, 0x9955,
+    0x9A55, 0x9A4D, 0x9AD2, 0x9B1A, 0x9C49, 0x9C31, 0x9C3E, 0x9C3B,
+    0x9DD3, 0x9DD7, 0x9F34, 0x9F6C, 0x9F6A, 0x9F94, 0x56CC, 0x5DD6,
+    0x6200, 0x6523, 0x652B, 0x652A, 0x66EC, 0x6B10, 0x74DA, 0x7ACA,
+    0x7C64, 0x7C63, 0x7C65, 0x7E93, 0x7E96, 0x7E94, 0x81E2, 0x8638,
+    0x863F, 0x8831, 0x8B8A, 0x9090, 0x908F, 0x9463, 0x9460, 0x9464,
+    0x9768, 0x986F, 0x995C, 0x9A5A, 0x9A5B, 0x9A57, 0x9AD3, 0x9AD4,
+    0x9AD1, 0x9C54, 0x9C57, 0x9C56, 0x9DE5, 0x9E9F, 0x9EF4, 0x56D1,
+    0x58E9, 0x652C, 0x705E, 0x7671, 0x7672, 0x77D7, 0x7F50, 0x7F88,
+    0x8836, 0x8839, 0x8862, 0x8B93, 0x8B92, 0x8B96, 0x8277, 0x8D1B,
+    0x91C0, 0x946A, 0x9742, 0x9748, 0x9744, 0x97C6, 0x9870, 0x9A5F,
+    0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA, 0x9E7C, 0x9E7D, 0x9F07,
+    0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, 0x7C6C, 0x7C6E, 0x883B,
+    0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, 0x9871, 0x995E, 0x9AD6,
+    0x9B23, 0x9ECC, 0x7064, 0x77DA, 0x8B9A, 0x9477, 0x97C9, 0x9A62,
+    0x9A65, 0x7E9C, 0x8B9C, 0x8EAA, 0x91C5, 0x947D, 0x947E, 0x947C,
+    0x9C77, 0x9C78, 0x9EF7, 0x8C54, 0x947F, 0x9E1A, 0x7228, 0x9A6A,
+    0x9B31, 0x9E1B, 0x9E1E, 0x7C72, 0x4E42, 0x4E5C, 0x51F5, 0x531A,
+    0x5382, 0x4E07, 0x4E0C, 0x4E47, 0x4E8D, 0x56D7, 0x5C6E, 0x5F73,
+    0x4E0F, 0x5187, 0x4E0E, 0x4E2E, 0x4E93, 0x4EC2, 0x4EC9, 0x4EC8,
+    0x5198, 0x52FC, 0x536C, 0x53B9, 0x5720, 0x5903, 0x592C, 0x5C10,
+    0x5DFF, 0x65E1, 0x6BB3, 0x6BCC, 0x6C14, 0x723F, 0x4E31, 0x4E3C,
+    0x4EE8, 0x4EDC, 0x4EE9, 0x4EE1, 0x4EDD, 0x4EDA, 0x520C, 0x5209,
+    0x531C, 0x534C, 0x5722, 0x5723, 0x5917, 0x592F, 0x5B81, 0x5B84,
+    0x5C12, 0x5C3B, 0x5C74, 0x5C73, 0x5E04, 0x5E80, 0x5E82, 0x5FC9,
+    0x6209, 0x6250, 0x6C15, 0x6C36, 0x6C43, 0x6C3F, 0x6C3B, 0x72AE,
+    0x72B0, 0x738A, 0x79B8, 0x808A, 0x961E, 0x4F0E, 0x4F18, 0x4F2C,
+    0x4EF5, 0x4F14, 0x4EF1, 0x4F00, 0x4EF7, 0x4F08, 0x4F1D, 0x4F02,
+    0x4F05, 0x4F22, 0x4F13, 0x4F04, 0x4EF4, 0x4F12, 0x51B1, 0x5213,
+    0x5210, 0x52A6, 0x5322, 0x531F, 0x534D, 0x538A, 0x5407, 0x56E1,
+    0x56DF, 0x572E, 0x572A, 0x5734, 0x593C, 0x5980, 0x597C, 0x5985,
+    0x597B, 0x597E, 0x5977, 0x597F, 0x5B56, 0x5C15, 0x5C25, 0x5C7C,
+    0x5C7A, 0x5C7B, 0x5C7E, 0x5DDF, 0x5E75, 0x5E84, 0x5F02, 0x5F1A,
+    0x5F74, 0x5FD5, 0x5FD4, 0x5FCF, 0x625C, 0x625E, 0x6264, 0x6261,
+    0x6266, 0x6262, 0x6259, 0x6260, 0x625A, 0x6265, 0x6537, 0x65EF,
+    0x65EE, 0x673E, 0x6739, 0x6738, 0x673B, 0x673A, 0x673F, 0x673C,
+    0x6733, 0x6C18, 0x6C46, 0x6C52, 0x6C5C, 0x6C4F, 0x6C4A, 0x6C54,
+    0x6C4B, 0x6C4C, 0x7071, 0x725E, 0x72B4, 0x72B5, 0x738E, 0x752A,
+    0x767F, 0x7A75, 0x7F51, 0x8278, 0x827C, 0x8280, 0x827D, 0x827F,
+    0x864D, 0x897E, 0x9099, 0x9097, 0x9098, 0x909B, 0x9094, 0x9622,
+    0x9624, 0x9620, 0x9623, 0x4F56, 0x4F3B, 0x4F62, 0x4F49, 0x4F53,
+    0x4F64, 0x4F3E, 0x4F67, 0x4F52, 0x4F5F, 0x4F41, 0x4F58, 0x4F2D,
+    0x4F33, 0x4F3F, 0x4F61, 0x518F, 0x51B9, 0x521C, 0x521E, 0x5221,
+    0x52AD, 0x52AE, 0x5309, 0x5363, 0x5372, 0x538E, 0x538F, 0x5430,
+    0x5437, 0x542A, 0x5454, 0x5445, 0x5419, 0x541C, 0x5425, 0x5418,
+    0x543D, 0x544F, 0x5441, 0x5428, 0x5424, 0x5447, 0x56EE, 0x56E7,
+    0x56E5, 0x5741, 0x5745, 0x574C, 0x5749, 0x574B, 0x5752, 0x5906,
+    0x5940, 0x59A6, 0x5998, 0x59A0, 0x5997, 0x598E, 0x59A2, 0x5990,
+    0x598F, 0x59A7, 0x59A1, 0x5B8E, 0x5B92, 0x5C28, 0x5C2A, 0x5C8D,
+    0x5C8F, 0x5C88, 0x5C8B, 0x5C89, 0x5C92, 0x5C8A, 0x5C86, 0x5C93,
+    0x5C95, 0x5DE0, 0x5E0A, 0x5E0E, 0x5E8B, 0x5E89, 0x5E8C, 0x5E88,
+    0x5E8D, 0x5F05, 0x5F1D, 0x5F78, 0x5F76, 0x5FD2, 0x5FD1, 0x5FD0,
+    0x5FED, 0x5FE8, 0x5FEE, 0x5FF3, 0x5FE1, 0x5FE4, 0x5FE3, 0x5FFA,
+    0x5FEF, 0x5FF7, 0x5FFB, 0x6000, 0x5FF4, 0x623A, 0x6283, 0x628C,
+    0x628E, 0x628F, 0x6294, 0x6287, 0x6271, 0x627B, 0x627A, 0x6270,
+    0x6281, 0x6288, 0x6277, 0x627D, 0x6272, 0x6274, 0x65F0, 0x65F4,
+    0x65F3, 0x65F2, 0x65F5, 0x6745, 0x6747, 0x6759, 0x6755, 0x674C,
+    0x6748, 0x675D, 0x674D, 0x675A, 0x674B, 0x6BD0, 0x6C19, 0x6C1A,
+    0x6C78, 0x6C67, 0x6C6B, 0x6C84, 0x6C8B, 0x6C8F, 0x6C71, 0x6C6F,
+    0x6C69, 0x6C9A, 0x6C6D, 0x6C87, 0x6C95, 0x6C9C, 0x6C66, 0x6C73,
+    0x6C65, 0x6C7B, 0x6C8E, 0x7074, 0x707A, 0x7263, 0x72BF, 0x72BD,
+    0x72C3, 0x72C6, 0x72C1, 0x72BA, 0x72C5, 0x7395, 0x7397, 0x7393,
+    0x7394, 0x7392, 0x753A, 0x7539, 0x7594, 0x7595, 0x7681, 0x793D,
+    0x8034, 0x8095, 0x8099, 0x8090, 0x8092, 0x809C, 0x8290, 0x828F,
+    0x8285, 0x828E, 0x8291, 0x8293, 0x828A, 0x8283, 0x8284, 0x8C78,
+    0x8FC9, 0x8FBF, 0x909F, 0x90A1, 0x90A5, 0x909E, 0x90A7, 0x90A0,
+    0x9630, 0x9628, 0x962F, 0x962D, 0x4E33, 0x4F98, 0x4F7C, 0x4F85,
+    0x4F7D, 0x4F80, 0x4F87, 0x4F76, 0x4F74, 0x4F89, 0x4F84, 0x4F77,
+    0x4F4C, 0x4F97, 0x4F6A, 0x4F9A, 0x4F79, 0x4F81, 0x4F78, 0x4F90,
+    0x4F9C, 0x4F94, 0x4F9E, 0x4F92, 0x4F82, 0x4F95, 0x4F6B, 0x4F6E,
+    0x519E, 0x51BC, 0x51BE, 0x5235, 0x5232, 0x5233, 0x5246, 0x5231,
+    0x52BC, 0x530A, 0x530B, 0x533C, 0x5392, 0x5394, 0x5487, 0x547F,
+    0x5481, 0x5491, 0x5482, 0x5488, 0x546B, 0x547A, 0x547E, 0x5465,
+    0x546C, 0x5474, 0x5466, 0x548D, 0x546F, 0x5461, 0x5460, 0x5498,
+    0x5463, 0x5467, 0x5464, 0x56F7, 0x56F9, 0x576F, 0x5772, 0x576D,
+    0x576B, 0x5771, 0x5770, 0x5776, 0x5780, 0x5775, 0x577B, 0x5773,
+    0x5774, 0x5762, 0x5768, 0x577D, 0x590C, 0x5945, 0x59B5, 0x59BA,
+    0x59CF, 0x59CE, 0x59B2, 0x59CC, 0x59C1, 0x59B6, 0x59BC, 0x59C3,
+    0x59D6, 0x59B1, 0x59BD, 0x59C0, 0x59C8, 0x59B4, 0x59C7, 0x5B62,
+    0x5B65, 0x5B93, 0x5B95, 0x5C44, 0x5C47, 0x5CAE, 0x5CA4, 0x5CA0,
+    0x5CB5, 0x5CAF, 0x5CA8, 0x5CAC, 0x5C9F, 0x5CA3, 0x5CAD, 0x5CA2,
+    0x5CAA, 0x5CA7, 0x5C9D, 0x5CA5, 0x5CB6, 0x5CB0, 0x5CA6, 0x5E17,
+    0x5E14, 0x5E19, 0x5F28, 0x5F22, 0x5F23, 0x5F24, 0x5F54, 0x5F82,
+    0x5F7E, 0x5F7D, 0x5FDE, 0x5FE5, 0x602D, 0x6026, 0x6019, 0x6032,
+    0x600B, 0x6034, 0x600A, 0x6017, 0x6033, 0x601A, 0x601E, 0x602C,
+    0x6022, 0x600D, 0x6010, 0x602E, 0x6013, 0x6011, 0x600C, 0x6009,
+    0x601C, 0x6214, 0x623D, 0x62AD, 0x62B4, 0x62D1, 0x62BE, 0x62AA,
+    0x62B6, 0x62CA, 0x62AE, 0x62B3, 0x62AF, 0x62BB, 0x62A9, 0x62B0,
+    0x62B8, 0x653D, 0x65A8, 0x65BB, 0x6609, 0x65FC, 0x6604, 0x6612,
+    0x6608, 0x65FB, 0x6603, 0x660B, 0x660D, 0x6605, 0x65FD, 0x6611,
+    0x6610, 0x66F6, 0x670A, 0x6785, 0x676C, 0x678E, 0x6792, 0x6776,
+    0x677B, 0x6798, 0x6786, 0x6784, 0x6774, 0x678D, 0x678C, 0x677A,
+    0x679F, 0x6791, 0x6799, 0x6783, 0x677D, 0x6781, 0x6778, 0x6779,
+    0x6794, 0x6B25, 0x6B80, 0x6B7E, 0x6BDE, 0x6C1D, 0x6C93, 0x6CEC,
+    0x6CEB, 0x6CEE, 0x6CD9, 0x6CB6, 0x6CD4, 0x6CAD, 0x6CE7, 0x6CB7,
+    0x6CD0, 0x6CC2, 0x6CBA, 0x6CC3, 0x6CC6, 0x6CED, 0x6CF2, 0x6CD2,
+    0x6CDD, 0x6CB4, 0x6C8A, 0x6C9D, 0x6C80, 0x6CDE, 0x6CC0, 0x6D30,
+    0x6CCD, 0x6CC7, 0x6CB0, 0x6CF9, 0x6CCF, 0x6CE9, 0x6CD1, 0x7094,
+    0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082,
+    0x709A, 0x7083, 0x726A, 0x72D6, 0x72CB, 0x72D8, 0x72C9, 0x72DC,
+    0x72D2, 0x72D4, 0x72DA, 0x72CC, 0x72D1, 0x73A4, 0x73A1, 0x73AD,
+    0x73A6, 0x73A2, 0x73A0, 0x73AC, 0x739D, 0x74DD, 0x74E8, 0x753F,
+    0x7540, 0x753E, 0x758C, 0x7598, 0x76AF, 0x76F3, 0x76F1, 0x76F0,
+    0x76F5, 0x77F8, 0x77FC, 0x77F9, 0x77FB, 0x77FA, 0x77F7, 0x7942,
+    0x793F, 0x79C5, 0x7A78, 0x7A7B, 0x7AFB, 0x7C75, 0x7CFD, 0x8035,
+    0x808F, 0x80AE, 0x80A3, 0x80B8, 0x80B5, 0x80AD, 0x8220, 0x82A0,
+    0x82C0, 0x82AB, 0x829A, 0x8298, 0x829B, 0x82B5, 0x82A7, 0x82AE,
+    0x82BC, 0x829E, 0x82BA, 0x82B4, 0x82A8, 0x82A1, 0x82A9, 0x82C2,
+    0x82A4, 0x82C3, 0x82B6, 0x82A2, 0x8670, 0x866F, 0x866D, 0x866E,
+    0x8C56, 0x8FD2, 0x8FCB, 0x8FD3, 0x8FCD, 0x8FD6, 0x8FD5, 0x8FD7,
+    0x90B2, 0x90B4, 0x90AF, 0x90B3, 0x90B0, 0x9639, 0x963D, 0x963C,
+    0x963A, 0x9643, 0x4FCD, 0x4FC5, 0x4FD3, 0x4FB2, 0x4FC9, 0x4FCB,
+    0x4FC1, 0x4FD4, 0x4FDC, 0x4FD9, 0x4FBB, 0x4FB3, 0x4FDB, 0x4FC7,
+    0x4FD6, 0x4FBA, 0x4FC0, 0x4FB9, 0x4FEC, 0x5244, 0x5249, 0x52C0,
+    0x52C2, 0x533D, 0x537C, 0x5397, 0x5396, 0x5399, 0x5398, 0x54BA,
+    0x54A1, 0x54AD, 0x54A5, 0x54CF, 0x54C3, 0x830D, 0x54B7, 0x54AE,
+    0x54D6, 0x54B6, 0x54C5, 0x54C6, 0x54A0, 0x5470, 0x54BC, 0x54A2,
+    0x54BE, 0x5472, 0x54DE, 0x54B0, 0x57B5, 0x579E, 0x579F, 0x57A4,
+    0x578C, 0x5797, 0x579D, 0x579B, 0x5794, 0x5798, 0x578F, 0x5799,
+    0x57A5, 0x579A, 0x5795, 0x58F4, 0x590D, 0x5953, 0x59E1, 0x59DE,
+    0x59EE, 0x5A00, 0x59F1, 0x59DD, 0x59FA, 0x59FD, 0x59FC, 0x59F6,
+    0x59E4, 0x59F2, 0x59F7, 0x59DB, 0x59E9, 0x59F3, 0x59F5, 0x59E0,
+    0x59FE, 0x59F4, 0x59ED, 0x5BA8, 0x5C4C, 0x5CD0, 0x5CD8, 0x5CCC,
+    0x5CD7, 0x5CCB, 0x5CDB, 0x5CDE, 0x5CDA, 0x5CC9, 0x5CC7, 0x5CCA,
+    0x5CD6, 0x5CD3, 0x5CD4, 0x5CCF, 0x5CC8, 0x5CC6, 0x5CCE, 0x5CDF,
+    0x5CF8, 0x5DF9, 0x5E21, 0x5E22, 0x5E23, 0x5E20, 0x5E24, 0x5EB0,
+    0x5EA4, 0x5EA2, 0x5E9B, 0x5EA3, 0x5EA5, 0x5F07, 0x5F2E, 0x5F56,
+    0x5F86, 0x6037, 0x6039, 0x6054, 0x6072, 0x605E, 0x6045, 0x6053,
+    0x6047, 0x6049, 0x605B, 0x604C, 0x6040, 0x6042, 0x605F, 0x6024,
+    0x6044, 0x6058, 0x6066, 0x606E, 0x6242, 0x6243, 0x62CF, 0x630D,
+    0x630B, 0x62F5, 0x630E, 0x6303, 0x62EB, 0x62F9, 0x630F, 0x630C,
+    0x62F8, 0x62F6, 0x6300, 0x6313, 0x6314, 0x62FA, 0x6315, 0x62FB,
+    0x62F0, 0x6541, 0x6543, 0x65AA, 0x65BF, 0x6636, 0x6621, 0x6632,
+    0x6635, 0x661C, 0x6626, 0x6622, 0x6633, 0x662B, 0x663A, 0x661D,
+    0x6634, 0x6639, 0x662E, 0x670F, 0x6710, 0x67C1, 0x67F2, 0x67C8,
+    0x67BA, 0x67DC, 0x67BB, 0x67F8, 0x67D8, 0x67C0, 0x67B7, 0x67C5,
+    0x67EB, 0x67E4, 0x67DF, 0x67B5, 0x67CD, 0x67B3, 0x67F7, 0x67F6,
+    0x67EE, 0x67E3, 0x67C2, 0x67B9, 0x67CE, 0x67E7, 0x67F0, 0x67B2,
+    0x67FC, 0x67C6, 0x67ED, 0x67CC, 0x67AE, 0x67E6, 0x67DB, 0x67FA,
+    0x67C9, 0x67CA, 0x67C3, 0x67EA, 0x67CB, 0x6B28, 0x6B82, 0x6B84,
+    0x6BB6, 0x6BD6, 0x6BD8, 0x6BE0, 0x6C20, 0x6C21, 0x6D28, 0x6D34,
+    0x6D2D, 0x6D1F, 0x6D3C, 0x6D3F, 0x6D12, 0x6D0A, 0x6CDA, 0x6D33,
+    0x6D04, 0x6D19, 0x6D3A, 0x6D1A, 0x6D11, 0x6D00, 0x6D1D, 0x6D42,
+    0x6D01, 0x6D18, 0x6D37, 0x6D03, 0x6D0F, 0x6D40, 0x6D07, 0x6D20,
+    0x6D2C, 0x6D08, 0x6D22, 0x6D09, 0x6D10, 0x70B7, 0x709F, 0x70BE,
+    0x70B1, 0x70B0, 0x70A1, 0x70B4, 0x70B5, 0x70A9, 0x7241, 0x7249,
+    0x724A, 0x726C, 0x7270, 0x7273, 0x726E, 0x72CA, 0x72E4, 0x72E8,
+    0x72EB, 0x72DF, 0x72EA, 0x72E6, 0x72E3, 0x7385, 0x73CC, 0x73C2,
+    0x73C8, 0x73C5, 0x73B9, 0x73B6, 0x73B5, 0x73B4, 0x73EB, 0x73BF,
+    0x73C7, 0x73BE, 0x73C3, 0x73C6, 0x73B8, 0x73CB, 0x74EC, 0x74EE,
+    0x752E, 0x7547, 0x7548, 0x75A7, 0x75AA, 0x7679, 0x76C4, 0x7708,
+    0x7703, 0x7704, 0x7705, 0x770A, 0x76F7, 0x76FB, 0x76FA, 0x77E7,
+    0x77E8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780F, 0x780E,
+    0x7809, 0x7803, 0x7813, 0x794A, 0x794C, 0x794B, 0x7945, 0x7944,
+    0x79D5, 0x79CD, 0x79CF, 0x79D6, 0x79CE, 0x7A80, 0x7A7E, 0x7AD1,
+    0x7B00, 0x7B01, 0x7C7A, 0x7C78, 0x7C79, 0x7C7F, 0x7C80, 0x7C81,
+    0x7D03, 0x7D08, 0x7D01, 0x7F58, 0x7F91, 0x7F8D, 0x7FBE, 0x8007,
+    0x800E, 0x800F, 0x8014, 0x8037, 0x80D8, 0x80C7, 0x80E0, 0x80D1,
+    0x80C8, 0x80C2, 0x80D0, 0x80C5, 0x80E3, 0x80D9, 0x80DC, 0x80CA,
+    0x80D5, 0x80C9, 0x80CF, 0x80D7, 0x80E6, 0x80CD, 0x81FF, 0x8221,
+    0x8294, 0x82D9, 0x82FE, 0x82F9, 0x8307, 0x82E8, 0x8300, 0x82D5,
+    0x833A, 0x82EB, 0x82D6, 0x82F4, 0x82EC, 0x82E1, 0x82F2, 0x82F5,
+    0x830C, 0x82FB, 0x82F6, 0x82F0, 0x82EA, 0x82E4, 0x82E0, 0x82FA,
+    0x82F3, 0x82ED, 0x8677, 0x8674, 0x867C, 0x8673, 0x8841, 0x884E,
+    0x8867, 0x886A, 0x8869, 0x89D3, 0x8A04, 0x8A07, 0x8D72, 0x8FE3,
+    0x8FE1, 0x8FEE, 0x8FE0, 0x90F1, 0x90BD, 0x90BF, 0x90D5, 0x90C5,
+    0x90BE, 0x90C7, 0x90CB, 0x90C8, 0x91D4, 0x91D3, 0x9654, 0x964F,
+    0x9651, 0x9653, 0x964A, 0x964E, 0x501E, 0x5005, 0x5007, 0x5013,
+    0x5022, 0x5030, 0x501B, 0x4FF5, 0x4FF4, 0x5033, 0x5037, 0x502C,
+    0x4FF6, 0x4FF7, 0x5017, 0x501C, 0x5020, 0x5027, 0x5035, 0x502F,
+    0x5031, 0x500E, 0x515A, 0x5194, 0x5193, 0x51CA, 0x51C4, 0x51C5,
+    0x51C8, 0x51CE, 0x5261, 0x525A, 0x5252, 0x525E, 0x525F, 0x5255,
+    0x5262, 0x52CD, 0x530E, 0x539E, 0x5526, 0x54E2, 0x5517, 0x5512,
+    0x54E7, 0x54F3, 0x54E4, 0x551A, 0x54FF, 0x5504, 0x5508, 0x54EB,
+    0x5511, 0x5505, 0x54F1, 0x550A, 0x54FB, 0x54F7, 0x54F8, 0x54E0,
+    0x550E, 0x5503, 0x550B, 0x5701, 0x5702, 0x57CC, 0x5832, 0x57D5,
+    0x57D2, 0x57BA, 0x57C6, 0x57BD, 0x57BC, 0x57B8, 0x57B6, 0x57BF,
+    0x57C7, 0x57D0, 0x57B9, 0x57C1, 0x590E, 0x594A, 0x5A19, 0x5A16,
+    0x5A2D, 0x5A2E, 0x5A15, 0x5A0F, 0x5A17, 0x5A0A, 0x5A1E, 0x5A33,
+    0x5B6C, 0x5BA7, 0x5BAD, 0x5BAC, 0x5C03, 0x5C56, 0x5C54, 0x5CEC,
+    0x5CFF, 0x5CEE, 0x5CF1, 0x5CF7, 0x5D00, 0x5CF9, 0x5E29, 0x5E28,
+    0x5EA8, 0x5EAE, 0x5EAA, 0x5EAC, 0x5F33, 0x5F30, 0x5F67, 0x605D,
+    0x605A, 0x6067, 0x6041, 0x60A2, 0x6088, 0x6080, 0x6092, 0x6081,
+    0x609D, 0x6083, 0x6095, 0x609B, 0x6097, 0x6087, 0x609C, 0x608E,
+    0x6219, 0x6246, 0x62F2, 0x6310, 0x6356, 0x632C, 0x6344, 0x6345,
+    0x6336, 0x6343, 0x63E4, 0x6339, 0x634B, 0x634A, 0x633C, 0x6329,
+    0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632D, 0x6347, 0x6333,
+    0x635A, 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654A, 0x6546,
+    0x65C6, 0x65C3, 0x65C4, 0x65C2, 0x664A, 0x665F, 0x6647, 0x6651,
+    0x6712, 0x6713, 0x681F, 0x681A, 0x6849, 0x6832, 0x6833, 0x683B,
+    0x684B, 0x684F, 0x6816, 0x6831, 0x681C, 0x6835, 0x682B, 0x682D,
+    0x682F, 0x684E, 0x6844, 0x6834, 0x681D, 0x6812, 0x6814, 0x6826,
+    0x6828, 0x682E, 0x684D, 0x683A, 0x6825, 0x6820, 0x6B2C, 0x6B2F,
+    0x6B2D, 0x6B31, 0x6B34, 0x6B6D, 0x8082, 0x6B88, 0x6BE6, 0x6BE4,
+    0x6BE8, 0x6BE3, 0x6BE2, 0x6BE7, 0x6C25, 0x6D7A, 0x6D63, 0x6D64,
+    0x6D76, 0x6D0D, 0x6D61, 0x6D92, 0x6D58, 0x6D62, 0x6D6D, 0x6D6F,
+    0x6D91, 0x6D8D, 0x6DEF, 0x6D7F, 0x6D86, 0x6D5E, 0x6D67, 0x6D60,
+    0x6D97, 0x6D70, 0x6D7C, 0x6D5F, 0x6D82, 0x6D98, 0x6D2F, 0x6D68,
+    0x6D8B, 0x6D7E, 0x6D80, 0x6D84, 0x6D16, 0x6D83, 0x6D7B, 0x6D7D,
+    0x6D75, 0x6D90, 0x70DC, 0x70D3, 0x70D1, 0x70DD, 0x70CB, 0x7F39,
+    0x70E2, 0x70D7, 0x70D2, 0x70DE, 0x70E0, 0x70D4, 0x70CD, 0x70C5,
+    0x70C6, 0x70C7, 0x70DA, 0x70CE, 0x70E1, 0x7242, 0x7278, 0x7277,
+    0x7276, 0x7300, 0x72FA, 0x72F4, 0x72FE, 0x72F6, 0x72F3, 0x72FB,
+    0x7301, 0x73D3, 0x73D9, 0x73E5, 0x73D6, 0x73BC, 0x73E7, 0x73E3,
+    0x73E9, 0x73DC, 0x73D2, 0x73DB, 0x73D4, 0x73DD, 0x73DA, 0x73D7,
+    0x73D8, 0x73E8, 0x74DE, 0x74DF, 0x74F4, 0x74F5, 0x7521, 0x755B,
+    0x755F, 0x75B0, 0x75C1, 0x75BB, 0x75C4, 0x75C0, 0x75BF, 0x75B6,
+    0x75BA, 0x768A, 0x76C9, 0x771D, 0x771B, 0x7710, 0x7713, 0x7712,
+    0x7723, 0x7711, 0x7715, 0x7719, 0x771A, 0x7722, 0x7727, 0x7823,
+    0x782C, 0x7822, 0x7835, 0x782F, 0x7828, 0x782E, 0x782B, 0x7821,
+    0x7829, 0x7833, 0x782A, 0x7831, 0x7954, 0x795B, 0x794F, 0x795C,
+    0x7953, 0x7952, 0x7951, 0x79EB, 0x79EC, 0x79E0, 0x79EE, 0x79ED,
+    0x79EA, 0x79DC, 0x79DE, 0x79DD, 0x7A86, 0x7A89, 0x7A85, 0x7A8B,
+    0x7A8C, 0x7A8A, 0x7A87, 0x7AD8, 0x7B10, 0x7B04, 0x7B13, 0x7B05,
+    0x7B0F, 0x7B08, 0x7B0A, 0x7B0E, 0x7B09, 0x7B12, 0x7C84, 0x7C91,
+    0x7C8A, 0x7C8C, 0x7C88, 0x7C8D, 0x7C85, 0x7D1E, 0x7D1D, 0x7D11,
+    0x7D0E, 0x7D18, 0x7D16, 0x7D13, 0x7D1F, 0x7D12, 0x7D0F, 0x7D0C,
+    0x7F5C, 0x7F61, 0x7F5E, 0x7F60, 0x7F5D, 0x7F5B, 0x7F96, 0x7F92,
+    0x7FC3, 0x7FC2, 0x7FC0, 0x8016, 0x803E, 0x8039, 0x80FA, 0x80F2,
+    0x80F9, 0x80F5, 0x8101, 0x80FB, 0x8100, 0x8201, 0x822F, 0x8225,
+    0x8333, 0x832D, 0x8344, 0x8319, 0x8351, 0x8325, 0x8356, 0x833F,
+    0x8341, 0x8326, 0x831C, 0x8322, 0x8342, 0x834E, 0x831B, 0x832A,
+    0x8308, 0x833C, 0x834D, 0x8316, 0x8324, 0x8320, 0x8337, 0x832F,
+    0x8329, 0x8347, 0x8345, 0x834C, 0x8353, 0x831E, 0x832C, 0x834B,
+    0x8327, 0x8348, 0x8653, 0x8652, 0x86A2, 0x86A8, 0x8696, 0x868D,
+    0x8691, 0x869E, 0x8687, 0x8697, 0x8686, 0x868B, 0x869A, 0x8685,
+    0x86A5, 0x8699, 0x86A1, 0x86A7, 0x8695, 0x8698, 0x868E, 0x869D,
+    0x8690, 0x8694, 0x8843, 0x8844, 0x886D, 0x8875, 0x8876, 0x8872,
+    0x8880, 0x8871, 0x887F, 0x886F, 0x8883, 0x887E, 0x8874, 0x887C,
+    0x8A12, 0x8C47, 0x8C57, 0x8C7B, 0x8CA4, 0x8CA3, 0x8D76, 0x8D78,
+    0x8DB5, 0x8DB7, 0x8DB6, 0x8ED1, 0x8ED3, 0x8FFE, 0x8FF5, 0x9002,
+    0x8FFF, 0x8FFB, 0x9004, 0x8FFC, 0x8FF6, 0x90D6, 0x90E0, 0x90D9,
+    0x90DA, 0x90E3, 0x90DF, 0x90E5, 0x90D8, 0x90DB, 0x90D7, 0x90DC,
+    0x90E4, 0x9150, 0x914E, 0x914F, 0x91D5, 0x91E2, 0x91DA, 0x965C,
+    0x965F, 0x96BC, 0x98E3, 0x9ADF, 0x9B2F, 0x4E7F, 0x5070, 0x506A,
+    0x5061, 0x505E, 0x5060, 0x5053, 0x504B, 0x505D, 0x5072, 0x5048,
+    0x504D, 0x5041, 0x505B, 0x504A, 0x5062, 0x5015, 0x5045, 0x505F,
+    0x5069, 0x506B, 0x5063, 0x5064, 0x5046, 0x5040, 0x506E, 0x5073,
+    0x5057, 0x5051, 0x51D0, 0x526B, 0x526D, 0x526C, 0x526E, 0x52D6,
+    0x52D3, 0x532D, 0x539C, 0x5575, 0x5576, 0x553C, 0x554D, 0x5550,
+    0x5534, 0x552A, 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552,
+    0x5545, 0x550C, 0x5532, 0x5565, 0x554E, 0x5539, 0x5548, 0x552D,
+    0x553B, 0x5540, 0x554B, 0x570A, 0x5707, 0x57FB, 0x5814, 0x57E2,
+    0x57F6, 0x57DC, 0x57F4, 0x5800, 0x57ED, 0x57FD, 0x5808, 0x57F8,
+    0x580B, 0x57F3, 0x57CF, 0x5807, 0x57EE, 0x57E3, 0x57F2, 0x57E5,
+    0x57EC, 0x57E1, 0x580E, 0x57FC, 0x5810, 0x57E7, 0x5801, 0x580C,
+    0x57F1, 0x57E9, 0x57F0, 0x580D, 0x5804, 0x595C, 0x5A60, 0x5A58,
+    0x5A55, 0x5A67, 0x5A5E, 0x5A38, 0x5A35, 0x5A6D, 0x5A50, 0x5A5F,
+    0x5A65, 0x5A6C, 0x5A53, 0x5A64, 0x5A57, 0x5A43, 0x5A5D, 0x5A52,
+    0x5A44, 0x5A5B, 0x5A48, 0x5A8E, 0x5A3E, 0x5A4D, 0x5A39, 0x5A4C,
+    0x5A70, 0x5A69, 0x5A47, 0x5A51, 0x5A56, 0x5A42, 0x5A5C, 0x5B72,
+    0x5B6E, 0x5BC1, 0x5BC0, 0x5C59, 0x5D1E, 0x5D0B, 0x5D1D, 0x5D1A,
+    0x5D20, 0x5D0C, 0x5D28, 0x5D0D, 0x5D26, 0x5D25, 0x5D0F, 0x5D30,
+    0x5D12, 0x5D23, 0x5D1F, 0x5D2E, 0x5E3E, 0x5E34, 0x5EB1, 0x5EB4,
+    0x5EB9, 0x5EB2, 0x5EB3, 0x5F36, 0x5F38, 0x5F9B, 0x5F96, 0x5F9F,
+    0x608A, 0x6090, 0x6086, 0x60BE, 0x60B0, 0x60BA, 0x60D3, 0x60D4,
+    0x60CF, 0x60E4, 0x60D9, 0x60DD, 0x60C8, 0x60B1, 0x60DB, 0x60B7,
+    0x60CA, 0x60BF, 0x60C3, 0x60CD, 0x60C0, 0x6332, 0x6365, 0x638A,
+    0x6382, 0x637D, 0x63BD, 0x639E, 0x63AD, 0x639D, 0x6397, 0x63AB,
+    0x638E, 0x636F, 0x6387, 0x6390, 0x636E, 0x63AF, 0x6375, 0x639C,
+    0x636D, 0x63AE, 0x637C, 0x63A4, 0x633B, 0x639F, 0x6378, 0x6385,
+    0x6381, 0x6391, 0x638D, 0x6370, 0x6553, 0x65CD, 0x6665, 0x6661,
+    0x665B, 0x6659, 0x665C, 0x6662, 0x6718, 0x6879, 0x6887, 0x6890,
+    0x689C, 0x686D, 0x686E, 0x68AE, 0x68AB, 0x6956, 0x686F, 0x68A3,
+    0x68AC, 0x68A9, 0x6875, 0x6874, 0x68B2, 0x688F, 0x6877, 0x6892,
+    0x687C, 0x686B, 0x6872, 0x68AA, 0x6880, 0x6871, 0x687E, 0x689B,
+    0x6896, 0x688B, 0x68A0, 0x6889, 0x68A4, 0x6878, 0x687B, 0x6891,
+    0x688C, 0x688A, 0x687D, 0x6B36, 0x6B33, 0x6B37, 0x6B38, 0x6B91,
+    0x6B8F, 0x6B8D, 0x6B8E, 0x6B8C, 0x6C2A, 0x6DC0, 0x6DAB, 0x6DB4,
+    0x6DB3, 0x6E74, 0x6DAC, 0x6DE9, 0x6DE2, 0x6DB7, 0x6DF6, 0x6DD4,
+    0x6E00, 0x6DC8, 0x6DE0, 0x6DDF, 0x6DD6, 0x6DBE, 0x6DE5, 0x6DDC,
+    0x6DDD, 0x6DDB, 0x6DF4, 0x6DCA, 0x6DBD, 0x6DED, 0x6DF0, 0x6DBA,
+    0x6DD5, 0x6DC2, 0x6DCF, 0x6DC9, 0x6DD0, 0x6DF2, 0x6DD3, 0x6DFD,
+    0x6DD7, 0x6DCD, 0x6DE3, 0x6DBB, 0x70FA, 0x710D, 0x70F7, 0x7117,
+    0x70F4, 0x710C, 0x70F0, 0x7104, 0x70F3, 0x7110, 0x70FC, 0x70FF,
+    0x7106, 0x7113, 0x7100, 0x70F8, 0x70F6, 0x710B, 0x7102, 0x710E,
+    0x727E, 0x727B, 0x727C, 0x727F, 0x731D, 0x7317, 0x7307, 0x7311,
+    0x7318, 0x730A, 0x7308, 0x72FF, 0x730F, 0x731E, 0x7388, 0x73F6,
+    0x73F8, 0x73F5, 0x7404, 0x7401, 0x73FD, 0x7407, 0x7400, 0x73FA,
+    0x73FC, 0x73FF, 0x740C, 0x740B, 0x73F4, 0x7408, 0x7564, 0x7563,
+    0x75CE, 0x75D2, 0x75CF, 0x75CB, 0x75CC, 0x75D1, 0x75D0, 0x768F,
+    0x7689, 0x76D3, 0x7739, 0x772F, 0x772D, 0x7731, 0x7732, 0x7734,
+    0x7733, 0x773D, 0x7725, 0x773B, 0x7735, 0x7848, 0x7852, 0x7849,
+    0x784D, 0x784A, 0x784C, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967,
+    0x7969, 0x796A, 0x7963, 0x796B, 0x7961, 0x79BB, 0x79FA, 0x79F8,
+    0x79F6, 0x79F7, 0x7A8F, 0x7A94, 0x7A90, 0x7B35, 0x7B3B, 0x7B34,
+    0x7B25, 0x7B30, 0x7B22, 0x7B24, 0x7B33, 0x7B18, 0x7B2A, 0x7B1D,
+    0x7B31, 0x7B2B, 0x7B2D, 0x7B2F, 0x7B32, 0x7B38, 0x7B1A, 0x7B23,
+    0x7C94, 0x7C98, 0x7C96, 0x7CA3, 0x7D35, 0x7D3D, 0x7D38, 0x7D36,
+    0x7D3A, 0x7D45, 0x7D2C, 0x7D29, 0x7D41, 0x7D47, 0x7D3E, 0x7D3F,
+    0x7D4A, 0x7D3B, 0x7D28, 0x7F63, 0x7F95, 0x7F9C, 0x7F9D, 0x7F9B,
+    0x7FCA, 0x7FCB, 0x7FCD, 0x7FD0, 0x7FD1, 0x7FC7, 0x7FCF, 0x7FC9,
+    0x801F, 0x801E, 0x801B, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125,
+    0x8119, 0x811B, 0x812D, 0x811F, 0x812C, 0x811E, 0x8121, 0x8115,
+    0x8127, 0x811D, 0x8122, 0x8211, 0x8238, 0x8233, 0x823A, 0x8234,
+    0x8232, 0x8274, 0x8390, 0x83A3, 0x83A8, 0x838D, 0x837A, 0x8373,
+    0x83A4, 0x8374, 0x838F, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394,
+    0x83A9, 0x837D, 0x8383, 0x838C, 0x839D, 0x839B, 0x83AA, 0x838B,
+    0x837E, 0x83A5, 0x83AF, 0x8388, 0x8397, 0x83B0, 0x837F, 0x83A6,
+    0x8387, 0x83AE, 0x8376, 0x8659, 0x8656, 0x86BF, 0x86B7, 0x86C2,
+    0x86C1, 0x86C5, 0x86BA, 0x86B0, 0x86C8, 0x86B9, 0x86B3, 0x86B8,
+    0x86CC, 0x86B4, 0x86BB, 0x86BC, 0x86C3, 0x86BD, 0x86BE, 0x8852,
+    0x8889, 0x8895, 0x88A8, 0x88A2, 0x88AA, 0x889A, 0x8891, 0x88A1,
+    0x889F, 0x8898, 0x88A7, 0x8899, 0x889B, 0x8897, 0x88A4, 0x88AC,
+    0x888C, 0x8893, 0x888E, 0x8982, 0x89D6, 0x89D9, 0x89D5, 0x8A30,
+    0x8A27, 0x8A2C, 0x8A1E, 0x8C39, 0x8C3B, 0x8C5C, 0x8C5D, 0x8C7D,
+    0x8CA5, 0x8D7D, 0x8D7B, 0x8D79, 0x8DBC, 0x8DC2, 0x8DB9, 0x8DBF,
+    0x8DC1, 0x8ED8, 0x8EDE, 0x8EDD, 0x8EDC, 0x8ED7, 0x8EE0, 0x8EE1,
+    0x9024, 0x900B, 0x9011, 0x901C, 0x900C, 0x9021, 0x90EF, 0x90EA,
+    0x90F0, 0x90F4, 0x90F2, 0x90F3, 0x90D4, 0x90EB, 0x90EC, 0x90E9,
+    0x9156, 0x9158, 0x915A, 0x9153, 0x9155, 0x91EC, 0x91F4, 0x91F1,
+    0x91F3, 0x91F8, 0x91E4, 0x91F9, 0x91EA, 0x91EB, 0x91F7, 0x91E8,
+    0x91EE, 0x957A, 0x9586, 0x9588, 0x967C, 0x966D, 0x966B, 0x9671,
+    0x966F, 0x96BF, 0x976A, 0x9804, 0x98E5, 0x9997, 0x509B, 0x5095,
+    0x5094, 0x509E, 0x508B, 0x50A3, 0x5083, 0x508C, 0x508E, 0x509D,
+    0x5068, 0x509C, 0x5092, 0x5082, 0x5087, 0x515F, 0x51D4, 0x5312,
+    0x5311, 0x53A4, 0x53A7, 0x5591, 0x55A8, 0x55A5, 0x55AD, 0x5577,
+    0x5645, 0x55A2, 0x5593, 0x5588, 0x558F, 0x55B5, 0x5581, 0x55A3,
+    0x5592, 0x55A4, 0x557D, 0x558C, 0x55A6, 0x557F, 0x5595, 0x55A1,
+    0x558E, 0x570C, 0x5829, 0x5837, 0x5819, 0x581E, 0x5827, 0x5823,
+    0x5828, 0x57F5, 0x5848, 0x5825, 0x581C, 0x581B, 0x5833, 0x583F,
+    0x5836, 0x582E, 0x5839, 0x5838, 0x582D, 0x582C, 0x583B, 0x5961,
+    0x5AAF, 0x5A94, 0x5A9F, 0x5A7A, 0x5AA2, 0x5A9E, 0x5A78, 0x5AA6,
+    0x5A7C, 0x5AA5, 0x5AAC, 0x5A95, 0x5AAE, 0x5A37, 0x5A84, 0x5A8A,
+    0x5A97, 0x5A83, 0x5A8B, 0x5AA9, 0x5A7B, 0x5A7D, 0x5A8C, 0x5A9C,
+    0x5A8F, 0x5A93, 0x5A9D, 0x5BEA, 0x5BCD, 0x5BCB, 0x5BD4, 0x5BD1,
+    0x5BCA, 0x5BCE, 0x5C0C, 0x5C30, 0x5D37, 0x5D43, 0x5D6B, 0x5D41,
+    0x5D4B, 0x5D3F, 0x5D35, 0x5D51, 0x5D4E, 0x5D55, 0x5D33, 0x5D3A,
+    0x5D52, 0x5D3D, 0x5D31, 0x5D59, 0x5D42, 0x5D39, 0x5D49, 0x5D38,
+    0x5D3C, 0x5D32, 0x5D36, 0x5D40, 0x5D45, 0x5E44, 0x5E41, 0x5F58,
+    0x5FA6, 0x5FA5, 0x5FAB, 0x60C9, 0x60B9, 0x60CC, 0x60E2, 0x60CE,
+    0x60C4, 0x6114, 0x60F2, 0x610A, 0x6116, 0x6105, 0x60F5, 0x6113,
+    0x60F8, 0x60FC, 0x60FE, 0x60C1, 0x6103, 0x6118, 0x611D, 0x6110,
+    0x60FF, 0x6104, 0x610B, 0x624A, 0x6394, 0x63B1, 0x63B0, 0x63CE,
+    0x63E5, 0x63E8, 0x63EF, 0x63C3, 0x649D, 0x63F3, 0x63CA, 0x63E0,
+    0x63F6, 0x63D5, 0x63F2, 0x63F5, 0x6461, 0x63DF, 0x63BE, 0x63DD,
+    0x63DC, 0x63C4, 0x63D8, 0x63D3, 0x63C2, 0x63C7, 0x63CC, 0x63CB,
+    0x63C8, 0x63F0, 0x63D7, 0x63D9, 0x6532, 0x6567, 0x656A, 0x6564,
+    0x655C, 0x6568, 0x6565, 0x658C, 0x659D, 0x659E, 0x65AE, 0x65D0,
+    0x65D2, 0x667C, 0x666C, 0x667B, 0x6680, 0x6671, 0x6679, 0x666A,
+    0x6672, 0x6701, 0x690C, 0x68D3, 0x6904, 0x68DC, 0x692A, 0x68EC,
+    0x68EA, 0x68F1, 0x690F, 0x68D6, 0x68F7, 0x68EB, 0x68E4, 0x68F6,
+    0x6913, 0x6910, 0x68F3, 0x68E1, 0x6907, 0x68CC, 0x6908, 0x6970,
+    0x68B4, 0x6911, 0x68EF, 0x68C6, 0x6914, 0x68F8, 0x68D0, 0x68FD,
+    0x68FC, 0x68E8, 0x690B, 0x690A, 0x6917, 0x68CE, 0x68C8, 0x68DD,
+    0x68DE, 0x68E6, 0x68F4, 0x68D1, 0x6906, 0x68D4, 0x68E9, 0x6915,
+    0x6925, 0x68C7, 0x6B39, 0x6B3B, 0x6B3F, 0x6B3C, 0x6B94, 0x6B97,
+    0x6B99, 0x6B95, 0x6BBD, 0x6BF0, 0x6BF2, 0x6BF3, 0x6C30, 0x6DFC,
+    0x6E46, 0x6E47, 0x6E1F, 0x6E49, 0x6E88, 0x6E3C, 0x6E3D, 0x6E45,
+    0x6E62, 0x6E2B, 0x6E3F, 0x6E41, 0x6E5D, 0x6E73, 0x6E1C, 0x6E33,
+    0x6E4B, 0x6E40, 0x6E51, 0x6E3B, 0x6E03, 0x6E2E, 0x6E5E, 0x6E68,
+    0x6E5C, 0x6E61, 0x6E31, 0x6E28, 0x6E60, 0x6E71, 0x6E6B, 0x6E39,
+    0x6E22, 0x6E30, 0x6E53, 0x6E65, 0x6E27, 0x6E78, 0x6E64, 0x6E77,
+    0x6E55, 0x6E79, 0x6E52, 0x6E66, 0x6E35, 0x6E36, 0x6E5A, 0x7120,
+    0x711E, 0x712F, 0x70FB, 0x712E, 0x7131, 0x7123, 0x7125, 0x7122,
+    0x7132, 0x711F, 0x7128, 0x713A, 0x711B, 0x724B, 0x725A, 0x7288,
+    0x7289, 0x7286, 0x7285, 0x728B, 0x7312, 0x730B, 0x7330, 0x7322,
+    0x7331, 0x7333, 0x7327, 0x7332, 0x732D, 0x7326, 0x7323, 0x7335,
+    0x730C, 0x742E, 0x742C, 0x7430, 0x742B, 0x7416, 0x741A, 0x7421,
+    0x742D, 0x7431, 0x7424, 0x7423, 0x741D, 0x7429, 0x7420, 0x7432,
+    0x74FB, 0x752F, 0x756F, 0x756C, 0x75E7, 0x75DA, 0x75E1, 0x75E6,
+    0x75DD, 0x75DF, 0x75E4, 0x75D7, 0x7695, 0x7692, 0x76DA, 0x7746,
+    0x7747, 0x7744, 0x774D, 0x7745, 0x774A, 0x774E, 0x774B, 0x774C,
+    0x77DE, 0x77EC, 0x7860, 0x7864, 0x7865, 0x785C, 0x786D, 0x7871,
+    0x786A, 0x786E, 0x7870, 0x7869, 0x7868, 0x785E, 0x7862, 0x7974,
+    0x7973, 0x7972, 0x7970, 0x7A02, 0x7A0A, 0x7A03, 0x7A0C, 0x7A04,
+    0x7A99, 0x7AE6, 0x7AE4, 0x7B4A, 0x7B47, 0x7B44, 0x7B48, 0x7B4C,
+    0x7B4E, 0x7B40, 0x7B58, 0x7B45, 0x7CA2, 0x7C9E, 0x7CA8, 0x7CA1,
+    0x7D58, 0x7D6F, 0x7D63, 0x7D53, 0x7D56, 0x7D67, 0x7D6A, 0x7D4F,
+    0x7D6D, 0x7D5C, 0x7D6B, 0x7D52, 0x7D54, 0x7D69, 0x7D51, 0x7D5F,
+    0x7D4E, 0x7F3E, 0x7F3F, 0x7F65, 0x7F66, 0x7FA2, 0x7FA0, 0x7FA1,
+    0x7FD7, 0x8051, 0x804F, 0x8050, 0x80FE, 0x80D4, 0x8143, 0x814A,
+    0x8152, 0x814F, 0x8147, 0x813D, 0x814D, 0x813A, 0x81E6, 0x81EE,
+    0x81F7, 0x81F8, 0x81F9, 0x8204, 0x823C, 0x823D, 0x823F, 0x8275,
+    0x833B, 0x83CF, 0x83F9, 0x8423, 0x83C0, 0x83E8, 0x8412, 0x83E7,
+    0x83E4, 0x83FC, 0x83F6, 0x8410, 0x83C6, 0x83C8, 0x83EB, 0x83E3,
+    0x83BF, 0x8401, 0x83DD, 0x83E5, 0x83D8, 0x83FF, 0x83E1, 0x83CB,
+    0x83CE, 0x83D6, 0x83F5, 0x83C9, 0x8409, 0x840F, 0x83DE, 0x8411,
+    0x8406, 0x83C2, 0x83F3, 0x83D5, 0x83FA, 0x83C7, 0x83D1, 0x83EA,
+    0x8413, 0x839A, 0x83C3, 0x83EC, 0x83EE, 0x83C4, 0x83FB, 0x83D7,
+    0x83E2, 0x841B, 0x83DB, 0x83FE, 0x86D8, 0x86E2, 0x86E6, 0x86D3,
+    0x86E3, 0x86DA, 0x86EA, 0x86DD, 0x86EB, 0x86DC, 0x86EC, 0x86E9,
+    0x86D7, 0x86E8, 0x86D1, 0x8848, 0x8856, 0x8855, 0x88BA, 0x88D7,
+    0x88B9, 0x88B8, 0x88C0, 0x88BE, 0x88B6, 0x88BC, 0x88B7, 0x88BD,
+    0x88B2, 0x8901, 0x88C9, 0x8995, 0x8998, 0x8997, 0x89DD, 0x89DA,
+    0x89DB, 0x8A4E, 0x8A4D, 0x8A39, 0x8A59, 0x8A40, 0x8A57, 0x8A58,
+    0x8A44, 0x8A45, 0x8A52, 0x8A48, 0x8A51, 0x8A4A, 0x8A4C, 0x8A4F,
+    0x8C5F, 0x8C81, 0x8C80, 0x8CBA, 0x8CBE, 0x8CB0, 0x8CB9, 0x8CB5,
+    0x8D84, 0x8D80, 0x8D89, 0x8DD8, 0x8DD3, 0x8DCD, 0x8DC7, 0x8DD6,
+    0x8DDC, 0x8DCF, 0x8DD5, 0x8DD9, 0x8DC8, 0x8DD7, 0x8DC5, 0x8EEF,
+    0x8EF7, 0x8EFA, 0x8EF9, 0x8EE6, 0x8EEE, 0x8EE5, 0x8EF5, 0x8EE7,
+    0x8EE8, 0x8EF6, 0x8EEB, 0x8EF1, 0x8EEC, 0x8EF4, 0x8EE9, 0x902D,
+    0x9034, 0x902F, 0x9106, 0x912C, 0x9104, 0x90FF, 0x90FC, 0x9108,
+    0x90F9, 0x90FB, 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161,
+    0x9164, 0x915F, 0x9162, 0x9160, 0x9201, 0x920A, 0x9225, 0x9203,
+    0x921A, 0x9226, 0x920F, 0x920C, 0x9200, 0x9212, 0x91FF, 0x91FD,
+    0x9206, 0x9204, 0x9227, 0x9202, 0x921C, 0x9224, 0x9219, 0x9217,
+    0x9205, 0x9216, 0x957B, 0x958D, 0x958C, 0x9590, 0x9687, 0x967E,
+    0x9688, 0x9689, 0x9683, 0x9680, 0x96C2, 0x96C8, 0x96C3, 0x96F1,
+    0x96F0, 0x976C, 0x9770, 0x976E, 0x9807, 0x98A9, 0x98EB, 0x9CE6,
+    0x9EF9, 0x4E83, 0x4E84, 0x4EB6, 0x50BD, 0x50BF, 0x50C6, 0x50AE,
+    0x50C4, 0x50CA, 0x50B4, 0x50C8, 0x50C2, 0x50B0, 0x50C1, 0x50BA,
+    0x50B1, 0x50CB, 0x50C9, 0x50B6, 0x50B8, 0x51D7, 0x527A, 0x5278,
+    0x527B, 0x527C, 0x55C3, 0x55DB, 0x55CC, 0x55D0, 0x55CB, 0x55CA,
+    0x55DD, 0x55C0, 0x55D4, 0x55C4, 0x55E9, 0x55BF, 0x55D2, 0x558D,
+    0x55CF, 0x55D5, 0x55E2, 0x55D6, 0x55C8, 0x55F2, 0x55CD, 0x55D9,
+    0x55C2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584F, 0x584D, 0x5849,
+    0x586F, 0x5855, 0x584E, 0x585D, 0x5859, 0x5865, 0x585B, 0x583D,
+    0x5863, 0x5871, 0x58FC, 0x5AC7, 0x5AC4, 0x5ACB, 0x5ABA, 0x5AB8,
+    0x5AB1, 0x5AB5, 0x5AB0, 0x5ABF, 0x5AC8, 0x5ABB, 0x5AC6, 0x5AB7,
+    0x5AC0, 0x5ACA, 0x5AB4, 0x5AB6, 0x5ACD, 0x5AB9, 0x5A90, 0x5BD6,
+    0x5BD8, 0x5BD9, 0x5C1F, 0x5C33, 0x5D71, 0x5D63, 0x5D4A, 0x5D65,
+    0x5D72, 0x5D6C, 0x5D5E, 0x5D68, 0x5D67, 0x5D62, 0x5DF0, 0x5E4F,
+    0x5E4E, 0x5E4A, 0x5E4D, 0x5E4B, 0x5EC5, 0x5ECC, 0x5EC6, 0x5ECB,
+    0x5EC7, 0x5F40, 0x5FAF, 0x5FAD, 0x60F7, 0x6149, 0x614A, 0x612B,
+    0x6145, 0x6136, 0x6132, 0x612E, 0x6146, 0x612F, 0x614F, 0x6129,
+    0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63C5, 0x63F1,
+    0x63EB, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433, 0x6443,
+    0x641F, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640C,
+    0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642F, 0x640A, 0x641A,
+    0x6440, 0x6425, 0x6427, 0x640B, 0x63E7, 0x641B, 0x642E, 0x6421,
+    0x640E, 0x656F, 0x6592, 0x65D3, 0x6686, 0x668C, 0x6695, 0x6690,
+    0x668B, 0x668A, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, 0x695F,
+    0x6938, 0x694E, 0x6962, 0x6971, 0x693F, 0x6945, 0x696A, 0x6939,
+    0x6942, 0x6957, 0x6959, 0x697A, 0x6948, 0x6949, 0x6935, 0x696C,
+    0x6933, 0x693D, 0x6965, 0x68F0, 0x6978, 0x6934, 0x6969, 0x6940,
+    0x696F, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694C, 0x693B,
+    0x694B, 0x6937, 0x695C, 0x694F, 0x6951, 0x6932, 0x6952, 0x692F,
+    0x697B, 0x693C, 0x6B46, 0x6B45, 0x6B43, 0x6B42, 0x6B48, 0x6B41,
+    0x6B9B, 0x6BFB, 0x6BFC, 0x6BF9, 0x6BF7, 0x6BF8, 0x6E9B, 0x6ED6,
+    0x6EC8, 0x6E8F, 0x6EC0, 0x6E9F, 0x6E93, 0x6E94, 0x6EA0, 0x6EB1,
+    0x6EB9, 0x6EC6, 0x6ED2, 0x6EBD, 0x6EC1, 0x6E9E, 0x6EC9, 0x6EB7,
+    0x6EB0, 0x6ECD, 0x6EA6, 0x6ECF, 0x6EB2, 0x6EBE, 0x6EC3, 0x6EDC,
+    0x6ED8, 0x6E99, 0x6E92, 0x6E8E, 0x6E8D, 0x6EA4, 0x6EA1, 0x6EBF,
+    0x6EB3, 0x6ED0, 0x6ECA, 0x6E97, 0x6EAE, 0x6EA3, 0x7147, 0x7154,
+    0x7152, 0x7163, 0x7160, 0x7141, 0x715D, 0x7162, 0x7172, 0x7178,
+    0x716A, 0x7161, 0x7142, 0x7158, 0x7143, 0x714B, 0x7170, 0x715F,
+    0x7150, 0x7153, 0x7144, 0x714D, 0x715A, 0x724F, 0x728D, 0x728C,
+    0x7291, 0x7290, 0x728E, 0x733C, 0x7342, 0x733B, 0x733A, 0x7340,
+    0x734A, 0x7349, 0x7444, 0x744A, 0x744B, 0x7452, 0x7451, 0x7457,
+    0x7440, 0x744F, 0x7450, 0x744E, 0x7442, 0x7446, 0x744D, 0x7454,
+    0x74E1, 0x74FF, 0x74FE, 0x74FD, 0x751D, 0x7579, 0x7577, 0x6983,
+    0x75EF, 0x760F, 0x7603, 0x75F7, 0x75FE, 0x75FC, 0x75F9, 0x75F8,
+    0x7610, 0x75FB, 0x75F6, 0x75ED, 0x75F5, 0x75FD, 0x7699, 0x76B5,
+    0x76DD, 0x7755, 0x775F, 0x7760, 0x7752, 0x7756, 0x775A, 0x7769,
+    0x7767, 0x7754, 0x7759, 0x776D, 0x77E0, 0x7887, 0x789A, 0x7894,
+    0x788F, 0x7884, 0x7895, 0x7885, 0x7886, 0x78A1, 0x7883, 0x7879,
+    0x7899, 0x7880, 0x7896, 0x787B, 0x797C, 0x7982, 0x797D, 0x7979,
+    0x7A11, 0x7A18, 0x7A19, 0x7A12, 0x7A17, 0x7A15, 0x7A22, 0x7A13,
+    0x7A1B, 0x7A10, 0x7AA3, 0x7AA2, 0x7A9E, 0x7AEB, 0x7B66, 0x7B64,
+    0x7B6D, 0x7B74, 0x7B69, 0x7B72, 0x7B65, 0x7B73, 0x7B71, 0x7B70,
+    0x7B61, 0x7B78, 0x7B76, 0x7B63, 0x7CB2, 0x7CB4, 0x7CAF, 0x7D88,
+    0x7D86, 0x7D80, 0x7D8D, 0x7D7F, 0x7D85, 0x7D7A, 0x7D8E, 0x7D7B,
+    0x7D83, 0x7D7C, 0x7D8C, 0x7D94, 0x7D84, 0x7D7D, 0x7D92, 0x7F6D,
+    0x7F6B, 0x7F67, 0x7F68, 0x7F6C, 0x7FA6, 0x7FA5, 0x7FA7, 0x7FDB,
+    0x7FDC, 0x8021, 0x8164, 0x8160, 0x8177, 0x815C, 0x8169, 0x815B,
+    0x8162, 0x8172, 0x6721, 0x815E, 0x8176, 0x8167, 0x816F, 0x8144,
+    0x8161, 0x821D, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84F1,
+    0x843F, 0x8456, 0x8476, 0x8479, 0x848F, 0x848D, 0x8465, 0x8451,
+    0x8440, 0x8486, 0x8467, 0x8430, 0x844D, 0x847D, 0x845A, 0x8459,
+    0x8474, 0x8473, 0x845D, 0x8507, 0x845E, 0x8437, 0x843A, 0x8434,
+    0x847A, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83D9, 0x844B,
+    0x842F, 0x8442, 0x842D, 0x845F, 0x8470, 0x8439, 0x844E, 0x844C,
+    0x8452, 0x846F, 0x84C5, 0x848E, 0x843B, 0x8447, 0x8436, 0x8433,
+    0x8468, 0x847E, 0x8444, 0x842B, 0x8460, 0x8454, 0x846E, 0x8450,
+    0x870B, 0x8704, 0x86F7, 0x870C, 0x86FA, 0x86D6, 0x86F5, 0x874D,
+    0x86F8, 0x870E, 0x8709, 0x8701, 0x86F6, 0x870D, 0x8705, 0x88D6,
+    0x88CB, 0x88CD, 0x88CE, 0x88DE, 0x88DB, 0x88DA, 0x88CC, 0x88D0,
+    0x8985, 0x899B, 0x89DF, 0x89E5, 0x89E4, 0x89E1, 0x89E0, 0x89E2,
+    0x89DC, 0x89E6, 0x8A76, 0x8A86, 0x8A7F, 0x8A61, 0x8A3F, 0x8A77,
+    0x8A82, 0x8A84, 0x8A75, 0x8A83, 0x8A81, 0x8A74, 0x8A7A, 0x8C3C,
+    0x8C4B, 0x8C4A, 0x8C65, 0x8C64, 0x8C66, 0x8C86, 0x8C84, 0x8C85,
+    0x8CCC, 0x8D68, 0x8D69, 0x8D91, 0x8D8C, 0x8D8E, 0x8D8F, 0x8D8D,
+    0x8D93, 0x8D94, 0x8D90, 0x8D92, 0x8DF0, 0x8DE0, 0x8DEC, 0x8DF1,
+    0x8DEE, 0x8DD0, 0x8DE9, 0x8DE3, 0x8DE2, 0x8DE7, 0x8DF2, 0x8DEB,
+    0x8DF4, 0x8F06, 0x8EFF, 0x8F01, 0x8F00, 0x8F05, 0x8F07, 0x8F08,
+    0x8F02, 0x8F0B, 0x9052, 0x903F, 0x9044, 0x9049, 0x903D, 0x9110,
+    0x910D, 0x910F, 0x9111, 0x9116, 0x9114, 0x910B, 0x910E, 0x916E,
+    0x916F, 0x9248, 0x9252, 0x9230, 0x923A, 0x9266, 0x9233, 0x9265,
+    0x925E, 0x9283, 0x922E, 0x924A, 0x9246, 0x926D, 0x926C, 0x924F,
+    0x9260, 0x9267, 0x926F, 0x9236, 0x9261, 0x9270, 0x9231, 0x9254,
+    0x9263, 0x9250, 0x9272, 0x924E, 0x9253, 0x924C, 0x9256, 0x9232,
+    0x959F, 0x959C, 0x959E, 0x959B, 0x9692, 0x9693, 0x9691, 0x9697,
+    0x96CE, 0x96FA, 0x96FD, 0x96F8, 0x96F5, 0x9773, 0x9777, 0x9778,
+    0x9772, 0x980F, 0x980D, 0x980E, 0x98AC, 0x98F6, 0x98F9, 0x99AF,
+    0x99B2, 0x99B0, 0x99B5, 0x9AAD, 0x9AAB, 0x9B5B, 0x9CEA, 0x9CED,
+    0x9CE7, 0x9E80, 0x9EFD, 0x50E6, 0x50D4, 0x50D7, 0x50E8, 0x50F3,
+    0x50DB, 0x50EA, 0x50DD, 0x50E4, 0x50D3, 0x50EC, 0x50F0, 0x50EF,
+    0x50E3, 0x50E0, 0x51D8, 0x5280, 0x5281, 0x52E9, 0x52EB, 0x5330,
+    0x53AC, 0x5627, 0x5615, 0x560C, 0x5612, 0x55FC, 0x560F, 0x561C,
+    0x5601, 0x5613, 0x5602, 0x55FA, 0x561D, 0x5604, 0x55FF, 0x55F9,
+    0x5889, 0x587C, 0x5890, 0x5898, 0x5886, 0x5881, 0x587F, 0x5874,
+    0x588B, 0x587A, 0x5887, 0x5891, 0x588E, 0x5876, 0x5882, 0x5888,
+    0x587B, 0x5894, 0x588F, 0x58FE, 0x596B, 0x5ADC, 0x5AEE, 0x5AE5,
+    0x5AD5, 0x5AEA, 0x5ADA, 0x5AED, 0x5AEB, 0x5AF3, 0x5AE2, 0x5AE0,
+    0x5ADB, 0x5AEC, 0x5ADE, 0x5ADD, 0x5AD9, 0x5AE8, 0x5ADF, 0x5B77,
+    0x5BE0, 0x5BE3, 0x5C63, 0x5D82, 0x5D80, 0x5D7D, 0x5D86, 0x5D7A,
+    0x5D81, 0x5D77, 0x5D8A, 0x5D89, 0x5D88, 0x5D7E, 0x5D7C, 0x5D8D,
+    0x5D79, 0x5D7F, 0x5E58, 0x5E59, 0x5E53, 0x5ED8, 0x5ED1, 0x5ED7,
+    0x5ECE, 0x5EDC, 0x5ED5, 0x5ED9, 0x5ED2, 0x5ED4, 0x5F44, 0x5F43,
+    0x5F6F, 0x5FB6, 0x612C, 0x6128, 0x6141, 0x615E, 0x6171, 0x6173,
+    0x6152, 0x6153, 0x6172, 0x616C, 0x6180, 0x6174, 0x6154, 0x617A,
+    0x615B, 0x6165, 0x613B, 0x616A, 0x6161, 0x6156, 0x6229, 0x6227,
+    0x622B, 0x642B, 0x644D, 0x645B, 0x645D, 0x6474, 0x6476, 0x6472,
+    0x6473, 0x647D, 0x6475, 0x6466, 0x64A6, 0x644E, 0x6482, 0x645E,
+    0x645C, 0x644B, 0x6453, 0x6460, 0x6450, 0x647F, 0x643F, 0x646C,
+    0x646B, 0x6459, 0x6465, 0x6477, 0x6573, 0x65A0, 0x66A1, 0x66A0,
+    0x669F, 0x6705, 0x6704, 0x6722, 0x69B1, 0x69B6, 0x69C9, 0x69A0,
+    0x69CE, 0x6996, 0x69B0, 0x69AC, 0x69BC, 0x6991, 0x6999, 0x698E,
+    0x69A7, 0x698D, 0x69A9, 0x69BE, 0x69AF, 0x69BF, 0x69C4, 0x69BD,
+    0x69A4, 0x69D4, 0x69B9, 0x69CA, 0x699A, 0x69CF, 0x69B3, 0x6993,
+    0x69AA, 0x69A1, 0x699E, 0x69D9, 0x6997, 0x6990, 0x69C2, 0x69B5,
+    0x69A5, 0x69C6, 0x6B4A, 0x6B4D, 0x6B4B, 0x6B9E, 0x6B9F, 0x6BA0,
+    0x6BC3, 0x6BC4, 0x6BFE, 0x6ECE, 0x6EF5, 0x6EF1, 0x6F03, 0x6F25,
+    0x6EF8, 0x6F37, 0x6EFB, 0x6F2E, 0x6F09, 0x6F4E, 0x6F19, 0x6F1A,
+    0x6F27, 0x6F18, 0x6F3B, 0x6F12, 0x6EED, 0x6F0A, 0x6F36, 0x6F73,
+    0x6EF9, 0x6EEE, 0x6F2D, 0x6F40, 0x6F30, 0x6F3C, 0x6F35, 0x6EEB,
+    0x6F07, 0x6F0E, 0x6F43, 0x6F05, 0x6EFD, 0x6EF6, 0x6F39, 0x6F1C,
+    0x6EFC, 0x6F3A, 0x6F1F, 0x6F0D, 0x6F1E, 0x6F08, 0x6F21, 0x7187,
+    0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718F, 0x717B, 0x7186,
+    0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, 0x7343,
+    0x734D, 0x7351, 0x734C, 0x7462, 0x7473, 0x7471, 0x7475, 0x7472,
+    0x7467, 0x746E, 0x7500, 0x7502, 0x7503, 0x757D, 0x7590, 0x7616,
+    0x7608, 0x760C, 0x7615, 0x7611, 0x760A, 0x7614, 0x76B8, 0x7781,
+    0x777C, 0x7785, 0x7782, 0x776E, 0x7780, 0x776F, 0x777E, 0x7783,
+    0x78B2, 0x78AA, 0x78B4, 0x78AD, 0x78A8, 0x787E, 0x78AB, 0x789E,
+    0x78A5, 0x78A0, 0x78AC, 0x78A2, 0x78A4, 0x7998, 0x798A, 0x798B,
+    0x7996, 0x7995, 0x7994, 0x7993, 0x7997, 0x7988, 0x7992, 0x7990,
+    0x7A2B, 0x7A4A, 0x7A30, 0x7A2F, 0x7A28, 0x7A26, 0x7AA8, 0x7AAB,
+    0x7AAC, 0x7AEE, 0x7B88, 0x7B9C, 0x7B8A, 0x7B91, 0x7B90, 0x7B96,
+    0x7B8D, 0x7B8C, 0x7B9B, 0x7B8E, 0x7B85, 0x7B98, 0x5284, 0x7B99,
+    0x7BA4, 0x7B82, 0x7CBB, 0x7CBF, 0x7CBC, 0x7CBA, 0x7DA7, 0x7DB7,
+    0x7DC2, 0x7DA3, 0x7DAA, 0x7DC1, 0x7DC0, 0x7DC5, 0x7D9D, 0x7DCE,
+    0x7DC4, 0x7DC6, 0x7DCB, 0x7DCC, 0x7DAF, 0x7DB9, 0x7D96, 0x7DBC,
+    0x7D9F, 0x7DA6, 0x7DAE, 0x7DA9, 0x7DA1, 0x7DC9, 0x7F73, 0x7FE2,
+    0x7FE3, 0x7FE5, 0x7FDE, 0x8024, 0x805D, 0x805C, 0x8189, 0x8186,
+    0x8183, 0x8187, 0x818D, 0x818C, 0x818B, 0x8215, 0x8497, 0x84A4,
+    0x84A1, 0x849F, 0x84BA, 0x84CE, 0x84C2, 0x84AC, 0x84AE, 0x84AB,
+    0x84B9, 0x84B4, 0x84C1, 0x84CD, 0x84AA, 0x849A, 0x84B1, 0x84D0,
+    0x849D, 0x84A7, 0x84BB, 0x84A2, 0x8494, 0x84C7, 0x84CC, 0x849B,
+    0x84A9, 0x84AF, 0x84A8, 0x84D6, 0x8498, 0x84B6, 0x84CF, 0x84A0,
+    0x84D7, 0x84D4, 0x84D2, 0x84DB, 0x84B0, 0x8491, 0x8661, 0x8733,
+    0x8723, 0x8728, 0x876B, 0x8740, 0x872E, 0x871E, 0x8721, 0x8719,
+    0x871B, 0x8743, 0x872C, 0x8741, 0x873E, 0x8746, 0x8720, 0x8732,
+    0x872A, 0x872D, 0x873C, 0x8712, 0x873A, 0x8731, 0x8735, 0x8742,
+    0x8726, 0x8727, 0x8738, 0x8724, 0x871A, 0x8730, 0x8711, 0x88F7,
+    0x88E7, 0x88F1, 0x88F2, 0x88FA, 0x88FE, 0x88EE, 0x88FC, 0x88F6,
+    0x88FB, 0x88F0, 0x88EC, 0x88EB, 0x899D, 0x89A1, 0x899F, 0x899E,
+    0x89E9, 0x89EB, 0x89E8, 0x8AAB, 0x8A99, 0x8A8B, 0x8A92, 0x8A8F,
+    0x8A96, 0x8C3D, 0x8C68, 0x8C69, 0x8CD5, 0x8CCF, 0x8CD7, 0x8D96,
+    0x8E09, 0x8E02, 0x8DFF, 0x8E0D, 0x8DFD, 0x8E0A, 0x8E03, 0x8E07,
+    0x8E06, 0x8E05, 0x8DFE, 0x8E00, 0x8E04, 0x8F10, 0x8F11, 0x8F0E,
+    0x8F0D, 0x9123, 0x911C, 0x9120, 0x9122, 0x911F, 0x911D, 0x911A,
+    0x9124, 0x9121, 0x911B, 0x917A, 0x9172, 0x9179, 0x9173, 0x92A5,
+    0x92A4, 0x9276, 0x929B, 0x927A, 0x92A0, 0x9294, 0x92AA, 0x928D,
+    0x92A6, 0x929A, 0x92AB, 0x9279, 0x9297, 0x927F, 0x92A3, 0x92EE,
+    0x928E, 0x9282, 0x9295, 0x92A2, 0x927D, 0x9288, 0x92A1, 0x928A,
+    0x9286, 0x928C, 0x9299, 0x92A7, 0x927E, 0x9287, 0x92A9, 0x929D,
+    0x928B, 0x922D, 0x969E, 0x96A1, 0x96FF, 0x9758, 0x977D, 0x977A,
+    0x977E, 0x9783, 0x9780, 0x9782, 0x977B, 0x9784, 0x9781, 0x977F,
+    0x97CE, 0x97CD, 0x9816, 0x98AD, 0x98AE, 0x9902, 0x9900, 0x9907,
+    0x999D, 0x999C, 0x99C3, 0x99B9, 0x99BB, 0x99BA, 0x99C2, 0x99BD,
+    0x99C7, 0x9AB1, 0x9AE3, 0x9AE7, 0x9B3E, 0x9B3F, 0x9B60, 0x9B61,
+    0x9B5F, 0x9CF1, 0x9CF2, 0x9CF5, 0x9EA7, 0x50FF, 0x5103, 0x5130,
+    0x50F8, 0x5106, 0x5107, 0x50F6, 0x50FE, 0x510B, 0x510C, 0x50FD,
+    0x510A, 0x528B, 0x528C, 0x52F1, 0x52EF, 0x5648, 0x5642, 0x564C,
+    0x5635, 0x5641, 0x564A, 0x5649, 0x5646, 0x5658, 0x565A, 0x5640,
+    0x5633, 0x563D, 0x562C, 0x563E, 0x5638, 0x562A, 0x563A, 0x571A,
+    0x58AB, 0x589D, 0x58B1, 0x58A0, 0x58A3, 0x58AF, 0x58AC, 0x58A5,
+    0x58A1, 0x58FF, 0x5AFF, 0x5AF4, 0x5AFD, 0x5AF7, 0x5AF6, 0x5B03,
+    0x5AF8, 0x5B02, 0x5AF9, 0x5B01, 0x5B07, 0x5B05, 0x5B0F, 0x5C67,
+    0x5D99, 0x5D97, 0x5D9F, 0x5D92, 0x5DA2, 0x5D93, 0x5D95, 0x5DA0,
+    0x5D9C, 0x5DA1, 0x5D9A, 0x5D9E, 0x5E69, 0x5E5D, 0x5E60, 0x5E5C,
+    0x7DF3, 0x5EDB, 0x5EDE, 0x5EE1, 0x5F49, 0x5FB2, 0x618B, 0x6183,
+    0x6179, 0x61B1, 0x61B0, 0x61A2, 0x6189, 0x619B, 0x6193, 0x61AF,
+    0x61AD, 0x619F, 0x6192, 0x61AA, 0x61A1, 0x618D, 0x6166, 0x61B3,
+    0x622D, 0x646E, 0x6470, 0x6496, 0x64A0, 0x6485, 0x6497, 0x649C,
+    0x648F, 0x648B, 0x648A, 0x648C, 0x64A3, 0x649F, 0x6468, 0x64B1,
+    0x6498, 0x6576, 0x657A, 0x6579, 0x657B, 0x65B2, 0x65B3, 0x66B5,
+    0x66B0, 0x66A9, 0x66B2, 0x66B7, 0x66AA, 0x66AF, 0x6A00, 0x6A06,
+    0x6A17, 0x69E5, 0x69F8, 0x6A15, 0x69F1, 0x69E4, 0x6A20, 0x69FF,
+    0x69EC, 0x69E2, 0x6A1B, 0x6A1D, 0x69FE, 0x6A27, 0x69F2, 0x69EE,
+    0x6A14, 0x69F7, 0x69E7, 0x6A40, 0x6A08, 0x69E6, 0x69FB, 0x6A0D,
+    0x69FC, 0x69EB, 0x6A09, 0x6A04, 0x6A18, 0x6A25, 0x6A0F, 0x69F6,
+    0x6A26, 0x6A07, 0x69F4, 0x6A16, 0x6B51, 0x6BA5, 0x6BA3, 0x6BA2,
+    0x6BA6, 0x6C01, 0x6C00, 0x6BFF, 0x6C02, 0x6F41, 0x6F26, 0x6F7E,
+    0x6F87, 0x6FC6, 0x6F92, 0x6F8D, 0x6F89, 0x6F8C, 0x6F62, 0x6F4F,
+    0x6F85, 0x6F5A, 0x6F96, 0x6F76, 0x6F6C, 0x6F82, 0x6F55, 0x6F72,
+    0x6F52, 0x6F50, 0x6F57, 0x6F94, 0x6F93, 0x6F5D, 0x6F00, 0x6F61,
+    0x6F6B, 0x6F7D, 0x6F67, 0x6F90, 0x6F53, 0x6F8B, 0x6F69, 0x6F7F,
+    0x6F95, 0x6F63, 0x6F77, 0x6F6A, 0x6F7B, 0x71B2, 0x71AF, 0x719B,
+    0x71B0, 0x71A0, 0x719A, 0x71A9, 0x71B5, 0x719D, 0x71A5, 0x719E,
+    0x71A4, 0x71A1, 0x71AA, 0x719C, 0x71A7, 0x71B3, 0x7298, 0x729A,
+    0x7358, 0x7352, 0x735E, 0x735F, 0x7360, 0x735D, 0x735B, 0x7361,
+    0x735A, 0x7359, 0x7362, 0x7487, 0x7489, 0x748A, 0x7486, 0x7481,
+    0x747D, 0x7485, 0x7488, 0x747C, 0x7479, 0x7508, 0x7507, 0x757E,
+    0x7625, 0x761E, 0x7619, 0x761D, 0x761C, 0x7623, 0x761A, 0x7628,
+    0x761B, 0x769C, 0x769D, 0x769E, 0x769B, 0x778D, 0x778F, 0x7789,
+    0x7788, 0x78CD, 0x78BB, 0x78CF, 0x78CC, 0x78D1, 0x78CE, 0x78D4,
+    0x78C8, 0x78C3, 0x78C4, 0x78C9, 0x799A, 0x79A1, 0x79A0, 0x799C,
+    0x79A2, 0x799B, 0x6B76, 0x7A39, 0x7AB2, 0x7AB4, 0x7AB3, 0x7BB7,
+    0x7BCB, 0x7BBE, 0x7BAC, 0x7BCE, 0x7BAF, 0x7BB9, 0x7BCA, 0x7BB5,
+    0x7CC5, 0x7CC8, 0x7CCC, 0x7CCB, 0x7DF7, 0x7DDB, 0x7DEA, 0x7DE7,
+    0x7DD7, 0x7DE1, 0x7E03, 0x7DFA, 0x7DE6, 0x7DF6, 0x7DF1, 0x7DF0,
+    0x7DEE, 0x7DDF, 0x7F76, 0x7FAC, 0x7FB0, 0x7FAD, 0x7FED, 0x7FEB,
+    0x7FEA, 0x7FEC, 0x7FE6, 0x7FE8, 0x8064, 0x8067, 0x81A3, 0x819F,
+    0x819E, 0x8195, 0x81A2, 0x8199, 0x8197, 0x8216, 0x824F, 0x8253,
+    0x8252, 0x8250, 0x824E, 0x8251, 0x8524, 0x853B, 0x850F, 0x8500,
+    0x8529, 0x850E, 0x8509, 0x850D, 0x851F, 0x850A, 0x8527, 0x851C,
+    0x84FB, 0x852B, 0x84FA, 0x8508, 0x850C, 0x84F4, 0x852A, 0x84F2,
+    0x8515, 0x84F7, 0x84EB, 0x84F3, 0x84FC, 0x8512, 0x84EA, 0x84E9,
+    0x8516, 0x84FE, 0x8528, 0x851D, 0x852E, 0x8502, 0x84FD, 0x851E,
+    0x84F6, 0x8531, 0x8526, 0x84E7, 0x84E8, 0x84F0, 0x84EF, 0x84F9,
+    0x8518, 0x8520, 0x8530, 0x850B, 0x8519, 0x852F, 0x8662, 0x8756,
+    0x8763, 0x8764, 0x8777, 0x87E1, 0x8773, 0x8758, 0x8754, 0x875B,
+    0x8752, 0x8761, 0x875A, 0x8751, 0x875E, 0x876D, 0x876A, 0x8750,
+    0x874E, 0x875F, 0x875D, 0x876F, 0x876C, 0x877A, 0x876E, 0x875C,
+    0x8765, 0x874F, 0x877B, 0x8775, 0x8762, 0x8767, 0x8769, 0x885A,
+    0x8905, 0x890C, 0x8914, 0x890B, 0x8917, 0x8918, 0x8919, 0x8906,
+    0x8916, 0x8911, 0x890E, 0x8909, 0x89A2, 0x89A4, 0x89A3, 0x89ED,
+    0x89F0, 0x89EC, 0x8ACF, 0x8AC6, 0x8AB8, 0x8AD3, 0x8AD1, 0x8AD4,
+    0x8AD5, 0x8ABB, 0x8AD7, 0x8ABE, 0x8AC0, 0x8AC5, 0x8AD8, 0x8AC3,
+    0x8ABA, 0x8ABD, 0x8AD9, 0x8C3E, 0x8C4D, 0x8C8F, 0x8CE5, 0x8CDF,
+    0x8CD9, 0x8CE8, 0x8CDA, 0x8CDD, 0x8CE7, 0x8DA0, 0x8D9C, 0x8DA1,
+    0x8D9B, 0x8E20, 0x8E23, 0x8E25, 0x8E24, 0x8E2E, 0x8E15, 0x8E1B,
+    0x8E16, 0x8E11, 0x8E19, 0x8E26, 0x8E27, 0x8E14, 0x8E12, 0x8E18,
+    0x8E13, 0x8E1C, 0x8E17, 0x8E1A, 0x8F2C, 0x8F24, 0x8F18, 0x8F1A,
+    0x8F20, 0x8F23, 0x8F16, 0x8F17, 0x9073, 0x9070, 0x906F, 0x9067,
+    0x906B, 0x912F, 0x912B, 0x9129, 0x912A, 0x9132, 0x9126, 0x912E,
+    0x9185, 0x9186, 0x918A, 0x9181, 0x9182, 0x9184, 0x9180, 0x92D0,
+    0x92C3, 0x92C4, 0x92C0, 0x92D9, 0x92B6, 0x92CF, 0x92F1, 0x92DF,
+    0x92D8, 0x92E9, 0x92D7, 0x92DD, 0x92CC, 0x92EF, 0x92C2, 0x92E8,
+    0x92CA, 0x92C8, 0x92CE, 0x92E6, 0x92CD, 0x92D5, 0x92C9, 0x92E0,
+    0x92DE, 0x92E7, 0x92D1, 0x92D3, 0x92B5, 0x92E1, 0x9325, 0x92C6,
+    0x92B4, 0x957C, 0x95AC, 0x95AB, 0x95AE, 0x95B0, 0x96A4, 0x96A2,
+    0x96D3, 0x9705, 0x9708, 0x9702, 0x975A, 0x978A, 0x978E, 0x9788,
+    0x97D0, 0x97CF, 0x981E, 0x981D, 0x9826, 0x9829, 0x9828, 0x9820,
+    0x981B, 0x9827, 0x98B2, 0x9908, 0x98FA, 0x9911, 0x9914, 0x9916,
+    0x9917, 0x9915, 0x99DC, 0x99CD, 0x99CF, 0x99D3, 0x99D4, 0x99CE,
+    0x99C9, 0x99D6, 0x99D8, 0x99CB, 0x99D7, 0x99CC, 0x9AB3, 0x9AEC,
+    0x9AEB, 0x9AF3, 0x9AF2, 0x9AF1, 0x9B46, 0x9B43, 0x9B67, 0x9B74,
+    0x9B71, 0x9B66, 0x9B76, 0x9B75, 0x9B70, 0x9B68, 0x9B64, 0x9B6C,
+    0x9CFC, 0x9CFA, 0x9CFD, 0x9CFF, 0x9CF7, 0x9D07, 0x9D00, 0x9CF9,
+    0x9CFB, 0x9D08, 0x9D05, 0x9D04, 0x9E83, 0x9ED3, 0x9F0F, 0x9F10,
+    0x511C, 0x5113, 0x5117, 0x511A, 0x5111, 0x51DE, 0x5334, 0x53E1,
+    0x5670, 0x5660, 0x566E, 0x5673, 0x5666, 0x5663, 0x566D, 0x5672,
+    0x565E, 0x5677, 0x571C, 0x571B, 0x58C8, 0x58BD, 0x58C9, 0x58BF,
+    0x58BA, 0x58C2, 0x58BC, 0x58C6, 0x5B17, 0x5B19, 0x5B1B, 0x5B21,
+    0x5B14, 0x5B13, 0x5B10, 0x5B16, 0x5B28, 0x5B1A, 0x5B20, 0x5B1E,
+    0x5BEF, 0x5DAC, 0x5DB1, 0x5DA9, 0x5DA7, 0x5DB5, 0x5DB0, 0x5DAE,
+    0x5DAA, 0x5DA8, 0x5DB2, 0x5DAD, 0x5DAF, 0x5DB4, 0x5E67, 0x5E68,
+    0x5E66, 0x5E6F, 0x5EE9, 0x5EE7, 0x5EE6, 0x5EE8, 0x5EE5, 0x5F4B,
+    0x5FBC, 0x5FBB, 0x619D, 0x61A8, 0x6196, 0x61C5, 0x61B4, 0x61C6,
+    0x61C1, 0x61CC, 0x61BA, 0x61BF, 0x61B8, 0x618C, 0x64D7, 0x64D6,
+    0x64D0, 0x64CF, 0x64C9, 0x64BD, 0x6489, 0x64C3, 0x64DB, 0x64F3,
+    0x64D9, 0x6533, 0x657F, 0x657C, 0x65A2, 0x66C8, 0x66BE, 0x66C0,
+    0x66CA, 0x66CB, 0x66CF, 0x66BD, 0x66BB, 0x66BA, 0x66CC, 0x6723,
+    0x6A34, 0x6A66, 0x6A49, 0x6A67, 0x6A32, 0x6A68, 0x6A3E, 0x6A5D,
+    0x6A6D, 0x6A76, 0x6A5B, 0x6A51, 0x6A28, 0x6A5A, 0x6A3B, 0x6A3F,
+    0x6A41, 0x6A6A, 0x6A64, 0x6A50, 0x6A4F, 0x6A54, 0x6A6F, 0x6A69,
+    0x6A60, 0x6A3C, 0x6A5E, 0x6A56, 0x6A55, 0x6A4D, 0x6A4E, 0x6A46,
+    0x6B55, 0x6B54, 0x6B56, 0x6BA7, 0x6BAA, 0x6BAB, 0x6BC8, 0x6BC7,
+    0x6C04, 0x6C03, 0x6C06, 0x6FAD, 0x6FCB, 0x6FA3, 0x6FC7, 0x6FBC,
+    0x6FCE, 0x6FC8, 0x6F5E, 0x6FC4, 0x6FBD, 0x6F9E, 0x6FCA, 0x6FA8,
+    0x7004, 0x6FA5, 0x6FAE, 0x6FBA, 0x6FAC, 0x6FAA, 0x6FCF, 0x6FBF,
+    0x6FB8, 0x6FA2, 0x6FC9, 0x6FAB, 0x6FCD, 0x6FAF, 0x6FB2, 0x6FB0,
+    0x71C5, 0x71C2, 0x71BF, 0x71B8, 0x71D6, 0x71C0, 0x71C1, 0x71CB,
+    0x71D4, 0x71CA, 0x71C7, 0x71CF, 0x71BD, 0x71D8, 0x71BC, 0x71C6,
+    0x71DA, 0x71DB, 0x729D, 0x729E, 0x7369, 0x7366, 0x7367, 0x736C,
+    0x7365, 0x736B, 0x736A, 0x747F, 0x749A, 0x74A0, 0x7494, 0x7492,
+    0x7495, 0x74A1, 0x750B, 0x7580, 0x762F, 0x762D, 0x7631, 0x763D,
+    0x7633, 0x763C, 0x7635, 0x7632, 0x7630, 0x76BB, 0x76E6, 0x779A,
+    0x779D, 0x77A1, 0x779C, 0x779B, 0x77A2, 0x77A3, 0x7795, 0x7799,
+    0x7797, 0x78DD, 0x78E9, 0x78E5, 0x78EA, 0x78DE, 0x78E3, 0x78DB,
+    0x78E1, 0x78E2, 0x78ED, 0x78DF, 0x78E0, 0x79A4, 0x7A44, 0x7A48,
+    0x7A47, 0x7AB6, 0x7AB8, 0x7AB5, 0x7AB1, 0x7AB7, 0x7BDE, 0x7BE3,
+    0x7BE7, 0x7BDD, 0x7BD5, 0x7BE5, 0x7BDA, 0x7BE8, 0x7BF9, 0x7BD4,
+    0x7BEA, 0x7BE2, 0x7BDC, 0x7BEB, 0x7BD8, 0x7BDF, 0x7CD2, 0x7CD4,
+    0x7CD7, 0x7CD0, 0x7CD1, 0x7E12, 0x7E21, 0x7E17, 0x7E0C, 0x7E1F,
+    0x7E20, 0x7E13, 0x7E0E, 0x7E1C, 0x7E15, 0x7E1A, 0x7E22, 0x7E0B,
+    0x7E0F, 0x7E16, 0x7E0D, 0x7E14, 0x7E25, 0x7E24, 0x7F43, 0x7F7B,
+    0x7F7C, 0x7F7A, 0x7FB1, 0x7FEF, 0x802A, 0x8029, 0x806C, 0x81B1,
+    0x81A6, 0x81AE, 0x81B9, 0x81B5, 0x81AB, 0x81B0, 0x81AC, 0x81B4,
+    0x81B2, 0x81B7, 0x81A7, 0x81F2, 0x8255, 0x8256, 0x8257, 0x8556,
+    0x8545, 0x856B, 0x854D, 0x8553, 0x8561, 0x8558, 0x8540, 0x8546,
+    0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, 0x8563, 0x853E,
+    0x855B, 0x8571, 0x854E, 0x856E, 0x8575, 0x8555, 0x8567, 0x8560,
+    0x858C, 0x8566, 0x855D, 0x8554, 0x8565, 0x856C, 0x8663, 0x8665,
+    0x8664, 0x87A4, 0x879B, 0x878F, 0x8797, 0x8793, 0x8792, 0x8788,
+    0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87A3, 0x8785, 0x8790,
+    0x8791, 0x879D, 0x8784, 0x8794, 0x879C, 0x879A, 0x8789, 0x891E,
+    0x8926, 0x8930, 0x892D, 0x892E, 0x8927, 0x8931, 0x8922, 0x8929,
+    0x8923, 0x892F, 0x892C, 0x891F, 0x89F1, 0x8AE0, 0x8AE2, 0x8AF2,
+    0x8AF4, 0x8AF5, 0x8ADD, 0x8B14, 0x8AE4, 0x8ADF, 0x8AF0, 0x8AC8,
+    0x8ADE, 0x8AE1, 0x8AE8, 0x8AFF, 0x8AEF, 0x8AFB, 0x8C91, 0x8C92,
+    0x8C90, 0x8CF5, 0x8CEE, 0x8CF1, 0x8CF0, 0x8CF3, 0x8D6C, 0x8D6E,
+    0x8DA5, 0x8DA7, 0x8E33, 0x8E3E, 0x8E38, 0x8E40, 0x8E45, 0x8E36,
+    0x8E3C, 0x8E3D, 0x8E41, 0x8E30, 0x8E3F, 0x8EBD, 0x8F36, 0x8F2E,
+    0x8F35, 0x8F32, 0x8F39, 0x8F37, 0x8F34, 0x9076, 0x9079, 0x907B,
+    0x9086, 0x90FA, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, 0x9191,
+    0x918D, 0x918F, 0x9327, 0x931E, 0x9308, 0x931F, 0x9306, 0x930F,
+    0x937A, 0x9338, 0x933C, 0x931B, 0x9323, 0x9312, 0x9301, 0x9346,
+    0x932D, 0x930E, 0x930D, 0x92CB, 0x931D, 0x92FA, 0x9313, 0x92F9,
+    0x92F7, 0x9334, 0x9302, 0x9324, 0x92FF, 0x9329, 0x9339, 0x9335,
+    0x932A, 0x9314, 0x930C, 0x930B, 0x92FE, 0x9309, 0x9300, 0x92FB,
+    0x9316, 0x95BC, 0x95CD, 0x95BE, 0x95B9, 0x95BA, 0x95B6, 0x95BF,
+    0x95B5, 0x95BD, 0x96A9, 0x96D4, 0x970B, 0x9712, 0x9710, 0x9799,
+    0x9797, 0x9794, 0x97F0, 0x97F8, 0x9835, 0x982F, 0x9832, 0x9924,
+    0x991F, 0x9927, 0x9929, 0x999E, 0x99EE, 0x99EC, 0x99E5, 0x99E4,
+    0x99F0, 0x99E3, 0x99EA, 0x99E9, 0x99E7, 0x9AB9, 0x9ABF, 0x9AB4,
+    0x9ABB, 0x9AF6, 0x9AFA, 0x9AF9, 0x9AF7, 0x9B33, 0x9B80, 0x9B85,
+    0x9B87, 0x9B7C, 0x9B7E, 0x9B7B, 0x9B82, 0x9B93, 0x9B92, 0x9B90,
+    0x9B7A, 0x9B95, 0x9B7D, 0x9B88, 0x9D25, 0x9D17, 0x9D20, 0x9D1E,
+    0x9D14, 0x9D29, 0x9D1D, 0x9D18, 0x9D22, 0x9D10, 0x9D19, 0x9D1F,
+    0x9E88, 0x9E86, 0x9E87, 0x9EAE, 0x9EAD, 0x9ED5, 0x9ED6, 0x9EFA,
+    0x9F12, 0x9F3D, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129,
+    0x52F4, 0x5693, 0x568C, 0x568D, 0x5686, 0x5684, 0x5683, 0x567E,
+    0x5682, 0x567F, 0x5681, 0x58D6, 0x58D4, 0x58CF, 0x58D2, 0x5B2D,
+    0x5B25, 0x5B32, 0x5B23, 0x5B2C, 0x5B27, 0x5B26, 0x5B2F, 0x5B2E,
+    0x5B7B, 0x5BF1, 0x5BF2, 0x5DB7, 0x5E6C, 0x5E6A, 0x5FBE, 0x61C3,
+    0x61B5, 0x61BC, 0x61E7, 0x61E0, 0x61E5, 0x61E4, 0x61E8, 0x61DE,
+    0x64EF, 0x64E9, 0x64E3, 0x64EB, 0x64E4, 0x64E8, 0x6581, 0x6580,
+    0x65B6, 0x65DA, 0x66D2, 0x6A8D, 0x6A96, 0x6A81, 0x6AA5, 0x6A89,
+    0x6A9F, 0x6A9B, 0x6AA1, 0x6A9E, 0x6A87, 0x6A93, 0x6A8E, 0x6A95,
+    0x6A83, 0x6AA8, 0x6AA4, 0x6A91, 0x6A7F, 0x6AA6, 0x6A9A, 0x6A85,
+    0x6A8C, 0x6A92, 0x6B5B, 0x6BAD, 0x6C09, 0x6FCC, 0x6FA9, 0x6FF4,
+    0x6FD4, 0x6FE3, 0x6FDC, 0x6FED, 0x6FE7, 0x6FE6, 0x6FDE, 0x6FF2,
+    0x6FDD, 0x6FE2, 0x6FE8, 0x71E1, 0x71F1, 0x71E8, 0x71F2, 0x71E4,
+    0x71F0, 0x71E2, 0x7373, 0x736E, 0x736F, 0x7497, 0x74B2, 0x74AB,
+    0x7490, 0x74AA, 0x74AD, 0x74B1, 0x74A5, 0x74AF, 0x7510, 0x7511,
+    0x7512, 0x750F, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, 0x76A4,
+    0x76E9, 0x77B5, 0x77AB, 0x77B2, 0x77B7, 0x77B6, 0x77B4, 0x77B1,
+    0x77A8, 0x77F0, 0x78F3, 0x78FD, 0x7902, 0x78FB, 0x78FC, 0x78FF,
+    0x78F2, 0x7905, 0x78F9, 0x78FE, 0x7904, 0x79AB, 0x79A8, 0x7A5C,
+    0x7A5B, 0x7A56, 0x7A58, 0x7A54, 0x7A5A, 0x7ABE, 0x7AC0, 0x7AC1,
+    0x7C05, 0x7C0F, 0x7BF2, 0x7C00, 0x7BFF, 0x7BFB, 0x7C0E, 0x7BF4,
+    0x7C0B, 0x7BF3, 0x7C02, 0x7C09, 0x7C03, 0x7C01, 0x7BF8, 0x7BFD,
+    0x7C06, 0x7BF0, 0x7BF1, 0x7C10, 0x7C0A, 0x7CE8, 0x7E2D, 0x7E3C,
+    0x7E42, 0x7E33, 0x9848, 0x7E38, 0x7E2A, 0x7E49, 0x7E40, 0x7E47,
+    0x7E29, 0x7E4C, 0x7E30, 0x7E3B, 0x7E36, 0x7E44, 0x7E3A, 0x7F45,
+    0x7F7F, 0x7F7E, 0x7F7D, 0x7FF4, 0x7FF2, 0x802C, 0x81BB, 0x81C4,
+    0x81CC, 0x81CA, 0x81C5, 0x81C7, 0x81BC, 0x81E9, 0x825B, 0x825A,
+    0x825C, 0x8583, 0x8580, 0x858F, 0x85A7, 0x8595, 0x85A0, 0x858B,
+    0x85A3, 0x857B, 0x85A4, 0x859A, 0x859E, 0x8577, 0x857C, 0x8589,
+    0x85A1, 0x857A, 0x8578, 0x8557, 0x858E, 0x8596, 0x8586, 0x858D,
+    0x8599, 0x859D, 0x8581, 0x85A2, 0x8582, 0x8588, 0x8585, 0x8579,
+    0x8576, 0x8598, 0x8590, 0x859F, 0x8668, 0x87BE, 0x87AA, 0x87AD,
+    0x87C5, 0x87B0, 0x87AC, 0x87B9, 0x87B5, 0x87BC, 0x87AE, 0x87C9,
+    0x87C3, 0x87C2, 0x87CC, 0x87B7, 0x87AF, 0x87C4, 0x87CA, 0x87B4,
+    0x87B6, 0x87BF, 0x87B8, 0x87BD, 0x87DE, 0x87B2, 0x8935, 0x8933,
+    0x893C, 0x893E, 0x8941, 0x8952, 0x8937, 0x8942, 0x89AD, 0x89AF,
+    0x89AE, 0x89F2, 0x89F3, 0x8B1E, 0x8B18, 0x8B16, 0x8B11, 0x8B05,
+    0x8B0B, 0x8B22, 0x8B0F, 0x8B12, 0x8B15, 0x8B07, 0x8B0D, 0x8B08,
+    0x8B06, 0x8B1C, 0x8B13, 0x8B1A, 0x8C4F, 0x8C70, 0x8C72, 0x8C71,
+    0x8C6F, 0x8C95, 0x8C94, 0x8CF9, 0x8D6F, 0x8E4E, 0x8E4D, 0x8E53,
+    0x8E50, 0x8E4C, 0x8E47, 0x8F43, 0x8F40, 0x9085, 0x907E, 0x9138,
+    0x919A, 0x91A2, 0x919B, 0x9199, 0x919F, 0x91A1, 0x919D, 0x91A0,
+    0x93A1, 0x9383, 0x93AF, 0x9364, 0x9356, 0x9347, 0x937C, 0x9358,
+    0x935C, 0x9376, 0x9349, 0x9350, 0x9351, 0x9360, 0x936D, 0x938F,
+    0x934C, 0x936A, 0x9379, 0x9357, 0x9355, 0x9352, 0x934F, 0x9371,
+    0x9377, 0x937B, 0x9361, 0x935E, 0x9363, 0x9367, 0x934E, 0x9359,
+    0x95C7, 0x95C0, 0x95C9, 0x95C3, 0x95C5, 0x95B7, 0x96AE, 0x96B0,
+    0x96AC, 0x9720, 0x971F, 0x9718, 0x971D, 0x9719, 0x979A, 0x97A1,
+    0x979C, 0x979E, 0x979D, 0x97D5, 0x97D4, 0x97F1, 0x9841, 0x9844,
+    0x984A, 0x9849, 0x9845, 0x9843, 0x9925, 0x992B, 0x992C, 0x992A,
+    0x9933, 0x9932, 0x992F, 0x992D, 0x9931, 0x9930, 0x9998, 0x99A3,
+    0x99A1, 0x9A02, 0x99FA, 0x99F4, 0x99F7, 0x99F9, 0x99F8, 0x99F6,
+    0x99FB, 0x99FD, 0x99FE, 0x99FC, 0x9A03, 0x9ABE, 0x9AFE, 0x9AFD,
+    0x9B01, 0x9AFC, 0x9B48, 0x9B9A, 0x9BA8, 0x9B9E, 0x9B9B, 0x9BA6,
+    0x9BA1, 0x9BA5, 0x9BA4, 0x9B86, 0x9BA2, 0x9BA0, 0x9BAF, 0x9D33,
+    0x9D41, 0x9D67, 0x9D36, 0x9D2E, 0x9D2F, 0x9D31, 0x9D38, 0x9D30,
+    0x9D45, 0x9D42, 0x9D43, 0x9D3E, 0x9D37, 0x9D40, 0x9D3D, 0x7FF5,
+    0x9D2D, 0x9E8A, 0x9E89, 0x9E8D, 0x9EB0, 0x9EC8, 0x9EDA, 0x9EFB,
+    0x9EFF, 0x9F24, 0x9F23, 0x9F22, 0x9F54, 0x9FA0, 0x5131, 0x512D,
+    0x512E, 0x5698, 0x569C, 0x5697, 0x569A, 0x569D, 0x5699, 0x5970,
+    0x5B3C, 0x5C69, 0x5C6A, 0x5DC0, 0x5E6D, 0x5E6E, 0x61D8, 0x61DF,
+    0x61ED, 0x61EE, 0x61F1, 0x61EA, 0x61F0, 0x61EB, 0x61D6, 0x61E9,
+    0x64FF, 0x6504, 0x64FD, 0x64F8, 0x6501, 0x6503, 0x64FC, 0x6594,
+    0x65DB, 0x66DA, 0x66DB, 0x66D8, 0x6AC5, 0x6AB9, 0x6ABD, 0x6AE1,
+    0x6AC6, 0x6ABA, 0x6AB6, 0x6AB7, 0x6AC7, 0x6AB4, 0x6AAD, 0x6B5E,
+    0x6BC9, 0x6C0B, 0x7007, 0x700C, 0x700D, 0x7001, 0x7005, 0x7014,
+    0x700E, 0x6FFF, 0x7000, 0x6FFB, 0x7026, 0x6FFC, 0x6FF7, 0x700A,
+    0x7201, 0x71FF, 0x71F9, 0x7203, 0x71FD, 0x7376, 0x74B8, 0x74C0,
+    0x74B5, 0x74C1, 0x74BE, 0x74B6, 0x74BB, 0x74C2, 0x7514, 0x7513,
+    0x765C, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, 0x765A, 0x76A6,
+    0x76BD, 0x76EC, 0x77C2, 0x77BA, 0x790C, 0x7913, 0x7914, 0x7909,
+    0x7910, 0x7912, 0x7911, 0x79AD, 0x79AC, 0x7A5F, 0x7C1C, 0x7C29,
+    0x7C19, 0x7C20, 0x7C1F, 0x7C2D, 0x7C1D, 0x7C26, 0x7C28, 0x7C22,
+    0x7C25, 0x7C30, 0x7E5C, 0x7E50, 0x7E56, 0x7E63, 0x7E58, 0x7E62,
+    0x7E5F, 0x7E51, 0x7E60, 0x7E57, 0x7E53, 0x7FB5, 0x7FB3, 0x7FF7,
+    0x7FF8, 0x8075, 0x81D1, 0x81D2, 0x81D0, 0x825F, 0x825E, 0x85B4,
+    0x85C6, 0x85C0, 0x85C3, 0x85C2, 0x85B3, 0x85B5, 0x85BD, 0x85C7,
+    0x85C4, 0x85BF, 0x85CB, 0x85CE, 0x85C8, 0x85C5, 0x85B1, 0x85B6,
+    0x85D2, 0x8624, 0x85B8, 0x85B7, 0x85BE, 0x8669, 0x87E7, 0x87E6,
+    0x87E2, 0x87DB, 0x87EB, 0x87EA, 0x87E5, 0x87DF, 0x87F3, 0x87E4,
+    0x87D4, 0x87DC, 0x87D3, 0x87ED, 0x87D8, 0x87E3, 0x87D7, 0x87D9,
+    0x8801, 0x87F4, 0x87E8, 0x87DD, 0x8953, 0x894B, 0x894F, 0x894C,
+    0x8946, 0x8950, 0x8951, 0x8949, 0x8B2A, 0x8B27, 0x8B23, 0x8B33,
+    0x8B30, 0x8B35, 0x8B47, 0x8B2F, 0x8B3C, 0x8B3E, 0x8B31, 0x8B25,
+    0x8B37, 0x8B26, 0x8B36, 0x8B2E, 0x8B24, 0x8B3B, 0x8B3D, 0x8B3A,
+    0x8C42, 0x8C75, 0x8C99, 0x8C98, 0x8C97, 0x8CFE, 0x8D04, 0x8D02,
+    0x8D00, 0x8E5C, 0x8E62, 0x8E60, 0x8E57, 0x8E56, 0x8E5E, 0x8E65,
+    0x8E67, 0x8E5B, 0x8E5A, 0x8E61, 0x8E5D, 0x8E69, 0x8E54, 0x8F46,
+    0x8F47, 0x8F48, 0x8F4B, 0x9128, 0x913A, 0x913B, 0x913E, 0x91A8,
+    0x91A5, 0x91A7, 0x91AF, 0x91AA, 0x93B5, 0x938C, 0x9392, 0x93B7,
+    0x939B, 0x939D, 0x9389, 0x93A7, 0x938E, 0x93AA, 0x939E, 0x93A6,
+    0x9395, 0x9388, 0x9399, 0x939F, 0x9380, 0x938D, 0x93B1, 0x9391,
+    0x93B2, 0x93A4, 0x93A8, 0x93B4, 0x93A3, 0x95D2, 0x95D3, 0x95D1,
+    0x96B3, 0x96D7, 0x96DA, 0x5DC2, 0x96DF, 0x96D8, 0x96DD, 0x9723,
+    0x9722, 0x9725, 0x97AC, 0x97AE, 0x97A8, 0x97AB, 0x97A4, 0x97AA,
+    0x97A2, 0x97A5, 0x97D7, 0x97D9, 0x97D6, 0x97D8, 0x97FA, 0x9850,
+    0x9851, 0x9852, 0x98B8, 0x9941, 0x993C, 0x993A, 0x9A0F, 0x9A0B,
+    0x9A09, 0x9A0D, 0x9A04, 0x9A11, 0x9A0A, 0x9A05, 0x9A07, 0x9A06,
+    0x9AC0, 0x9ADC, 0x9B08, 0x9B04, 0x9B05, 0x9B29, 0x9B35, 0x9B4A,
+    0x9B4C, 0x9B4B, 0x9BC7, 0x9BC6, 0x9BC3, 0x9BBF, 0x9BC1, 0x9BB5,
+    0x9BB8, 0x9BD3, 0x9BB6, 0x9BC4, 0x9BB9, 0x9BBD, 0x9D5C, 0x9D53,
+    0x9D4F, 0x9D4A, 0x9D5B, 0x9D4B, 0x9D59, 0x9D56, 0x9D4C, 0x9D57,
+    0x9D52, 0x9D54, 0x9D5F, 0x9D58, 0x9D5A, 0x9E8E, 0x9E8C, 0x9EDF,
+    0x9F01, 0x9F00, 0x9F16, 0x9F25, 0x9F2B, 0x9F2A, 0x9F29, 0x9F28,
+    0x9F4C, 0x9F55, 0x5134, 0x5135, 0x5296, 0x52F7, 0x53B4, 0x56AB,
+    0x56AD, 0x56A6, 0x56A7, 0x56AA, 0x56AC, 0x58DA, 0x58DD, 0x58DB,
+    0x5912, 0x5B3D, 0x5B3E, 0x5B3F, 0x5DC3, 0x5E70, 0x5FBF, 0x61FB,
+    0x6507, 0x6510, 0x650D, 0x6509, 0x650C, 0x650E, 0x6584, 0x65DE,
+    0x65DD, 0x66DE, 0x6AE7, 0x6AE0, 0x6ACC, 0x6AD1, 0x6AD9, 0x6ACB,
+    0x6ADF, 0x6ADC, 0x6AD0, 0x6AEB, 0x6ACF, 0x6ACD, 0x6ADE, 0x6B60,
+    0x6BB0, 0x6C0C, 0x7019, 0x7027, 0x7020, 0x7016, 0x702B, 0x7021,
+    0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701C, 0x720C, 0x720A,
+    0x7207, 0x7202, 0x7205, 0x72A5, 0x72A6, 0x72A4, 0x72A3, 0x72A1,
+    0x74CB, 0x74C5, 0x74B7, 0x74C3, 0x7516, 0x7660, 0x77C9, 0x77CA,
+    0x77C4, 0x77F1, 0x791D, 0x791B, 0x7921, 0x791C, 0x7917, 0x791E,
+    0x79B0, 0x7A67, 0x7A68, 0x7C33, 0x7C3C, 0x7C39, 0x7C2C, 0x7C3B,
+    0x7CEC, 0x7CEA, 0x7E76, 0x7E75, 0x7E78, 0x7E70, 0x7E77, 0x7E6F,
+    0x7E7A, 0x7E72, 0x7E74, 0x7E68, 0x7F4B, 0x7F4A, 0x7F83, 0x7F86,
+    0x7FB7, 0x7FFD, 0x7FFE, 0x8078, 0x81D7, 0x81D5, 0x820B, 0x8264,
+    0x8261, 0x8263, 0x85EB, 0x85F1, 0x85ED, 0x85D9, 0x85E1, 0x85E8,
+    0x85DA, 0x85D7, 0x85EC, 0x85F2, 0x85F8, 0x85D8, 0x85DF, 0x85E3,
+    0x85DC, 0x85D1, 0x85F0, 0x85E6, 0x85EF, 0x85DE, 0x85E2, 0x8800,
+    0x87FA, 0x8803, 0x87F6, 0x87F7, 0x8809, 0x880C, 0x880B, 0x8806,
+    0x87FC, 0x8808, 0x87FF, 0x880A, 0x8802, 0x8962, 0x895A, 0x895B,
+    0x8957, 0x8961, 0x895C, 0x8958, 0x895D, 0x8959, 0x8988, 0x89B7,
+    0x89B6, 0x89F6, 0x8B50, 0x8B48, 0x8B4A, 0x8B40, 0x8B53, 0x8B56,
+    0x8B54, 0x8B4B, 0x8B55, 0x8B51, 0x8B42, 0x8B52, 0x8B57, 0x8C43,
+    0x8C77, 0x8C76, 0x8C9A, 0x8D06, 0x8D07, 0x8D09, 0x8DAC, 0x8DAA,
+    0x8DAD, 0x8DAB, 0x8E6D, 0x8E78, 0x8E73, 0x8E6A, 0x8E6F, 0x8E7B,
+    0x8EC2, 0x8F52, 0x8F51, 0x8F4F, 0x8F50, 0x8F53, 0x8FB4, 0x9140,
+    0x913F, 0x91B0, 0x91AD, 0x93DE, 0x93C7, 0x93CF, 0x93C2, 0x93DA,
+    0x93D0, 0x93F9, 0x93EC, 0x93CC, 0x93D9, 0x93A9, 0x93E6, 0x93CA,
+    0x93D4, 0x93EE, 0x93E3, 0x93D5, 0x93C4, 0x93CE, 0x93C0, 0x93D2,
+    0x93A5, 0x93E7, 0x957D, 0x95DA, 0x95DB, 0x96E1, 0x9729, 0x972B,
+    0x972C, 0x9728, 0x9726, 0x97B3, 0x97B7, 0x97B6, 0x97DD, 0x97DE,
+    0x97DF, 0x985C, 0x9859, 0x985D, 0x9857, 0x98BF, 0x98BD, 0x98BB,
+    0x98BE, 0x9948, 0x9947, 0x9943, 0x99A6, 0x99A7, 0x9A1A, 0x9A15,
+    0x9A25, 0x9A1D, 0x9A24, 0x9A1B, 0x9A22, 0x9A20, 0x9A27, 0x9A23,
+    0x9A1E, 0x9A1C, 0x9A14, 0x9AC2, 0x9B0B, 0x9B0A, 0x9B0E, 0x9B0C,
+    0x9B37, 0x9BEA, 0x9BEB, 0x9BE0, 0x9BDE, 0x9BE4, 0x9BE6, 0x9BE2,
+    0x9BF0, 0x9BD4, 0x9BD7, 0x9BEC, 0x9BDC, 0x9BD9, 0x9BE5, 0x9BD5,
+    0x9BE1, 0x9BDA, 0x9D77, 0x9D81, 0x9D8A, 0x9D84, 0x9D88, 0x9D71,
+    0x9D80, 0x9D78, 0x9D86, 0x9D8B, 0x9D8C, 0x9D7D, 0x9D6B, 0x9D74,
+    0x9D75, 0x9D70, 0x9D69, 0x9D85, 0x9D73, 0x9D7B, 0x9D82, 0x9D6F,
+    0x9D79, 0x9D7F, 0x9D87, 0x9D68, 0x9E94, 0x9E91, 0x9EC0, 0x9EFC,
+    0x9F2D, 0x9F40, 0x9F41, 0x9F4D, 0x9F56, 0x9F57, 0x9F58, 0x5337,
+    0x56B2, 0x56B5, 0x56B3, 0x58E3, 0x5B45, 0x5DC6, 0x5DC7, 0x5EEE,
+    0x5EEF, 0x5FC0, 0x5FC1, 0x61F9, 0x6517, 0x6516, 0x6515, 0x6513,
+    0x65DF, 0x66E8, 0x66E3, 0x66E4, 0x6AF3, 0x6AF0, 0x6AEA, 0x6AE8,
+    0x6AF9, 0x6AF1, 0x6AEE, 0x6AEF, 0x703C, 0x7035, 0x702F, 0x7037,
+    0x7034, 0x7031, 0x7042, 0x7038, 0x703F, 0x703A, 0x7039, 0x702A,
+    0x7040, 0x703B, 0x7033, 0x7041, 0x7213, 0x7214, 0x72A8, 0x737D,
+    0x737C, 0x74BA, 0x76AB, 0x76AA, 0x76BE, 0x76ED, 0x77CC, 0x77CE,
+    0x77CF, 0x77CD, 0x77F2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924,
+    0x7929, 0x79B2, 0x7A6E, 0x7A6C, 0x7A6D, 0x7AF7, 0x7C49, 0x7C48,
+    0x7C4A, 0x7C47, 0x7C45, 0x7CEE, 0x7E7B, 0x7E7E, 0x7E81, 0x7E80,
+    0x7FBA, 0x7FFF, 0x8079, 0x81DB, 0x81D9, 0x8268, 0x8269, 0x8622,
+    0x85FF, 0x8601, 0x85FE, 0x861B, 0x8600, 0x85F6, 0x8604, 0x8609,
+    0x8605, 0x860C, 0x85FD, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813,
+    0x8816, 0x8963, 0x8966, 0x89B9, 0x89F7, 0x8B60, 0x8B6A, 0x8B5D,
+    0x8B68, 0x8B63, 0x8B65, 0x8B67, 0x8B6D, 0x8DAE, 0x8E86, 0x8E88,
+    0x8E84, 0x8F59, 0x8F56, 0x8F57, 0x8F55, 0x8F58, 0x8F5A, 0x908D,
+    0x9143, 0x9141, 0x91B7, 0x91B5, 0x91B2, 0x91B3, 0x940B, 0x9413,
+    0x93FB, 0x9420, 0x940F, 0x9414, 0x93FE, 0x9415, 0x9410, 0x9428,
+    0x9419, 0x940D, 0x93F5, 0x9400, 0x93F7, 0x9407, 0x940E, 0x9416,
+    0x9412, 0x93FA, 0x9409, 0x93F8, 0x943C, 0x940A, 0x93FF, 0x93FC,
+    0x940C, 0x93F6, 0x9411, 0x9406, 0x95DE, 0x95E0, 0x95DF, 0x972E,
+    0x972F, 0x97B9, 0x97BB, 0x97FD, 0x97FE, 0x9860, 0x9862, 0x9863,
+    0x985F, 0x98C1, 0x98C2, 0x9950, 0x994E, 0x9959, 0x994C, 0x994B,
+    0x9953, 0x9A32, 0x9A34, 0x9A31, 0x9A2C, 0x9A2A, 0x9A36, 0x9A29,
+    0x9A2E, 0x9A38, 0x9A2D, 0x9AC7, 0x9ACA, 0x9AC6, 0x9B10, 0x9B12,
+    0x9B11, 0x9C0B, 0x9C08, 0x9BF7, 0x9C05, 0x9C12, 0x9BF8, 0x9C40,
+    0x9C07, 0x9C0E, 0x9C06, 0x9C17, 0x9C14, 0x9C09, 0x9D9F, 0x9D99,
+    0x9DA4, 0x9D9D, 0x9D92, 0x9D98, 0x9D90, 0x9D9B, 0x9DA0, 0x9D94,
+    0x9D9C, 0x9DAA, 0x9D97, 0x9DA1, 0x9D9A, 0x9DA2, 0x9DA8, 0x9D9E,
+    0x9DA3, 0x9DBF, 0x9DA9, 0x9D96, 0x9DA6, 0x9DA7, 0x9E99, 0x9E9B,
+    0x9E9A, 0x9EE5, 0x9EE4, 0x9EE7, 0x9EE6, 0x9F30, 0x9F2E, 0x9F5B,
+    0x9F60, 0x9F5E, 0x9F5D, 0x9F59, 0x9F91, 0x513A, 0x5139, 0x5298,
+    0x5297, 0x56C3, 0x56BD, 0x56BE, 0x5B48, 0x5B47, 0x5DCB, 0x5DCF,
+    0x5EF1, 0x61FD, 0x651B, 0x6B02, 0x6AFC, 0x6B03, 0x6AF8, 0x6B00,
+    0x7043, 0x7044, 0x704A, 0x7048, 0x7049, 0x7045, 0x7046, 0x721D,
+    0x721A, 0x7219, 0x737E, 0x7517, 0x766A, 0x77D0, 0x792D, 0x7931,
+    0x792F, 0x7C54, 0x7C53, 0x7CF2, 0x7E8A, 0x7E87, 0x7E88, 0x7E8B,
+    0x7E86, 0x7E8D, 0x7F4D, 0x7FBB, 0x8030, 0x81DD, 0x8618, 0x862A,
+    0x8626, 0x861F, 0x8623, 0x861C, 0x8619, 0x8627, 0x862E, 0x8621,
+    0x8620, 0x8629, 0x861E, 0x8625, 0x8829, 0x881D, 0x881B, 0x8820,
+    0x8824, 0x881C, 0x882B, 0x884A, 0x896D, 0x8969, 0x896E, 0x896B,
+    0x89FA, 0x8B79, 0x8B78, 0x8B45, 0x8B7A, 0x8B7B, 0x8D10, 0x8D14,
+    0x8DAF, 0x8E8E, 0x8E8C, 0x8F5E, 0x8F5B, 0x8F5D, 0x9146, 0x9144,
+    0x9145, 0x91B9, 0x943F, 0x943B, 0x9436, 0x9429, 0x943D, 0x9430,
+    0x9439, 0x942A, 0x9437, 0x942C, 0x9440, 0x9431, 0x95E5, 0x95E4,
+    0x95E3, 0x9735, 0x973A, 0x97BF, 0x97E1, 0x9864, 0x98C9, 0x98C6,
+    0x98C0, 0x9958, 0x9956, 0x9A39, 0x9A3D, 0x9A46, 0x9A44, 0x9A42,
+    0x9A41, 0x9A3A, 0x9A3F, 0x9ACD, 0x9B15, 0x9B17, 0x9B18, 0x9B16,
+    0x9B3A, 0x9B52, 0x9C2B, 0x9C1D, 0x9C1C, 0x9C2C, 0x9C23, 0x9C28,
+    0x9C29, 0x9C24, 0x9C21, 0x9DB7, 0x9DB6, 0x9DBC, 0x9DC1, 0x9DC7,
+    0x9DCA, 0x9DCF, 0x9DBE, 0x9DC5, 0x9DC3, 0x9DBB, 0x9DB5, 0x9DCE,
+    0x9DB9, 0x9DBA, 0x9DAC, 0x9DC8, 0x9DB1, 0x9DAD, 0x9DCC, 0x9DB3,
+    0x9DCD, 0x9DB2, 0x9E7A, 0x9E9C, 0x9EEB, 0x9EEE, 0x9EED, 0x9F1B,
+    0x9F18, 0x9F1A, 0x9F31, 0x9F4E, 0x9F65, 0x9F64, 0x9F92, 0x4EB9,
+    0x56C6, 0x56C5, 0x56CB, 0x5971, 0x5B4B, 0x5B4C, 0x5DD5, 0x5DD1,
+    0x5EF2, 0x6521, 0x6520, 0x6526, 0x6522, 0x6B0B, 0x6B08, 0x6B09,
+    0x6C0D, 0x7055, 0x7056, 0x7057, 0x7052, 0x721E, 0x721F, 0x72A9,
+    0x737F, 0x74D8, 0x74D5, 0x74D9, 0x74D7, 0x766D, 0x76AD, 0x7935,
+    0x79B4, 0x7A70, 0x7A71, 0x7C57, 0x7C5C, 0x7C59, 0x7C5B, 0x7C5A,
+    0x7CF4, 0x7CF1, 0x7E91, 0x7F4F, 0x7F87, 0x81DE, 0x826B, 0x8634,
+    0x8635, 0x8633, 0x862C, 0x8632, 0x8636, 0x882C, 0x8828, 0x8826,
+    0x882A, 0x8825, 0x8971, 0x89BF, 0x89BE, 0x89FB, 0x8B7E, 0x8B84,
+    0x8B82, 0x8B86, 0x8B85, 0x8B7F, 0x8D15, 0x8E95, 0x8E94, 0x8E9A,
+    0x8E92, 0x8E90, 0x8E96, 0x8E97, 0x8F60, 0x8F62, 0x9147, 0x944C,
+    0x9450, 0x944A, 0x944B, 0x944F, 0x9447, 0x9445, 0x9448, 0x9449,
+    0x9446, 0x973F, 0x97E3, 0x986A, 0x9869, 0x98CB, 0x9954, 0x995B,
+    0x9A4E, 0x9A53, 0x9A54, 0x9A4C, 0x9A4F, 0x9A48, 0x9A4A, 0x9A49,
+    0x9A52, 0x9A50, 0x9AD0, 0x9B19, 0x9B2B, 0x9B3B, 0x9B56, 0x9B55,
+    0x9C46, 0x9C48, 0x9C3F, 0x9C44, 0x9C39, 0x9C33, 0x9C41, 0x9C3C,
+    0x9C37, 0x9C34, 0x9C32, 0x9C3D, 0x9C36, 0x9DDB, 0x9DD2, 0x9DDE,
+    0x9DDA, 0x9DCB, 0x9DD0, 0x9DDC, 0x9DD1, 0x9DDF, 0x9DE9, 0x9DD9,
+    0x9DD8, 0x9DD6, 0x9DF5, 0x9DD5, 0x9DDD, 0x9EB6, 0x9EF0, 0x9F35,
+    0x9F33, 0x9F32, 0x9F42, 0x9F6B, 0x9F95, 0x9FA2, 0x513D, 0x5299,
+    0x58E8, 0x58E7, 0x5972, 0x5B4D, 0x5DD8, 0x882F, 0x5F4F, 0x6201,
+    0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66EB, 0x6B11, 0x6B12,
+    0x6B0F, 0x6BCA, 0x705B, 0x705A, 0x7222, 0x7382, 0x7381, 0x7383,
+    0x7670, 0x77D4, 0x7C67, 0x7C66, 0x7E95, 0x826C, 0x863A, 0x8640,
+    0x8639, 0x863C, 0x8631, 0x863B, 0x863E, 0x8830, 0x8832, 0x882E,
+    0x8833, 0x8976, 0x8974, 0x8973, 0x89FE, 0x8B8C, 0x8B8E, 0x8B8B,
+    0x8B88, 0x8C45, 0x8D19, 0x8E98, 0x8F64, 0x8F63, 0x91BC, 0x9462,
+    0x9455, 0x945D, 0x9457, 0x945E, 0x97C4, 0x97C5, 0x9800, 0x9A56,
+    0x9A59, 0x9B1E, 0x9B1F, 0x9B20, 0x9C52, 0x9C58, 0x9C50, 0x9C4A,
+    0x9C4D, 0x9C4B, 0x9C55, 0x9C59, 0x9C4C, 0x9C4E, 0x9DFB, 0x9DF7,
+    0x9DEF, 0x9DE3, 0x9DEB, 0x9DF8, 0x9DE4, 0x9DF6, 0x9DE1, 0x9DEE,
+    0x9DE6, 0x9DF2, 0x9DF0, 0x9DE2, 0x9DEC, 0x9DF4, 0x9DF3, 0x9DE8,
+    0x9DED, 0x9EC2, 0x9ED0, 0x9EF2, 0x9EF3, 0x9F06, 0x9F1C, 0x9F38,
+    0x9F37, 0x9F36, 0x9F43, 0x9F4F, 0x9F71, 0x9F70, 0x9F6E, 0x9F6F,
+    0x56D3, 0x56CD, 0x5B4E, 0x5C6D, 0x652D, 0x66ED, 0x66EE, 0x6B13,
+    0x705F, 0x7061, 0x705D, 0x7060, 0x7223, 0x74DB, 0x74E5, 0x77D5,
+    0x7938, 0x79B7, 0x79B6, 0x7C6A, 0x7E97, 0x7F89, 0x826D, 0x8643,
+    0x8838, 0x8837, 0x8835, 0x884B, 0x8B94, 0x8B95, 0x8E9E, 0x8E9F,
+    0x8EA0, 0x8E9D, 0x91BE, 0x91BD, 0x91C2, 0x946B, 0x9468, 0x9469,
+    0x96E5, 0x9746, 0x9743, 0x9747, 0x97C7, 0x97E5, 0x9A5E, 0x9AD5,
+    0x9B59, 0x9C63, 0x9C67, 0x9C66, 0x9C62, 0x9C5E, 0x9C60, 0x9E02,
+    0x9DFE, 0x9E07, 0x9E03, 0x9E06, 0x9E05, 0x9E00, 0x9E01, 0x9E09,
+    0x9DFF, 0x9DFD, 0x9E04, 0x9EA0, 0x9F1E, 0x9F46, 0x9F74, 0x9F75,
+    0x9F76, 0x56D4, 0x652E, 0x65B8, 0x6B18, 0x6B19, 0x6B17, 0x6B1A,
+    0x7062, 0x7226, 0x72AA, 0x77D8, 0x77D9, 0x7939, 0x7C69, 0x7C6B,
+    0x7CF6, 0x7E9A, 0x7E98, 0x7E9B, 0x7E99, 0x81E0, 0x81E1, 0x8646,
+    0x8647, 0x8648, 0x8979, 0x897A, 0x897C, 0x897B, 0x89FF, 0x8B98,
+    0x8B99, 0x8EA5, 0x8EA4, 0x8EA3, 0x946E, 0x946D, 0x946F, 0x9471,
+    0x9473, 0x9749, 0x9872, 0x995F, 0x9C68, 0x9C6E, 0x9C6D, 0x9E0B,
+    0x9E0D, 0x9E10, 0x9E0F, 0x9E12, 0x9E11, 0x9EA1, 0x9EF5, 0x9F09,
+    0x9F47, 0x9F78, 0x9F7B, 0x9F7A, 0x9F79, 0x571E, 0x7066, 0x7C6F,
+    0x883C, 0x8DB2, 0x8EA6, 0x91C3, 0x9474, 0x9478, 0x9476, 0x9475,
+    0x9A60, 0x9B2E, 0x9C74, 0x9C73, 0x9C71, 0x9C75, 0x9E14, 0x9E13,
+    0x9EF6, 0x9F0A, 0x9FA4, 0x7068, 0x7065, 0x7CF7, 0x866A, 0x883E,
+    0x883D, 0x883F, 0x8B9E, 0x8C9C, 0x8EA9, 0x8EC9, 0x974B, 0x9873,
+    0x9874, 0x98CC, 0x9961, 0x99AB, 0x9A64, 0x9A66, 0x9A67, 0x9B24,
+    0x9E15, 0x9E17, 0x9F48, 0x6207, 0x6B1E, 0x7227, 0x864C, 0x8EA8,
+    0x9482, 0x9480, 0x9481, 0x9A69, 0x9A68, 0x9E19, 0x864B, 0x8B9F,
+    0x9483, 0x9C79, 0x9EB7, 0x7675, 0x9A6B, 0x9C7A, 0x9E1D, 0x7069,
+    0x706A, 0x7229, 0x9EA4, 0x9F7E, 0x9F49, 0x9F98, 0xFE19, 0x223C,
+    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+    0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+    0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+    0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+    0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+    0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+    0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+    0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+    0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0xFE33,
+    0x2574, 0xFE34, 0xFE4F, 0x0308, 0xFF3E, 0x30FD, 0x30FE, 0x309D,
+    0x309E, 0xFFFD, 0x3005, 0x3006, 0x3007, 0x30FC, 0xFF3B, 0xFF3D,
+    0x273D, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047,
+    0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F,
+    0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057,
+    0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F,
+    0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,
+    0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
+    0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077,
+    0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F,
+    0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087,
+    0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F,
+    0x3090, 0x3091, 0x3092, 0x3093, 0x30A1, 0x30A2, 0x30A3, 0x30A4,
+    0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC,
+    0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4,
+    0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC,
+    0x30BD, 0x30BE, 0x30BF, 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4,
+    0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC,
+    0x30CD, 0x30CE, 0x30CF, 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4,
+    0x30D5, 0x30D6, 0x30D7, 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC,
+    0x30DD, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4,
+    0x30E5, 0x30E6, 0x30E7, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC,
+    0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4,
+    0x30F5, 0x30F6, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
+    0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C,
+    0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424,
+    0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C,
+    0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434,
+    0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B,
+    0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443,
+    0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B,
+    0x044C, 0x044D, 0x044E, 0x044F, 0x21E7, 0x21B8, 0x21B9, 0x4E41,
+    0x0000, 0x4E5A, 0x0000, 0x5202, 0x4491, 0x9FB0, 0x5188, 0x9FB1,
+    0x0000, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFFFD, 0x00AC, 0xFFE4, 0xFF07, 0xFF02, 0x3231, 0x2116, 0x2121,
+    0x7881, 0x92B9, 0x88CF, 0x58BB, 0x6052, 0x7CA7, 0x5AFA, 0x2554,
+    0x2566, 0x2557, 0x2560, 0x256C, 0x2563, 0x255A, 0x2569, 0x255D,
+    0x2552, 0x2564, 0x2555, 0xFFFD, 0xFFFD, 0xFFFD, 0x2558, 0x2567,
+    0x255B, 0x2553, 0x2565, 0x2556, 0x255F, 0x256B, 0x2562, 0x2559,
+    0x2568, 0x255C, 0x2551, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0x2593, 0xFFFD, 0xFFFD, 0xFE10, 0xFE11, 0xFE12, 0xFFFD, 0xFE14,
+    0xFE13, 0xFE16, 0xFE15, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+    0xFFFD, 0xFFFD, 0xFFFD, 0x0000, 0x57BE, 0x0000, 0x713E, 0x0000,
+    0x69A2, 0x0000, 0x5B74, 0x7A49, 0x0000, 0x0000, 0x7A65, 0x7A7D,
+    0x0000, 0x7ABB, 0x7AB0, 0x7AC2, 0x7AC3, 0x71D1, 0x0000, 0x41CA,
+    0x7ADA, 0x7ADD, 0x7AEA, 0x41EF, 0x54B2, 0x0000, 0x7B0B, 0x7B55,
+    0x7B29, 0x0000, 0x0000, 0x7BA2, 0x7B6F, 0x839C, 0x0000, 0x0000,
+    0x7BD0, 0x8421, 0x7B92, 0xFFFD, 0x0000, 0xFFFD, 0x8492, 0x7BFA,
+    0xFFFD, 0x7C35, 0x0000, 0x7C44, 0x7C83, 0x0000, 0x7CA6, 0x0000,
+    0x7CC9, 0x7CC7, 0x7CE6, 0xFFFD, 0x7CF3, 0x7CF5, 0x7E67, 0x451D,
+    0x0000, 0x7D5D, 0x0000, 0x7D89, 0x7DAB, 0x7135, 0x7DB3, 0x7DD6,
+    0x0000, 0x0000, 0x7DE4, 0x3D13, 0x7DF5, 0x0000, 0x7DE5, 0x0000,
+    0xFFFD, 0x0000, 0x0000, 0x7E6E, 0xFFFD, 0x432B, 0x946C, 0x7E27,
+    0x7F40, 0x7F41, 0x7F47, 0x7936, 0x0000, 0x99E1, 0x7F97, 0x0000,
+    0x7FA3, 0x0000, 0x0000, 0x455C, 0x0000, 0x0000, 0x7FFA, 0x0000,
+    0xFA5B, 0x8008, 0x801D, 0xFFFD, 0x802F, 0x0000, 0x0000, 0x803B,
+    0x803C, 0x8061, 0x0000, 0x4989, 0x0000, 0x0000, 0x0000, 0x6725,
+    0x80A7, 0x0000, 0x8107, 0x811A, 0x58B0, 0x0000, 0x6C7F, 0x0000,
+    0x64E7, 0x0000, 0x8218, 0x0000, 0x6A53, 0x0000, 0x0000, 0x447A,
+    0x8229, 0x0000, 0x0000, 0x4FF9, 0x0000, 0x84E2, 0x8362, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x82AA, 0x691B, 0x0000, 0x41DB,
+    0x854B, 0x82D0, 0x831A, 0x0000, 0x0000, 0x36C1, 0x0000, 0x0000,
+    0x827B, 0x82E2, 0x8318, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x3DBF, 0x831D, 0x55EC, 0x8385, 0x450B, 0x0000, 0x83AC, 0xFFFD,
+    0x83D3, 0x0000, 0x6A57, 0x855A, 0x3496, 0x0000, 0x8458, 0x0000,
+    0x8471, 0x3DD3, 0x44E4, 0x6AA7, 0x844A, 0x7958, 0xFFFD, 0x0000,
+    0x0000, 0x0000, 0x84DE, 0xFFFD, 0x8391, 0x44A0, 0x8493, 0x84E4,
+    0x0000, 0x4240, 0x0000, 0x4543, 0x8534, 0x5AF2, 0x4523, 0x4527,
+    0x8573, 0x4516, 0x67BF, 0x8616, 0x0000, 0x0000, 0x85C1, 0x0000,
+    0x8602, 0x0000, 0x0000, 0x0000, 0x456A, 0x8628, 0x3648, 0x0000,
+    0x53F7, 0x0000, 0x867E, 0xFFFD, 0x0000, 0x87EE, 0x0000, 0x87B1,
+    0x87DA, 0x880F, 0x5661, 0x866C, 0x6856, 0x460F, 0x8845, 0x8846,
+    0x0000, 0x0000, 0x0000, 0x885E, 0x889C, 0x465B, 0x88B4, 0x88B5,
+    0x88C5, 0x0000, 0x8987, 0xFFFD, 0xFFFD, 0xFFFD, 0x89A7, 0x89BC,
+    0x0000, 0x89E7, 0x0000, 0x0000, 0x8A9C, 0x7793, 0x91FE, 0x8A90,
+    0x0000, 0x7AE9, 0x0000, 0x4713, 0x0000, 0x717C, 0x8B0C, 0x8B1F,
+    0x0000, 0x0000, 0x8B3F, 0xFFFD, 0x8B4D, 0x8AA9, 0x0000, 0x8B90,
+    0x8B9B, 0x8AAF, 0x0000, 0x4615, 0x884F, 0x8C9B, 0x0000, 0x0000,
+    0x0000, 0x3725, 0x0000, 0x8CD6, 0x0000, 0x0000, 0x8D12, 0x8D03,
+    0x0000, 0x8CDB, 0x705C, 0x8D11, 0x3ED0, 0x0000, 0x8DA9, 0x0000,
+    0x0000, 0x0000, 0x3B7C, 0x0000, 0x0000, 0x7AE7, 0x8EAD, 0x8EB6,
+    0x8EC3, 0x92D4, 0x8F19, 0x8F2D, 0x0000, 0x0000, 0x8FA5, 0x9303,
+    0x0000, 0x0000, 0x8FB3, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x5EF8,
+    0x0000, 0x8FF9, 0xFFFD, 0x0000, 0x3980, 0x0000, 0x9037, 0x0000,
+    0x0000, 0x9061, 0x0000, 0x0000, 0x90A8, 0x0000, 0x90C4, 0x0000,
+    0x90AE, 0xFA26, 0x9167, 0x91A9, 0x91C4, 0x7CAC, 0x0000, 0x0000,
+    0x920E, 0x6C9F, 0x9241, 0x9262, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x932C, 0x936B, 0x0000, 0x0000, 0x5AC3, 0x0000,
+    0x0000, 0x4965, 0x9244, 0x0000, 0x0000, 0x0000, 0x9373, 0x945B,
+    0x8EBC, 0x9585, 0x95A6, 0x9426, 0x95A0, 0x6FF6, 0x42B9, 0x0000,
+    0x0000, 0x0000, 0x49DF, 0x6C1C, 0x967B, 0x9696, 0x416C, 0x96A3,
+    0x0000, 0x61DA, 0xE4AD, 0x78F5, 0x0000, 0x96BD, 0x53CC, 0x49A1,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x9731, 0x8642, 0x9736, 0x4A0F, 0x453D, 0x4585, 0x0000, 0x7075,
+    0x5B41, 0x971B, 0xFFFD, 0x0000, 0x9757, 0x5B4A, 0x0000, 0x975F,
+    0x9425, 0x50D0, 0x0000, 0x0000, 0x9789, 0x979F, 0x97B1, 0x97BE,
+    0x97C0, 0x97D2, 0x97E0, 0x0000, 0x97EE, 0x741C, 0x0000, 0xFFFD,
+    0x97F5, 0x0000, 0x0000, 0x4AD1, 0x9834, 0x9833, 0x984B, 0x9866,
+    0x3B0E, 0x0000, 0x3D51, 0x0000, 0x0000, 0x0000, 0x98CA, 0x98B7,
+    0x98C8, 0x98C7, 0x4AFF, 0x0000, 0x0000, 0x55B0, 0x98E1, 0x98E6,
+    0x98EC, 0x9378, 0x9939, 0x0000, 0x4B72, 0x0000, 0x0000, 0x99F5,
+    0x9A0C, 0x9A3B, 0x9A10, 0x9A58, 0x0000, 0x36C4, 0x0000, 0x0000,
+    0x9AE0, 0x9AE2, 0x0000, 0x9AF4, 0x4C0E, 0x9B14, 0x9B2D, 0x0000,
+    0x5034, 0x9B34, 0x38C3, 0x0000, 0x9B50, 0x9B40, 0x0000, 0x5A45,
+    0x0000, 0x9B8E, 0x9C02, 0x9BFF, 0x9C0C, 0x0000, 0x9DD4, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9D7E, 0x9D83, 0x0000,
+    0x9E0E, 0x9DC4, 0x0000, 0x0000, 0x0000, 0x0000, 0x9D39, 0x0000,
+    0x0000, 0x9E90, 0x9E95, 0x9E9E, 0x9EA2, 0x4D34, 0x9EAA, 0x9EAF,
+    0x0000, 0x9EC1, 0x3B60, 0x39E5, 0x3D1D, 0x4F32, 0x37BE, 0x0000,
+    0x9F02, 0x9F08, 0x4B96, 0x9424, 0x0000, 0x9F17, 0x0000, 0x9F39,
+    0x569F, 0x568A, 0x9F45, 0x99B8, 0x0000, 0x97F2, 0x847F, 0xFFFD,
+    0x9F69, 0x7ADC, 0x9F8E, 0x7216, 0x4BBE, 0x0000, 0x0000, 0x7177,
+    0x0000, 0x0000, 0x0000, 0x739E, 0x0000, 0x0000, 0x799F, 0x0000,
+    0x0000, 0x9369, 0x93F3, 0x0000, 0x92EC, 0x9381, 0x93CB, 0x0000,
+    0x0000, 0x7217, 0x3EEB, 0x7772, 0x7A43, 0x70D0, 0x0000, 0x0000,
+    0x717E, 0x0000, 0x70A3, 0x0000, 0x0000, 0x3EC7, 0x0000, 0x0000,
+    0x0000, 0x3722, 0x0000, 0x0000, 0x36E1, 0x0000, 0x0000, 0x0000,
+    0x3723, 0x0000, 0x575B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x8503, 0x0000, 0xFFFD, 0x8455, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x44F4, 0x0000, 0x0000, 0x0000, 0x67F9, 0x3733,
+    0x3C15, 0x3DE7, 0x586C, 0x0000, 0x6810, 0x4057, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x54CB, 0x569E, 0x0000, 0x5692, 0x0000,
+    0x0000, 0x0000, 0xFFFD, 0x0000, 0x939C, 0x4EF8, 0x512B, 0x3819,
+    0x0000, 0x4EBC, 0x0000, 0xFFFD, 0x4F4B, 0x4F8A, 0x0000, 0x5A68,
+    0x0000, 0x0000, 0x3999, 0x0000, 0x0000, 0x3435, 0x4F29, 0x0000,
+    0x0000, 0x0000, 0x8ADA, 0x0000, 0x4E98, 0x50CD, 0x510D, 0x4FA2,
+    0x4F03, 0x0000, 0x0000, 0x4F42, 0x502E, 0x506C, 0x5081, 0x4FCC,
+    0x4FE5, 0x5058, 0x50FC, 0x6E76, 0x0000, 0x0000, 0x0000, 0x6D72,
+    0x0000, 0x0000, 0x51A8, 0x51C3, 0x0000, 0x44DD, 0x0000, 0x0000,
+    0x0000, 0x8D7A, 0x0000, 0x0000, 0x5259, 0x52A4, 0x0000, 0x52E1,
+    0xFFFD, 0x467A, 0x718C, 0x0000, 0x0000, 0x0000, 0x0000, 0x69D1,
+    0x0000, 0xFFFD, 0x3EDE, 0x7499, 0x7414, 0x7456, 0x7398, 0x4B8E,
+    0x0000, 0x0000, 0x53D0, 0x3584, 0x720F, 0x0000, 0x55B4, 0x0000,
+    0x54CD, 0x0000, 0x571D, 0x925D, 0x96F4, 0x57DD, 0x578D, 0x577F,
+    0x363E, 0x58CB, 0x5A99, 0x0000, 0x0000, 0x0000, 0x0000, 0x5A2C,
+    0x59B8, 0x5A7E, 0x5ACF, 0x5A12, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x36F5, 0x6D05, 0x7443, 0x5A21, 0x0000, 0x5A81, 0x0000, 0x0000,
+    0x93E0, 0x748C, 0x0000, 0x7105, 0x4972, 0x9408, 0x0000, 0x93BD,
+    0x37A0, 0x5C1E, 0x5C9E, 0x5E5E, 0x5E48, 0x0000, 0x0000, 0x0000,
+    0x5ECD, 0x5B4F, 0x0000, 0x0000, 0x3701, 0x0000, 0x36DD, 0x0000,
+    0x36D3, 0x812A, 0x0000, 0x0000, 0x0000, 0x0000, 0x5F0C, 0x5F0E,
+    0x0000, 0x0000, 0x5A6B, 0x0000, 0x5B44, 0x0000, 0x8860, 0x607E,
+    0x0000, 0x0000, 0x5FDB, 0x3EB8, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x61C0, 0x0000, 0x0000, 0x0000, 0x6199, 0x6198, 0x6075, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x6471, 0x0000, 0x0000, 0x3A29, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x6337, 0x64B6, 0x6331, 0x63D1, 0x0000,
+    0x0000, 0x62A4, 0x0000, 0x643B, 0x656B, 0x6972, 0x3BF4, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x550D, 0x0000, 0x0000, 0x0000, 0x66CE,
+    0x0000, 0x0000, 0x3AE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x78EE, 0x0000, 0x0000, 0x0000, 0x3464, 0x0000, 0x0000,
+    0x0000, 0x668E, 0x0000, 0x666B, 0x4B93, 0x6630, 0x0000, 0x0000,
+    0x6663, 0x0000, 0x0000, 0x661E, 0x0000, 0x38D1, 0x0000, 0x0000,
+    0x3B99, 0x0000, 0x0000, 0x74D0, 0x3B96, 0x0000, 0x68B6, 0xFFFD,
+    0x3BC4, 0x6ABE, 0x0000, 0x0000, 0x6A33, 0x6A52, 0x6AC9, 0x6B05,
+    0x0000, 0x6511, 0x6898, 0x6A4C, 0x3BD7, 0x6A7A, 0x6B57, 0x0000,
+    0x0000, 0x93A0, 0x92F2, 0x0000, 0x0000, 0x9289, 0x0000, 0x0000,
+    0x9467, 0x6DA5, 0x6F0B, 0xFFFD, 0x0000, 0x3D8F, 0x6E04, 0x0000,
+    0x5A3D, 0x6E0A, 0x5847, 0x6D24, 0x7842, 0x713B, 0x0000, 0x0000,
+    0x70F1, 0x7250, 0x7287, 0x7294, 0x0000, 0x0000, 0x5179, 0x0000,
+    0x0000, 0x747A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3F06,
+    0x3EB1, 0x0000, 0x0000, 0x0000, 0x60A7, 0x3EF3, 0x74CC, 0x743C,
+    0x9387, 0x7437, 0x449F, 0x0000, 0x4551, 0x7583, 0x3F63, 0x0000,
+    0x0000, 0x3F58, 0x7555, 0x7673, 0x0000, 0xFFFD, 0x7468, 0x0000,
+    0x0000, 0x0000, 0x3AFB, 0x3DCD, 0x0000, 0x3EFF, 0x0000, 0x0000,
+    0x91FA, 0x5732, 0x9342, 0x0000, 0x0000, 0x50DF, 0x0000, 0x0000,
+    0x7778, 0x0000, 0x770E, 0x770F, 0x777B, 0x0000, 0x0000, 0x3A5E,
+    0x0000, 0x7438, 0x749B, 0x3EBF, 0x0000, 0x0000, 0x40C8, 0x0000,
+    0x0000, 0x9307, 0x0000, 0x781E, 0x788D, 0x7888, 0x78D2, 0x73D0,
+    0x7959, 0x0000, 0x0000, 0x410E, 0xFFFD, 0xFFFD, 0x79A5, 0x6A2D,
+    0x0000, 0x7A3A, 0x79F4, 0x416E, 0x0000, 0x4132, 0x9235, 0x79F1,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3597, 0x556B, 0x3570,
+    0x36AA, 0x0000, 0x0000, 0x7AE2, 0x5A59, 0x0000, 0x0000, 0x0000,
+    0x5A0D, 0x0000, 0x78F0, 0x5A2A, 0x0000, 0x7AFE, 0x41F9, 0x7C5D,
+    0x7C6D, 0x4211, 0x0000, 0x0000, 0x0000, 0x7CCD, 0x0000, 0x0000,
+    0x7C8E, 0x7C7C, 0x7CAE, 0x6AB2, 0x7DDC, 0x7E07, 0x7DD3, 0x7F4E,
+    0x0000, 0x0000, 0x0000, 0x7D97, 0x0000, 0x426A, 0x0000, 0x0000,
+    0x67D6, 0x0000, 0x0000, 0x57C4, 0x0000, 0x0000, 0x7FDD, 0x7B27,
+    0x0000, 0x0000, 0x0000, 0x7B0C, 0x0000, 0x99E6, 0x8645, 0x9A63,
+    0x6A1C, 0x0000, 0x0000, 0x0000, 0x9A1F, 0x0000, 0x8495, 0x0000,
+    0x0000, 0x44EA, 0x8137, 0x4402, 0x80C6, 0x8109, 0x8142, 0x0000,
+    0x98C3, 0x0000, 0x8262, 0x8265, 0x0000, 0x8453, 0x0000, 0x8610,
+    0x0000, 0x5A86, 0x417F, 0x0000, 0x5B2B, 0x0000, 0x5AE4, 0x0000,
+    0x86A0, 0x0000, 0x0000, 0x882D, 0x0000, 0x5A02, 0x886E, 0x4F45,
+    0x8887, 0x88BF, 0x88E6, 0x8965, 0x894D, 0x0000, 0x8954, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3EAD, 0x84A3, 0x46F5,
+    0x46CF, 0x37F2, 0x8A3D, 0x8A1C, 0x0000, 0x5F4D, 0x922B, 0x0000,
+    0x65D4, 0x7129, 0x70C4, 0x0000, 0x9D6D, 0x8C9F, 0x8CE9, 0x0000,
+    0x599A, 0x77C3, 0x59F0, 0x36D4, 0x8E2A, 0x8EA7, 0x0000, 0x8F30,
+    0x8F4A, 0x42F4, 0x6C58, 0x6FBB, 0x0000, 0x489B, 0x6F79, 0x6E8B,
+    0x0000, 0x9BE9, 0x36B5, 0x0000, 0x90BB, 0x48B4, 0x5571, 0x4906,
+    0x91BB, 0x9404, 0x0000, 0x4062, 0x0000, 0x9427, 0x0000, 0x0000,
+    0x84E5, 0x8A2B, 0x9599, 0x95A7, 0x9597, 0x9596, 0x0000, 0x7445,
+    0x3EC2, 0x0000, 0x0000, 0x0000, 0x3EE7, 0x0000, 0x968F, 0x0000,
+    0x0000, 0x0000, 0x3ECC, 0x0000, 0x0000, 0x0000, 0x7412, 0x746B,
+    0x3EFC, 0x9741, 0x0000, 0x6847, 0x4A1D, 0x0000, 0x0000, 0xFFFD,
+    0x9368, 0x0000, 0x0000, 0x0000, 0x0000, 0x92BA, 0x5B11, 0x8B69,
+    0x493C, 0x73F9, 0x0000, 0x979B, 0xFFFD, 0x9938, 0x0000, 0x5DC1,
+    0x0000, 0x0000, 0x981F, 0x0000, 0x92F6, 0x0000, 0x91E5, 0x44C0,
+    0x0000, 0x0000, 0x0000, 0x98DC, 0x0000, 0x3F00, 0x922A, 0x4925,
+    0x8414, 0x993B, 0x994D, 0x0000, 0x3DFD, 0xFFFD, 0x4B6F, 0x99AA,
+    0x9A5C, 0x0000, 0x0000, 0x6A8F, 0x9A21, 0x5AFE, 0x9A2F, 0x0000,
+    0x4B90, 0x0000, 0x99BC, 0x4BBD, 0x4B97, 0x937D, 0x5872, 0x0000,
+    0x5822, 0x0000, 0x0000, 0x7844, 0x0000, 0x0000, 0x68C5, 0x3D7D,
+    0x9458, 0x3927, 0x6150, 0x0000, 0x0000, 0x6107, 0x9C4F, 0x9C53,
+    0x9C7B, 0x9C35, 0x9C10, 0x9B7F, 0x9BCF, 0x0000, 0x9B9F, 0x0000,
+    0x0000, 0x9D21, 0x4CAE, 0x0000, 0x9E18, 0x4CB0, 0x9D0C, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x9DA5, 0x84BD, 0x0000, 0x0000, 0x0000,
+    0x85FC, 0x4533, 0x0000, 0x0000, 0x0000, 0x8420, 0x85EE, 0x0000,
+    0x0000, 0x0000, 0x79E2, 0x0000, 0x0000, 0x0000, 0x3D62, 0x93DB,
+    0x92BE, 0x9348, 0x0000, 0x78B9, 0x9277, 0x944D, 0x4FE4, 0x3440,
+    0x9064, 0x0000, 0x783D, 0x7854, 0x78B6, 0x784B, 0x0000, 0x0000,
+    0x0000, 0x369A, 0x4F72, 0x6FDA, 0x6FD9, 0xFFFD, 0x701E, 0x5414,
+    0x0000, 0x57BB, 0x58F3, 0x578A, 0x9D16, 0x57D7, 0x7134, 0x34AF,
+    0x0000, 0x71EB, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x0000, 0x610C,
+    0x5ACE, 0x5A0B, 0x42BC, 0x0000, 0x372C, 0x4B7B, 0x0000, 0x93BB,
+    0x93B8, 0x0000, 0x0000, 0x8472, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x5994, 0x0000, 0x0000, 0x7DA8, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x92E5, 0x73E2, 0x3EE9, 0x74B4, 0x0000, 0x0000,
+    0x3EE1, 0x0000, 0x6AD8, 0x73F3, 0x73FB, 0x3ED6, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7448, 0x0000, 0x70A5,
+    0x0000, 0x9284, 0x73E6, 0x935F, 0x0000, 0x9331, 0x0000, 0x0000,
+    0x9386, 0x0000, 0x0000, 0x4935, 0x0000, 0x716B, 0x0000, 0x0000,
+    0x56A4, 0x0000, 0x0000, 0x0000, 0x5502, 0x79C4, 0x0000, 0x7DFE,
+    0x0000, 0x0000, 0x0000, 0x452E, 0x9401, 0x370A, 0x0000, 0x0000,
+    0x59B0, 0x0000, 0x0000, 0x0000, 0x5AA1, 0x36E2, 0x0000, 0x36B0,
+    0x925F, 0x5A79, 0x0000, 0x0000, 0x9374, 0x3CCD, 0x0000, 0x4A96,
+    0x398A, 0x50F4, 0x3D69, 0x3D4C, 0x0000, 0x7175, 0x42FB, 0x0000,
+    0x6E0F, 0x0000, 0x44EB, 0x6D57, 0x0000, 0x7067, 0x6CAF, 0x3CD6,
+    0x0000, 0x0000, 0x6E02, 0x6F0C, 0x3D6F, 0x0000, 0x7551, 0x36BC,
+    0x34C8, 0x4680, 0x3EDA, 0x4871, 0x59C4, 0x926E, 0x493E, 0x8F41,
+    0x0000, 0x0000, 0x5812, 0x57C8, 0x36D6, 0x0000, 0x70FE, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x68B9, 0x6967, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6A1A, 0x0000,
+    0x0000, 0x843E, 0x44DF, 0x44CE, 0x0000, 0x0000, 0x0000, 0x0000,
+    0xFFFD, 0xFFFD, 0x833D, 0x0000, 0x83ED, 0x0000, 0x0000, 0x0000,
+    0x5989, 0x5A82, 0x0000, 0x5A61, 0x5A71, 0x0000, 0x0000, 0x372D,
+    0x59EF, 0x0000, 0x36C7, 0x718E, 0x9390, 0x669A, 0x0000, 0x5A6E,
+    0x5A2B, 0x0000, 0x6A2B, 0x0000, 0x0000, 0x0000, 0x0000, 0x711D,
+    0x0000, 0x0000, 0x4FB0, 0x0000, 0x5CC2, 0x0000, 0x0000, 0x0000,
+    0x6A0C, 0x0000, 0x0000, 0xFFFD, 0x7133, 0x0000, 0x3DA5, 0x6CDF,
+    0x0000, 0x59EB, 0x5F5C, 0x0000, 0x7CD3, 0x0000, 0x0000, 0x0000,
+    0x906C, 0x81F6, 0x770C, 0x6CA2, 0x56FD, 0x5869, 0x6761, 0x5C5E,
+    0x58F2, 0x70B9, 0x6803, 0x8FBB, 0x8FBC, 0x4E21, 0x7B39, 0x3DCC,
+    0x732A, 0x7560, 0x583A, 0x82A6, 0x698A, 0x60E3, 0x4EEE, 0x99C4,
+    0x9EBF, 0x5301, 0x67A0, 0x60E8, 0x51B4, 0x7A83, 0x9C3A, 0x7AC8,
+    0x691A, 0x59AC, 0x5840, 0x546A, 0x60E7, 0x567A, 0x6955, 0x9C2F,
+    0x87A5, 0x5C20, 0x5E0B, 0x671E, 0x84AD, 0x8B81, 0x4E78, 0x62C3,
+    0x6855, 0xFFFD, 0x82FD, 0x89A5, 0x8FA0, 0x97B8, 0x9847, 0x9ABD,
+    0x5FB1, 0x6648, 0x66BF, 0x0000, 0xFFFD, 0x0000, 0xFFFD, 0xFFFD,
+    0x0000, 0x670E, 0x6918, 0x0000, 0x0000, 0x0000, 0x0000, 0x48D0,
+    0x4AB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x51D2, 0x0000, 0x599F,
+    0x0000, 0x3BBE, 0x0000, 0x399B, 0x0000, 0x0000, 0x3762, 0x0000,
+    0x8B5E, 0x0000, 0xFFFD, 0x7209, 0x0000, 0x0000, 0x8EDA, 0x528F,
+    0x7171, 0x0000, 0x0000, 0x55BC, 0x0000, 0x3473, 0x0000, 0x4718,
+    0x0000, 0x5066, 0x34FB, 0x0000, 0xFFFD, 0x477C, 0x0000, 0x0000,
+    0xFFFD, 0x0000, 0x9056, 0x0000, 0x8B62, 0x5D5B, 0x0000, 0xFFFD,
+    0x0000, 0x8AEA, 0x0000, 0x0000, 0x4BC0, 0x0000, 0x9465, 0x0000,
+    0x6195, 0x5A27, 0x0000, 0x0000, 0x0000, 0x4E6A, 0x0000, 0x9656,
+    0x6D8F, 0x0000, 0x8977, 0x0000, 0xFFFD, 0x7B42, 0x0000, 0x0000,
+    0xFFFD, 0x7A45, 0x9A26, 0x365F, 0x0000, 0x0000, 0x7983, 0x5D2C,
+    0x0000, 0xFFFD, 0x46D0, 0x753B, 0x8865, 0x58B6, 0x371C, 0x0000,
+    0x3C54, 0x9281, 0x0000, 0x9330, 0x0000, 0x6C39, 0x0000, 0x8827,
+    0x88F5, 0x0000, 0x0000, 0x0000, 0x6EB8, 0x0000, 0x0000, 0x39A4,
+    0xFFFD, 0xFFFD, 0x453F, 0x66B6, 0x0000, 0x0000, 0x8943, 0x40DF,
+    0x0000, 0x39A1, 0x0000, 0x0000, 0x0000, 0x71AD, 0x8366, 0x0000,
+    0xFFFD, 0x4CB7, 0x0000, 0x0000, 0x0000, 0x7B43, 0x797E, 0x6FB5,
+    0x0000, 0x6A03, 0x0000, 0x53A2, 0x0000, 0x93BF, 0x6836, 0x975D,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x5D85, 0x0000, 0x5715, 0x9823,
+    0x0000, 0x5DAB, 0x0000, 0x65BE, 0x69D5, 0x53D2, 0x0000, 0x0000,
+    0x3C11, 0x6736, 0x0000, 0x35CA, 0x48FA, 0xFFFD, 0x7808, 0x9255,
+    0x43F2, 0x43DF, 0x59F8, 0xFFFD, 0x568B, 0x0000, 0x9012, 0x55C1,
+    0x4509, 0x7E7F, 0x6F56, 0x6AB1, 0x34E4, 0x0000, 0x373A, 0xFFFD,
+    0x0000, 0x0000, 0x3DEB, 0x0000, 0x0000, 0x56BF, 0x8E0E, 0x5B6D,
+    0x63DE, 0xFFFD, 0x6530, 0x562D, 0x541A, 0x0000, 0x4C7D, 0x5622,
+    0x561E, 0x7F49, 0x5975, 0x0000, 0x8770, 0x8117, 0x9D5E, 0x8D18,
+    0x763B, 0x9C45, 0x764E, 0x77B9, 0x9345, 0x5432, 0x8148, 0x82F7,
+    0x5625, 0x8132, 0x8418, 0x80BD, 0x55EA, 0x7962, 0x5643, 0x5416,
+    0x0000, 0x35CE, 0x5605, 0x55F1, 0x66F1, 0x0000, 0x362D, 0x7534,
+    0x55F0, 0x55BA, 0x5497, 0x5572, 0x0000, 0x0000, 0x5ED0, 0x0000,
+    0x0000, 0x0000, 0x9EAB, 0x7D5A, 0xFFFD, 0x0000, 0x629D, 0x976D,
+    0x5494, 0x8CCD, 0x71F6, 0x9176, 0x63FC, 0x63B9, 0x63FE, 0x5569,
+    0x0000, 0x9C72, 0x0000, 0x519A, 0x34DF, 0x0000, 0x51A7, 0x544D,
+    0x551E, 0x5513, 0x7666, 0x8E2D, 0x0000, 0x75B1, 0x80B6, 0x8804,
+    0xFFFD, 0x88C7, 0x81B6, 0x841C, 0x44EC, 0x7304, 0x830B, 0x567B,
+    0x9170, 0x9208, 0x0000, 0x7266, 0x474E, 0x0000, 0x40FA, 0x9C5D,
+    0x651F, 0x48F3, 0x0000, 0x0000, 0xFFFD, 0x0000, 0xED2B, 0x0000,
+    0x71A3, 0x7E8E, 0x9D50, 0x3577, 0x6CB2, 0x5367, 0x39DC, 0x0000,
+    0x822D, 0x544B, 0xED43, 0x3A52, 0x7374, 0x0000, 0x4D09, 0x9BED,
+    0xFFFD, 0x4C5B, 0x0000, 0x845C, 0x0000, 0x632E, 0x7D25, 0x3A2A,
+    0x9008, 0x52CC, 0x3E74, 0x367A, 0x45E9, 0x0000, 0x7640, 0x5AF0,
+    0x0000, 0x787A, 0x0000, 0x58A7, 0x40BF, 0x567C, 0x9B8B, 0x5D74,
+    0x7654, 0x0000, 0x9E85, 0x4CE1, 0xFFFD, 0x37FB, 0x6119, 0x0000,
+    0xED73, 0x565D, 0x0000, 0x5234, 0x35AD, 0xFFFD, 0x9D7C, 0x7C56,
+    0x9B39, 0x57DE, 0x5C53, 0x64D3, 0x0000, 0x0000, 0x86AD, 0x0000,
+    0x0000, 0xED8C, 0x51FE, 0x0000, 0x5D8E, 0x9703, 0x0000, 0x9E81,
+    0x904C, 0x7B1F, 0x9B02, 0x5CD1, 0x7BA3, 0x6268, 0x6335, 0x9AFF,
+    0x7BCF, 0x9B2A, 0x7C7E, 0xFFFD, 0x7C42, 0x7C86, 0x9C15, 0x7BFC,
+    0x9B09, 0xFFFD, 0x9C2E, 0x9F5A, 0x5573, 0x5BC3, 0x4FFD, 0x9E98,
+    0x4FF2, 0x5260, 0x52D1, 0x5767, 0x5056, 0x59B7, 0x5E12, 0x97C8,
+    0x9DAB, 0x8F5C, 0x5469, 0x97B4, 0x9940, 0x97BA, 0x532C, 0x6130,
+    0x692C, 0x53DA, 0x9C0A, 0x9D02, 0x4C3B, 0x9641, 0x6980, 0x50A6,
+    0x7546, 0x0000, 0x99DA, 0x5273, 0xEDC9, 0x9159, 0x9681, 0x915C,
+    0xEDCD, 0x9151, 0x0000, 0x637F, 0x6ACA, 0x5611, 0x918E, 0x757A,
+    0x6285, 0x734F, 0x7C70, 0x0000, 0xEDDC, 0x76D6, 0x9B9D, 0x4E2A,
+    0x0000, 0x83BE, 0x8842, 0xEDE4, 0x5C4A, 0x69C0, 0xFFFD, 0xFFFD,
+    0x521F, 0x5DF5, 0x4ECE, 0x6C31, 0x0000, 0x4F39, 0x549C, 0xFFFD,
+    0x529A, 0x8D82, 0x35FE, 0xFFFD, 0x35F3, 0xEDF6, 0x6B52, 0x917C,
+    0x9FA5, 0x9B97, 0x982E, 0x98B4, 0x9ABA, 0x9EA8, 0x9E84, 0x7B14,
+    0xEE02, 0x6BFA, 0x8818, 0x7F78, 0xEE06, 0x5620, 0x0000, 0x8E77,
+    0x9F53, 0xEE0B, 0x8DD4, 0x8E4F, 0x9E1C, 0x8E01, 0x6282, 0x0000,
+    0x8E28, 0x8E75, 0x7AD3, 0x7A3E, 0x78D8, 0x6CEA, 0x8A67, 0x7607,
+    0x9F26, 0x6CCE, 0x87D6, 0x75C3, 0x0000, 0x7853, 0x8D0C, 0x72E2,
+    0x7371, 0x8B2D, 0x7302, 0x74F1, 0x8CEB, 0x0000, 0x862F, 0x5FBA,
+    0x88A0, 0x44B7, 0xEE2F, 0x0000, 0xEE32, 0x8A7E, 0x0000, 0xEE35,
+    0x60FD, 0x7667, 0x9AD7, 0x9D44, 0x936E, 0x9B8F, 0x87F5, 0xEE3D,
+    0xFFFD, 0x8CF7, 0x732C, 0x9721, 0x9BB0, 0x35D6, 0x72B2, 0x4C07,
+    0x7C51, 0x994A, 0x6159, 0x4C04, 0x9E96, 0x617D, 0xEE4D, 0x575F,
+    0x616F, 0x62A6, 0x6239, 0xFFFD, 0x3A5C, 0x61E2, 0x53AA, 0x6364,
+    0x6802, 0x35D2, 0x5D57, 0x8FDA, 0x0000, 0xEE5E, 0x50D9, 0x7906,
+    0x5332, 0x9638, 0x0000, 0x4065, 0xEE66, 0x77FE, 0xEE68, 0x7CC2,
+    0x0000, 0x7CDA, 0x7A2D, 0x8066, 0x8063, 0x7D4D, 0x7505, 0x74F2,
+    0x8994, 0x821A, 0x670C, 0x8062, 0x0000, 0x805B, 0x74F0, 0x8103,
+    0x7724, 0x8989, 0x0000, 0x7553, 0x87A9, 0x87CE, 0x81C8, 0x878C,
+    0x8A49, 0x8CAD, 0x8B43, 0x772B, 0x74F8, 0x84DA, 0x69B2, 0x8DA6,
+    0xEE8C, 0x89A9, 0xFFFD, 0x6DB9, 0x87C1, 0x0000, 0x74E7, 0x3DDB,
+    0x7176, 0x60A4, 0x619C, 0x3CD1, 0xFFFD, 0x6077, 0xEE9A, 0x7F71,
+    0x0000, 0x60E9, 0x4B7E, 0x0000, 0x92DB, 0x0000, 0x0000, 0x854C,
+    0x42B5, 0x73EF, 0x51B5, 0x3649, 0x0000, 0x0000, 0x9344, 0x0000,
+    0x82EE, 0x0000, 0x783C, 0x6744, 0x62DF, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x4FAB, 0x0000, 0x5008, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0xFFFD, 0x0000, 0x5FA4, 0x0000, 0x0000, 0x6EDB,
+    0x0000, 0x50DE, 0x5101, 0x347A, 0x510E, 0x986C, 0x3743, 0x8416,
+    0x0000, 0x0000, 0x5160, 0x0000, 0x516A, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x5B82, 0x877D, 0x0000, 0x0000,
+    0x51B2, 0x51B8, 0x9D34, 0x51C9, 0x51CF, 0x51D1, 0x3CDC, 0x51D3,
+    0x0000, 0x51B3, 0xFFFD, 0xFFFD, 0x51ED, 0x83CD, 0x693E, 0x0000,
+    0x5F7B, 0x520B, 0x5226, 0x523C, 0x52B5, 0x5257, 0x5294, 0x52B9,
+    0x52C5, 0x7C15, 0x8542, 0x52E0, 0x860D, 0x0000, 0x0000, 0x0000,
+    0x5549, 0x6ED9, 0x0000, 0x0000, 0x0000, 0x5333, 0xFFFD, 0x0000,
+    0x6CCB, 0x0000, 0x681B, 0x73D5, 0x604A, 0x3EAA, 0x38CC, 0x0000,
+    0x71DD, 0x44A2, 0x536D, 0x5374, 0x0000, 0x537E, 0x0000, 0x0000,
+    0x0000, 0x77E6, 0x5393, 0x0000, 0x53A0, 0x53AB, 0x53AE, 0x73A7,
+    0x0000, 0x3F59, 0x739C, 0x53C1, 0x53C5, 0x6C49, 0x4E49, 0x57FE,
+    0x53D9, 0x3AAB, 0x0000, 0x53E0, 0x0000, 0x0000, 0x53F6, 0x0000,
+    0x5413, 0x7079, 0x552B, 0x6657, 0x6D5B, 0x546D, 0x0000, 0x0000,
+    0x555D, 0x548F, 0x54A4, 0x47A6, 0x0000, 0x0000, 0x3DB4, 0x0000,
+    0x0000, 0x0000, 0x5547, 0x4CED, 0x542F, 0x7417, 0x5586, 0x55A9,
+    0xFFFD, 0x0000, 0x0000, 0x4552, 0x0000, 0x66B3, 0x0000, 0x5637,
+    0x66CD, 0x0000, 0x66A4, 0xFFFD, 0x564D, 0x564F, 0x78F1, 0x56F1,
+    0x9787, 0x53FE, 0x5700, 0x56EF, 0x56ED, 0x0000, 0x3623, 0x0000,
+    0x5746, 0x0000, 0x6C6E, 0x708B, 0x5742, 0x36B1, 0x0000, 0x57E6,
+    0x0000, 0x5803, 0x0000, 0x0000, 0x5826, 0x0000, 0x581F, 0x58AA,
+    0x3561, 0x58E0, 0x58DC, 0x0000, 0x58FB, 0x5BFF, 0x5743, 0x0000,
+    0x0000, 0x93D3, 0x35A1, 0x591F, 0x68A6, 0x36C3, 0x6E59, 0x0000,
+    0x5A24, 0xFFFD, 0x0000, 0x8505, 0x59C9, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x59D9, 0x0000, 0x0000, 0x0000, 0x6D71, 0x0000, 0x0000,
+    0x59F9, 0x0000, 0x5AAB, 0x5A63, 0x36E6, 0x0000, 0xFFFD, 0x3708,
+    0x5A96, 0x7465, 0x5AD3, 0x0000, 0x0000, 0x0000, 0x3732, 0x0000,
+    0x5E83, 0x52D0, 0x5B76, 0x6588, 0x5B7C, 0x0000, 0x4004, 0x485D,
+    0x0000, 0x5BD5, 0x0000, 0x0000, 0x0000, 0x5BF3, 0x5B9D, 0x4D10,
+    0x5C05, 0x0000, 0x5C13, 0x73CE, 0x5C14, 0x0000, 0x0000, 0x5C49,
+    0x48DD, 0x5C85, 0x5CE9, 0x5CEF, 0x5D8B, 0x0000, 0x0000, 0x5D10,
+    0x5D18, 0x5D46, 0x0000, 0x5CBA, 0x5DD7, 0x82FC, 0x382D, 0x0000,
+    0x0000, 0x0000, 0x8287, 0x3836, 0x3BC2, 0x5E2E, 0x6A8A, 0xFFFD,
+    0xE12F, 0x0000, 0x0000, 0x53A6, 0x4EB7, 0xFFFD, 0x53A8, 0x0000,
+    0x5E09, 0xE138, 0x0000, 0x5EF9, 0x5EFB, 0x38A0, 0x5EFC, 0x683E,
+    0x941B, 0x5F0D, 0x0000, 0x0000, 0x3ADE, 0x0000, 0x5F3A, 0x0000,
+    0x0000, 0x0000, 0x5F63, 0x0000, 0x5F72, 0x9340, 0x0000, 0x5FA7,
+    0x5DB6, 0x3D5F, 0x0000, 0x0000, 0x0000, 0x0000, 0x91D6, 0x0000,
+    0x0000, 0x6031, 0x6685, 0x3963, 0x3DC7, 0x3639, 0x5790, 0x0000,
+    0x7971, 0x3E40, 0x609E, 0xFFFD, 0x60EA, 0x0000, 0x0000, 0x0000,
+    0x74A4, 0x50E1, 0x5AA0, 0x6164, 0x6142, 0x0000, 0x0000, 0x6181,
+    0x51F4, 0x0000, 0x6187, 0x5BAA, 0x0000, 0x0000, 0x61D3, 0x0000,
+    0x0000, 0x61D0, 0x3932, 0x0000, 0x0000, 0x6023, 0x615C, 0x651E,
+    0x638B, 0x0000, 0x62C5, 0x0000, 0x62D5, 0x0000, 0x636C, 0x0000,
+    0x3A17, 0x6438, 0x63F8, 0x0000, 0x0000, 0x6F8A, 0x0000, 0xFFFD,
+    0x0000, 0x64E1, 0x64E5, 0x947B, 0x3A66, 0x643A, 0x3A57, 0x654D,
+    0x6F16, 0x0000, 0x0000, 0x6585, 0x656D, 0x655F, 0xFFFD, 0x65B5,
+    0x0000, 0x4B37, 0x65D1, 0x40D8, 0x0000, 0xE1AB, 0x65E3, 0x5FDF,
+    0x0000, 0x6618, 0x0000, 0x0000, 0x6644, 0x0000, 0x0000, 0x664B,
+    0x0000, 0x6667, 0x0000, 0x6673, 0xFA12, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x77C5, 0x0000, 0x99A4, 0x6702, 0x0000, 0x0000, 0x69FA,
+    0x0000, 0x0000, 0x6767, 0x6762, 0x0000, 0x0000, 0x67D7, 0x44E9,
+    0x6822, 0x6E50, 0x923C, 0x6801, 0x0000, 0x0000, 0x685D, 0x0000,
+    0x69E1, 0x6A0B, 0x0000, 0x6973, 0x68C3, 0x0000, 0x6901, 0x6900,
+    0x3A01, 0x0000, 0x3B80, 0x67AC, 0x6961, 0x0000, 0x42FC, 0x6936,
+    0x6998, 0x3BA1, 0x0000, 0x8363, 0x5090, 0x69F9, 0x0000, 0x0000,
+    0x6A45, 0x0000, 0x6A9D, 0x3BF3, 0x67B1, 0x6AC8, 0x0000, 0x3C0D,
+    0x6B1D, 0x0000, 0x60DE, 0x6B35, 0x6B74, 0x0000, 0x6EB5, 0x0000,
+    0xFFFD, 0x0000, 0x3740, 0x5421, 0x0000, 0x6BE1, 0x0000, 0x6BDC,
+    0x6C37, 0x0000, 0x0000, 0x0000, 0x6C5A, 0x8226, 0x6C79, 0x0000,
+    0x44C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x36E5, 0x3CEB,
+    0x0000, 0x9B83, 0x0000, 0x0000, 0x7F8F, 0x6837, 0x0000, 0x0000,
+    0x0000, 0x6D96, 0x6D5C, 0x6E7C, 0x6F04, 0x0000, 0x0000, 0x0000,
+    0x8533, 0x0000, 0x51C7, 0xFFFD, 0xFFFD, 0x842E, 0x0000, 0x0000,
+    0x0000, 0x7453, 0x0000, 0x79CC, 0x6E4F, 0x5A91, 0x0000, 0x6FF8,
+    0x370D, 0x6F9D, 0x0000, 0x6EFA, 0x0000, 0x0000, 0x4555, 0x93F0,
+    0x6F44, 0x6F5C, 0x3D4E, 0x6F74, 0x0000, 0x3D3B, 0x6F9F, 0x0000,
+    0x6FD3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51DF,
+    0xE251, 0xE252, 0x0000, 0x0000, 0x704B, 0x707E, 0x70A7, 0xFFFD,
+    0x70CC, 0x70D5, 0x70D6, 0x70DF, 0x4104, 0x3DE8, 0x71B4, 0x7196,
+    0x0000, 0x712B, 0x7145, 0x5A88, 0x714A, 0xFA48, 0x0000, 0x714F,
+    0x9362, 0x0000, 0x712C, 0x0000, 0x0000, 0x0000, 0x71BA, 0x0000,
+    0x70BD, 0x720E, 0x9442, 0x7215, 0x5911, 0x9443, 0x7224, 0x9341,
+    0x0000, 0x722E, 0x7240, 0x0000, 0x68BD, 0x7255, 0x7257, 0x3E55,
+    0x0000, 0x680D, 0x6F3D, 0x7282, 0xFFFD, 0x732B, 0x0000, 0x0000,
+    0x48ED, 0x0000, 0x7328, 0x732E, 0x73CF, 0x73AA, 0x0000, 0x0000,
+    0x73C9, 0x7449, 0x0000, 0x0000, 0x0000, 0x6623, 0x36C5, 0x0000,
+    0x0000, 0x0000, 0x73F7, 0x7415, 0x6903, 0x0000, 0x7439, 0x3ED7,
+    0x0000, 0x0000, 0x7460, 0x0000, 0x7447, 0x73E4, 0x7476, 0x83B9,
+    0x746C, 0x7474, 0x93F1, 0x6A2C, 0x7482, 0x4953, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x5B46, 0x0000, 0x0000, 0x74C8, 0x0000, 0x750E,
+    0x751E, 0x0000, 0x0000, 0x5BD7, 0x0000, 0x9385, 0x754D, 0x754A,
+    0x7567, 0x756E, 0x0000, 0x3F04, 0x0000, 0x758E, 0x745D, 0x759E,
+    0x75B4, 0x7602, 0x762C, 0x7651, 0x764F, 0x766F, 0xE2D3, 0x0000,
+    0x7690, 0x81EF, 0x37F8, 0x0000, 0x0000, 0x76A1, 0x76A5, 0x76B7,
+    0x76CC, 0x0000, 0x8462, 0x0000, 0x0000, 0x0000, 0x771E, 0x7726,
+    0x7740, 0x64AF, 0x0000, 0x7758, 0x0000, 0x77AF, 0x0000, 0x0000,
+    0x0000, 0x77F4, 0xFFFD, 0x68CA, 0x78AF, 0x78C7, 0x78D3, 0x96A5,
+    0x792E, 0x0000, 0x78D7, 0x7934, 0x78B1, 0x0000, 0x8FB8, 0x8884,
+    0x0000, 0x7986, 0x8900, 0x6902, 0x7980, 0x0000, 0x799D, 0x0000,
+    0x793C, 0x79A9, 0x6E2A, 0x0000, 0x3EA8, 0x79C6, 0x0000, 0x79D4,
+    0xFFFD, 0x5525, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x5590, 0x0000,
+    0x39EC, 0x0000, 0x8E46, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x777A,
+    0x0000, 0x3A34, 0x47D5, 0x0000, 0x0000, 0x0000, 0x64DD, 0x0000,
+    0x0000, 0x0000, 0xFFFD, 0x648D, 0x8E7E, 0x0000, 0xFFFD, 0x0000,
+    0x0000, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x47F4,
+    0x0000, 0x0000, 0x9AB2, 0x3A67, 0x0000, 0x3FED, 0x3506, 0x0000,
+    0x0000, 0xFFFD, 0x0000, 0x9D6E, 0x9815, 0xFFFD, 0x43D9, 0xFFFD,
+    0x64B4, 0x54E3, 0xFFFD, 0x0000, 0xFFFD, 0x39FB, 0xFFFD, 0x0000,
+    0x0000, 0x0000, 0x64EA, 0x0000, 0x0000, 0x8E68, 0xFFFD, 0x0000,
+    0x0000, 0xFFFD, 0x480B, 0x0000, 0x3FFA, 0x5873, 0x0000, 0xFFFD,
+    0x0000, 0x0000, 0x0000, 0x0000, 0xFFFD, 0x5579, 0xFFFD, 0x43BA,
+    0xFFFD, 0x4AB4, 0x0000, 0x0000, 0x81AA, 0x98F5, 0x0000, 0x6379,
+    0x39FE, 0x0000, 0x8DC0, 0x56A1, 0x647C, 0x3E43, 0xFFFD, 0x0000,
+    0x0000, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000, 0x3992, 0x3A06,
+    0x0000, 0x3578, 0x0000, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000,
+    0x34BC, 0x6C3D, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3A18,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x95AA, 0xFFFD, 0x0000,
+    0x7140, 0xFFFD, 0x5156, 0x4EFE, 0x5088, 0xFFFD, 0x3493, 0x5186,
+    0x5E42, 0x5205, 0x5227, 0x5279, 0x0000, 0x3553, 0x53C2, 0x535F,
+    0xFFFD, 0x553F, 0xFFFD, 0x55D8, 0x35DD, 0x5621, 0xFFFD, 0x5654,
+    0x0000, 0xFFFD, 0x0000, 0xFFFD, 0x0000, 0xFFFD, 0xFFFD, 0x37B9,
+    0x5CC1, 0x5D15, 0x5D56, 0x3838, 0x4E81, 0x5EBD, 0x3914, 0x61B9,
+    0x6290, 0x6318, 0x645A, 0x6491, 0x816D, 0x8184, 0x8193, 0x6800,
+    0x3BBC, 0x728F, 0x72CD, 0x0000, 0x7339, 0x7542, 0x75DC, 0x3FC0,
+    0x0000, 0x3FD7, 0xFFFD, 0x7680, 0x768C, 0x40A8, 0x7839, 0x4103,
+    0x7A91, 0x7C1B, 0x7CED, 0x7F93, 0x7FAE, 0xFFFD, 0x82FF, 0x585F,
+    0x86B2, 0x45AC, 0x878B, 0x8947, 0xFFFD, 0x8A29, 0xFFFD, 0x8E71,
+    0x0000, 0x8EB0, 0xFFFD, 0x915E, 0x918C, 0x990E, 0x991C, 0xFFFD,
+    0xFFFD, 0x9B81, 0x9DC0, 0x9D93, 0x9EAC, 0x4D91, 0xFFFD, 0x93BA,
+    0x9E7B, 0x7089, 0x7348, 0xFFFD, 0x7999, 0x8FB7, 0xFFFD, 0x9942,
+    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+    0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+    0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+    0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+    0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+    0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+    0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+    0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+    0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x00A9,
+    0x2122, 0x2026, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025,
+    0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D,
+    0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
+    0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D,
+    0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045,
+    0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D,
+    0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055,
+    0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D,
+    0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065,
+    0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D,
+    0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075,
+    0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D,
+    0x007E, 0x20AC, 0x20AC, 0x2110, 0x20AC, 0x20AC, 0x309B, 0x309C,
+    0x2E80, 0x31C0, 0x31C1, 0x31C2, 0x31C3, 0x31C4, 0x0000, 0x31C5,
+    0x0000, 0x0000, 0x31C6, 0x31C7, 0x0000, 0x0000, 0x31C8, 0x0000,
+    0x31C9, 0x31CA, 0x31CB, 0x31CC, 0x0000, 0x31CD, 0x31CE, 0xF538,
+    0xF539, 0x0000, 0x0000, 0x9751, 0x0000, 0x4E5B, 0x4EBB, 0x353E,
+    0x5C23, 0x5F51, 0x5FC4, 0x38FA, 0x624C, 0x6535, 0x6B7A, 0x6C35,
+    0x6C3A, 0x706C, 0x722B, 0x4E2C, 0x72AD, 0x0000, 0x7F52, 0x793B,
+    0x7CF9, 0x7F53, 0x0000, 0x34C1, 0x0000, 0x8002, 0x8080, 0x0000,
+    0x0000, 0x535D, 0x8864, 0x89C1, 0x0000, 0x8BA0, 0x8D1D, 0x9485,
+    0x9578, 0x957F, 0x95E8, 0x0000, 0x97E6, 0x9875, 0x98CE, 0x98DE,
+    0x9963, 0x0000, 0x9C7C, 0x9E1F, 0x9EC4, 0x6B6F, 0xF907, 0x4E37,
+    0x0000, 0x961D, 0x6237, 0x94A2, 0x2E84, 0x2E86, 0x2E87, 0x2E88,
+    0x2E8A, 0x2E8C, 0x2E8D, 0x2E95, 0x2E9C, 0x2EA5, 0x2EA7, 0x2EAA,
+    0x2EAC, 0x2EAE, 0x2EB6, 0x2EBC, 0x2EBE, 0x2ECA, 0x2ECC, 0x2ECD,
+    0x2ECF, 0x2ED6, 0x2ED7, 0x2EDE, 0x0000, 0x0000, 0x650A, 0x4E3D,
+    0x6EDD, 0x9D4E, 0x91DF, 0x0000, 0x4F1A, 0x4F28, 0x4FA8, 0x5174,
+    0x519C, 0x51E4, 0x52A1, 0x52A8, 0x533B, 0x534E, 0x53D1, 0x53D8,
+    0x56E2, 0x58F0, 0x5904, 0x5907, 0x5932, 0x5934, 0x5B66, 0x5B9E,
+    0x5B9F, 0x5C9A, 0x5E86, 0x603B, 0x6589, 0x67FE, 0x6804, 0x6865,
+    0x6D4E, 0x70BC, 0x7535, 0x7EA4, 0x7EAC, 0x7EBA, 0x7EC7, 0x7ECF,
+    0x7EDF, 0x7F06, 0x7F37, 0x827A, 0x82CF, 0x836F, 0x89C6, 0x8BBE,
+    0x8BE2, 0x8F66, 0x8F67, 0x8F6E, 0x7411, 0x7CFC, 0x7DCD, 0x6946,
+    0x7AC9, 0x78B8, 0x80BC, 0x8D0B, 0x80F6, 0x0000, 0x809F, 0x9EC7,
+    0x4CCD, 0x9DC9, 0x9E0C, 0x4C3E, 0x0000, 0x0000, 0x9E0A, 0x0000,
+    0x35C1, 0x6E9A, 0x823E, 0x7519, 0x4911, 0x9A6C, 0x9A8F, 0x9F99,
+    0x7987, 0x0000, 0x0000, 0x0000, 0x0000, 0x4E24, 0x4E80, 0x4E87,
+    0x4EBF, 0x4EEB, 0x4F37, 0x344C, 0x4FBD, 0x3E48, 0x5003, 0x347D,
+    0x34A5, 0x5905, 0x51DB, 0x51FC, 0x4E89, 0x5290, 0x5327, 0x35C7,
+    0x53A9, 0x3551, 0x53B0, 0x5423, 0x356D, 0x3572, 0x3681, 0x5493,
+    0x54A3, 0x54B4, 0x54B9, 0x54D0, 0x54EF, 0x5518, 0x5523, 0x5528,
+    0x3598, 0x35A5, 0x35BF, 0x55D7, 0x35C5, 0x0000, 0x4053, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x40BB, 0x0000, 0x5652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x35FB, 0x0000, 0x0000, 0x0000, 0x0000, 0x3F93, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3FF9,
+    0x0000, 0x6432, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x54CC, 0x82C4, 0x55B9, 0x0000, 0x9C26, 0x9AB6,
+    0x0000, 0x80EC, 0x5C1C, 0x0000, 0x8134, 0x3797, 0x0000, 0x91B6,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3609, 0x0000, 0x56AF,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x5A54, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x579C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3703,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x5899, 0x5268, 0x361A, 0x0000, 0x7BB2, 0x5B68, 0x4800, 0x4B2C,
+    0x9F27, 0x49E7, 0x9C1F, 0x9B8D, 0x0000, 0x0000, 0x55FB, 0x35F2,
+    0x5689, 0x5D3E, 0x5D48, 0x3DFC, 0x380F, 0x5DA4, 0x5DB9, 0x3820,
+    0x5F25, 0x5F83, 0x3908, 0x393F, 0x394D, 0x60D7, 0x613D, 0x5CE5,
+    0x3989, 0x61B7, 0x61CF, 0x39B8, 0x622C, 0x62E5, 0x39F8, 0x56B1,
+    0x3A03, 0x63E2, 0x63FB, 0x6407, 0x3A4B, 0x64C0, 0x9F9F, 0x3A97,
+    0x6586, 0x3ABD, 0x65FF, 0x6653, 0x3AF2, 0x6692, 0x3B22, 0x6716,
+    0x3B42, 0x67A4, 0x3B58, 0x684A, 0x6884, 0x3B72, 0x3B71, 0x3B7B,
+    0x6909, 0x6943, 0x725C, 0x6964, 0x699F, 0x6985, 0x69D6, 0x3BDD,
+    0x6A65, 0x6A74, 0x6A71, 0x6A82, 0x3BEC, 0x6A99, 0x3BF2, 0x6AAB,
+    0x6AB5, 0x6AD4, 0x6AF6, 0x6B81, 0x6BC1, 0x6BEA, 0x6C75, 0x6CAA,
+    0x3CCB, 0x6D02, 0x6D06, 0x6D26, 0x6D81, 0x3CEF, 0x6DA4, 0x6DB1,
+    0x6E15, 0x6E18, 0x6E29, 0x6E86, 0x0000, 0x6EBB, 0x6EE2, 0x6EDA,
+    0x9F7F, 0x6EE8, 0x6EE9, 0x6F24, 0x6F34, 0x3D46, 0x0000, 0x6F81,
+    0x6FBE, 0x3D6A, 0x3D75, 0x71B7, 0x5C99, 0x3D8A, 0x702C, 0x3D91,
+    0x7050, 0x7054, 0x706F, 0x707F, 0x0000, 0x43C1, 0x35F1, 0x0000,
+    0x364E, 0x3DAD, 0x0000, 0x667D, 0x7C74, 0x748D, 0x7E92, 0x4503,
+    0x0000, 0x0000, 0x0000, 0x347E, 0x0000, 0x0000, 0x0000, 0x8771,
+    0x63C1, 0x7777, 0x898A, 0x0000, 0x8B4C, 0x0000, 0x492A, 0x0000,
+    0x0000, 0x0000, 0x3AF0, 0x708F, 0x0000, 0x0000, 0x0000, 0x6888,
+    0x0000, 0x9F62, 0x93C6, 0x0000, 0x9366, 0x928F, 0x8614, 0x0000,
+    0x4190, 0x678F, 0x681E, 0x3863, 0x0000, 0x3B19, 0x8496, 0x0000,
+    0x39E2, 0x8480, 0x436E, 0x9771, 0x999B, 0x492D, 0x6F17, 0x0000,
+    0x70A6, 0x0000, 0x7E65, 0x5D2F, 0x3DF3, 0x0000, 0x0000, 0x7DA4,
+    0x8426, 0x5485, 0x0000, 0x0000, 0x577E, 0x0000, 0x0000, 0x3FE5,
+    0x0000, 0x0000, 0x7003, 0x0000, 0x5D70, 0x738F, 0x0000, 0x0000,
+    0x4FC8, 0x7FE7, 0x7310, 0x7338, 0x7341, 0x3EA9, 0x71F5, 0x0000,
+    0x73E1, 0x3ECA, 0x3ED1, 0x7419, 0x741E, 0x741F, 0x3EE2, 0x3EF0,
+    0x3EF4, 0x3EFA, 0x74D3, 0x3F0E, 0x3F53, 0x756D, 0x7572, 0x758D,
+    0x3F7C, 0x75C8, 0x764D, 0x7674, 0x3FDC, 0x767A, 0x7188, 0x5623,
+    0x8980, 0x401D, 0x7743, 0x4039, 0x4045, 0x35DB, 0x7798, 0x406A,
+    0x406F, 0x77BE, 0x77CB, 0x7818, 0x781C, 0x7847, 0x7851, 0x7866,
+    0x8448, 0x0000, 0x7933, 0x7932, 0x4109, 0x7991, 0x7A06, 0x4167,
+    0x41B2, 0x7ABC, 0x8279, 0x41C4, 0x7ACF, 0x7ADB, 0x41CF, 0x7B62,
+    0x7B6C, 0x7B7B, 0x7C12, 0x4260, 0x427A, 0x7C7B, 0x7C9C, 0x428C,
+    0x7CB8, 0x4294, 0x8F93, 0x70C0, 0x0000, 0x7DCF, 0x7DD4, 0x7DD0,
+    0x7DFD, 0x7FB4, 0x729F, 0x4397, 0x8020, 0x8025, 0x802E, 0x8031,
+    0x8054, 0x57B4, 0x70A0, 0x80B7, 0x80E9, 0x43ED, 0x810C, 0x810E,
+    0x8112, 0x8114, 0x4401, 0x3B39, 0x8156, 0x8159, 0x815A, 0x4413,
+    0x817C, 0x4425, 0x442D, 0x81A5, 0x57EF, 0x81C1, 0x81E4, 0x8254,
+    0x448F, 0x8276, 0x82CA, 0x82D8, 0x44B0, 0x8357, 0x9669, 0x8405,
+    0x70F5, 0x8464, 0x8488, 0x4504, 0x84BE, 0x84E1, 0x84F8, 0x8510,
+    0x8538, 0x8552, 0x453B, 0x856F, 0x8570, 0x85E0, 0x4577, 0x8672,
+    0x8692, 0x86EF, 0x9645, 0x4606, 0x4617, 0x88AE, 0x88FF, 0x8924,
+    0x8991, 0x0000, 0x8A38, 0x8A94, 0x8AB4, 0x8C51, 0x8CD4, 0x8CF2,
+    0x8D1C, 0x4798, 0x8DC3, 0x47ED, 0x8E3A, 0x5754, 0x55F5, 0x4837,
+    0x8ECE, 0x8EE2, 0x8EE4, 0x8EED, 0x8EF2, 0x8FC1, 0x8FCA, 0x8FCC,
+    0x9033, 0x48AD, 0x98E0, 0x9213, 0x491E, 0x9228, 0x9258, 0x926B,
+    0x92B1, 0x92AE, 0x92BF, 0x92E3, 0x92EB, 0x92F3, 0x92F4, 0x92FD,
+    0x9343, 0x9384, 0x93AD, 0x4945, 0x4951, 0x9417, 0x941D, 0x942D,
+    0x943E, 0x496A, 0x9454, 0x9479, 0x952D, 0x95A2, 0x49A7, 0x95F4,
+    0x9633, 0x49E5, 0x4A24, 0x9740, 0x4A35, 0x97B2, 0x97C2, 0x4AE4,
+    0x98B9, 0x4B19, 0x98F1, 0x5844, 0x9919, 0x9937, 0x995D, 0x9962,
+    0x4B70, 0x99C5, 0x4B9D, 0x9A3C, 0x9B0F, 0x9B69, 0x9BDD, 0x9BF1,
+    0x9BF4, 0x4C6D, 0x9C20, 0x376F, 0x0000, 0x9D49, 0x9EFE, 0x5650,
+    0x9DBD, 0x9DFC, 0x94F6, 0x8FB6, 0x9EB1, 0x9EBD, 0x9EC6, 0x94DC,
+    0x9EE2, 0x9EF1, 0x9EF8, 0x9F44, 0x0000, 0x0000, 0x0000, 0x94C3,
+    0x0000, 0x94C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x5757, 0x7173,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x549E, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3647, 0x0000,
+    0x0000, 0x0000, 0x5364, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x70BB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7198, 0x0000, 0x69E9,
+    0x36C8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x58B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x5788, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x5965, 0x0000, 0x0000, 0x573F, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x57A1, 0x7151, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x56B9,
+    0x0000, 0x3618, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x949F, 0x0000, 0x36B9,
+    0x0000, 0x0000, 0x56D6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63E6,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x3DF7, 0x0000, 0x0000, 0x8FD0, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x7E9F, 0x0000, 0x0000, 0x4CA4, 0x9547,
+    0x0000, 0x71A2, 0x0000, 0x0000, 0x4D9C, 0x0000, 0x8FBE, 0x8FBA,
+    0x0000, 0x8FB9, 0x0000, 0x4EEA, 0x0000, 0x8E80, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4E9A, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3DC6, 0x0000,
+    0x4E1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x55DE, 0x8786, 0x0000,
+    0x0000, 0x5B90, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4E1A, 0x4E04, 0x5B0D,
+    0x36AC, 0x537D, 0x36A5, 0x589A, 0x0000, 0x57AA, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x57A7, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x9C1B, 0x0000, 0x3E06, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x577A, 0x54DA, 0x717A, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3635, 0x0000,
+    0x5220, 0x3C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+    0x4562, 0x5B1F, 0x0000, 0x9F50, 0x9EA6, 0x0000, 0x51E2, 0x5342,
+    0x66AD, 0x585C, 0x5553, 0x3D85, 0x6160, 0x48AE, 0x97BD, 0x0000,
+    0x60B3, 0x8424, 0x9814, 0x0000, 0x0000, 0x0000, 0x3B2B, 0x3D32,
+    0x0000, 0x7081, 0x5C9C, 0x0000, 0x3730, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0100, 0x00C1, 0x01CD, 0x00C0, 0x0112, 0x00C9, 0x011A,
+    0x00C8, 0x014C, 0x00D3, 0x01D1, 0x00D2, 0xF325, 0x1EBE, 0xF327,
+    0x1EC0, 0x00CA, 0x0101, 0x00E1, 0x01CE, 0x00E0, 0x0251, 0x0113,
+    0x00E9, 0x011B, 0x00E8, 0x012B, 0x00ED, 0x01D0, 0x00EC, 0x014D,
+    0x00F3, 0x01D2, 0x00F2, 0x016B, 0x00FA, 0x01D4, 0x00F9, 0x01D6,
+    0x01D8, 0x01DA, 0x01DC, 0x00FC, 0xF344, 0x1EBF, 0xF346, 0x1EC1,
+    0x00EA, 0x0261, 0x0283, 0x0250, 0x025B, 0x0254, 0x0275, 0x0153,
+    0x00F8, 0x014B, 0x028A, 0x026A, 0x23DA, 0x23DB, 0x2E9D, 0x2EC6,
+    0x2EE3, 0x503B, 0x6DFE, 0x0000, 0x9FA6, 0x3DC9, 0x888F, 0x0000,
+    0x7077, 0x5CF5, 0x4B20, 0x0000, 0x3559, 0x0000, 0x6122, 0x0000,
+    0x8FA7, 0x91F6, 0x7191, 0x6719, 0x73BA, 0x0000, 0x0000, 0x3C8B,
+    0x0000, 0x4B10, 0x78E4, 0x7402, 0x51AE, 0x0000, 0x4009, 0x6A63,
+    0x0000, 0x4223, 0x860F, 0x7A2A, 0x0000, 0x0000, 0x9755, 0x704D,
+    0x5324, 0x0000, 0x93F4, 0x76D9, 0x0000, 0x9FA7, 0x77DD, 0x4EA3,
+    0x4FF0, 0x50BC, 0x4E2F, 0x4F17, 0x9FA8, 0x5434, 0x7D8B, 0x5892,
+    0x58D0, 0x0000, 0x5E92, 0x5E99, 0x5FC2, 0x0000, 0x658B, 0x0000,
+    0x6919, 0x6A43, 0x0000, 0x6CFF, 0x7200, 0x0000, 0x738C, 0x3EDB,
+    0x0000, 0x5B15, 0x74B9, 0x8B83, 0x0000, 0x0000, 0x7A93, 0x7BEC,
+    0x7CC3, 0x7E6C, 0x82F8, 0x8597, 0x9FA9, 0x8890, 0x9FAA, 0x8EB9,
+    0x9FAB, 0x8FCF, 0x855F, 0x99E0, 0x9221, 0x9FAC, 0x0000, 0x0000,
+    0x4071, 0x42A2, 0x5A1A, 0x9868, 0x676B, 0x4276, 0x573D, 0x85D6,
+    0x0000, 0x82BF, 0x0000, 0x4C81, 0x0000, 0x5D7B, 0x0000, 0x0000,
+    0x9FAD, 0x9FAE, 0x5B96, 0x9FAF, 0x7E5B, 0x43F0, 0x4C32, 0x4603,
+    0x45A6, 0x4578, 0x0000, 0x4D77, 0x45B3, 0x0000, 0x4CE2, 0x0000,
+    0x3B95, 0x4736, 0x4744, 0x4C47, 0x4C40, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x0000, 0x4C57, 0x0000, 0x474F, 0x45DA, 0x4C85, 0x0000,
+    0x4D07, 0x4AA4, 0x46A1, 0x0000, 0x7225, 0x0000, 0x0000, 0x0000,
+    0x0000, 0x664D, 0x56FB, 0x7D95, 0x591D, 0x0000, 0x3DF4, 0x9734,
+    0x0000, 0x5BDB, 0x0000, 0x5AA4, 0x3625, 0x0000, 0x5AD1, 0x5BB7,
+    0x5CFC, 0x676E, 0x8593, 0x0000, 0x7461, 0x749D, 0x0000, 0x66E7,
+    0x6E57, 0x79CA, 0x3D88, 0x44C3, 0x0000, 0x0000, 0x439A, 0x4536,
+    0x5CD5, 0x0000, 0x8AF9, 0x5C78, 0x3D12, 0x0000, 0x5D78, 0x9FB2,
+    0x7157, 0x4558, 0x0000, 0x0000, 0x4C77, 0x3978, 0x344A, 0x0000,
+    0x0000, 0x8ACC, 0x4FB4, 0x0000, 0x59BF, 0x816C, 0x9856, 0x0000,
+    0x5F3B, 0x0000, 0x0000, 0x0000, 0x4102, 0x46BB, 0x0000, 0x3F07,
+    0x9FB3, 0x0000, 0x40F8, 0x37D6, 0x46F7, 0x0000, 0x417C, 0x0000,
+    0x0000, 0x456D, 0x38D4, 0x0000, 0x4561, 0x451B, 0x4D89, 0x4C7B,
+    0x4D76, 0x45EA, 0x3FC8, 0x0000, 0x3661, 0x44DE, 0x44BD, 0x41ED,
+};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/B5pc-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/B5pc-H_0.cpp
new file mode 100644
index 0000000..e12a859
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/B5pc-H_0.cpp
@@ -0,0 +1,91 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_B5pc_H_0[247 * 3] = {

+    0x0020, 0x007E, 0x0001, 0x0080, 0x0080, 0x003D, 0x00FD, 0x00FF, 0x0060,

+    0xA140, 0xA158, 0x0063, 0xA159, 0xA15C, 0x35AF, 0xA15D, 0xA17E, 0x0080,

+    0xA1A1, 0xA1F5, 0x00A2, 0xA1F6, 0xA1F6, 0x00F8, 0xA1F7, 0xA1F7, 0x00F7,

+    0xA1F8, 0xA1FE, 0x00F9, 0xA240, 0xA27E, 0x0100, 0xA2A1, 0xA2FE, 0x013F,

+    0xA340, 0xA37E, 0x019D, 0xA3A1, 0xA3BB, 0x01DC, 0xA3BD, 0xA3BF, 0x01F7,

+    0xA3C0, 0xA3E0, 0x0232, 0xA440, 0xA47E, 0x0253, 0xA4A1, 0xA4FE, 0x0292,

+    0xA540, 0xA57E, 0x02F0, 0xA5A1, 0xA5FE, 0x032F, 0xA640, 0xA67E, 0x038D,

+    0xA6A1, 0xA6FE, 0x03CC, 0xA740, 0xA77E, 0x042A, 0xA7A1, 0xA7FE, 0x0469,

+    0xA840, 0xA87E, 0x04C7, 0xA8A1, 0xA8FE, 0x0506, 0xA940, 0xA97E, 0x0564,

+    0xA9A1, 0xA9FE, 0x05A3, 0xAA40, 0xAA7E, 0x0601, 0xAAA1, 0xAAFE, 0x0640,

+    0xAB40, 0xAB7E, 0x069E, 0xABA1, 0xABFE, 0x06DD, 0xAC40, 0xAC7E, 0x073B,

+    0xACA1, 0xACFD, 0x077A, 0xACFE, 0xACFE, 0x097F, 0xAD40, 0xAD7E, 0x07D7,

+    0xADA1, 0xADFE, 0x0816, 0xAE40, 0xAE7E, 0x0874, 0xAEA1, 0xAEFE, 0x08B3,

+    0xAF40, 0xAF7E, 0x0911, 0xAFA1, 0xAFCF, 0x0950, 0xAFD0, 0xAFFE, 0x0980,

+    0xB040, 0xB07E, 0x09AF, 0xB0A1, 0xB0FE, 0x09EE, 0xB140, 0xB17E, 0x0A4C,

+    0xB1A1, 0xB1FE, 0x0A8B, 0xB240, 0xB27E, 0x0AE9, 0xB2A1, 0xB2FE, 0x0B28,

+    0xB340, 0xB37E, 0x0B86, 0xB3A1, 0xB3FE, 0x0BC5, 0xB440, 0xB47E, 0x0C23,

+    0xB4A1, 0xB4FE, 0x0C62, 0xB540, 0xB57E, 0x0CC0, 0xB5A1, 0xB5FE, 0x0CFF,

+    0xB640, 0xB67E, 0x0D5D, 0xB6A1, 0xB6FE, 0x0D9C, 0xB740, 0xB77E, 0x0DFA,

+    0xB7A1, 0xB7FE, 0x0E39, 0xB840, 0xB87E, 0x0E97, 0xB8A1, 0xB8FE, 0x0ED6,

+    0xB940, 0xB97E, 0x0F34, 0xB9A1, 0xB9FE, 0x0F73, 0xBA40, 0xBA7E, 0x0FD1,

+    0xBAA1, 0xBAFE, 0x1010, 0xBB40, 0xBB7E, 0x106E, 0xBBA1, 0xBBC7, 0x10AD,

+    0xBBC8, 0xBBFE, 0x10D5, 0xBC40, 0xBC7E, 0x110C, 0xBCA1, 0xBCFE, 0x114B,

+    0xBD40, 0xBD7E, 0x11A9, 0xBDA1, 0xBDFE, 0x11E8, 0xBE40, 0xBE51, 0x1246,

+    0xBE52, 0xBE52, 0x10D4, 0xBE53, 0xBE7E, 0x1258, 0xBEA1, 0xBEFE, 0x1284,

+    0xBF40, 0xBF7E, 0x12E2, 0xBFA1, 0xBFFE, 0x1321, 0xC040, 0xC07E, 0x137F,

+    0xC0A1, 0xC0FE, 0x13BE, 0xC140, 0xC17E, 0x141C, 0xC1A1, 0xC1AA, 0x145B,

+    0xC1AB, 0xC1FE, 0x1466, 0xC240, 0xC27E, 0x14BA, 0xC2A1, 0xC2CA, 0x14F9,

+    0xC2CB, 0xC2CB, 0x1465, 0xC2CC, 0xC2FE, 0x1523, 0xC340, 0xC360, 0x1556,

+    0xC361, 0xC37E, 0x1578, 0xC3A1, 0xC3B8, 0x1596, 0xC3B9, 0xC3B9, 0x15AF,

+    0xC3BA, 0xC3BA, 0x15AE, 0xC3BB, 0xC3FE, 0x15B0, 0xC440, 0xC455, 0x15F4,

+    0xC456, 0xC456, 0x1577, 0xC457, 0xC47E, 0x160A, 0xC4A1, 0xC4FE, 0x1632,

+    0xC540, 0xC57E, 0x1690, 0xC5A1, 0xC5FE, 0x16CF, 0xC640, 0xC67E, 0x172D,

+    0xC940, 0xC949, 0x176C, 0xC94A, 0xC94A, 0x0274, 0xC94B, 0xC96B, 0x1776,

+    0xC96C, 0xC97E, 0x1798, 0xC9A1, 0xC9BD, 0x17AB, 0xC9BE, 0xC9BE, 0x1797,

+    0xC9BF, 0xC9EC, 0x17C8, 0xC9ED, 0xC9FE, 0x17F7, 0xCA40, 0xCA7E, 0x1809,

+    0xCAA1, 0xCAF6, 0x1848, 0xCAF7, 0xCAF7, 0x17F6, 0xCAF8, 0xCAFE, 0x189E,

+    0xCB40, 0xCB7E, 0x18A5, 0xCBA1, 0xCBFE, 0x18E4, 0xCC40, 0xCC7E, 0x1942,

+    0xCCA1, 0xCCFE, 0x1981, 0xCD40, 0xCD7E, 0x19DF, 0xCDA1, 0xCDFE, 0x1A1E,

+    0xCE40, 0xCE7E, 0x1A7C, 0xCEA1, 0xCEFE, 0x1ABB, 0xCF40, 0xCF7E, 0x1B19,

+    0xCFA1, 0xCFFE, 0x1B58, 0xD040, 0xD07E, 0x1BB6, 0xD0A1, 0xD0FE, 0x1BF5,

+    0xD140, 0xD17E, 0x1C53, 0xD1A1, 0xD1FE, 0x1C92, 0xD240, 0xD27E, 0x1CF0,

+    0xD2A1, 0xD2FE, 0x1D2F, 0xD340, 0xD37E, 0x1D8D, 0xD3A1, 0xD3FE, 0x1DCC,

+    0xD440, 0xD47E, 0x1E2A, 0xD4A1, 0xD4FE, 0x1E69, 0xD540, 0xD57E, 0x1EC7,

+    0xD5A1, 0xD5FE, 0x1F06, 0xD640, 0xD67E, 0x1F64, 0xD6A1, 0xD6CB, 0x1FA3,

+    0xD6CC, 0xD6CC, 0x2254, 0xD6CD, 0xD6FE, 0x1FCF, 0xD740, 0xD779, 0x2001,

+    0xD77A, 0xD77A, 0x22B9, 0xD77B, 0xD77E, 0x203B, 0xD7A1, 0xD7FE, 0x203F,

+    0xD840, 0xD87E, 0x209D, 0xD8A1, 0xD8FE, 0x20DC, 0xD940, 0xD97E, 0x213A,

+    0xD9A1, 0xD9FE, 0x2179, 0xDA40, 0xDA7E, 0x21D7, 0xDAA1, 0xDADE, 0x2216,

+    0xDADF, 0xDADF, 0x1FCE, 0xDAE0, 0xDAFE, 0x2255, 0xDB40, 0xDB7E, 0x2274,

+    0xDBA1, 0xDBA6, 0x22B3, 0xDBA7, 0xDBFE, 0x22BA, 0xDC40, 0xDC7E, 0x2312,

+    0xDCA1, 0xDCFE, 0x2351, 0xDD40, 0xDD7E, 0x23AF, 0xDDA1, 0xDDFB, 0x23EE,

+    0xDDFC, 0xDDFC, 0x2381, 0xDDFD, 0xDDFE, 0x2449, 0xDE40, 0xDE7E, 0x244B,

+    0xDEA1, 0xDEFE, 0x248A, 0xDF40, 0xDF7E, 0x24E8, 0xDFA1, 0xDFFE, 0x2527,

+    0xE040, 0xE07E, 0x2585, 0xE0A1, 0xE0FE, 0x25C4, 0xE140, 0xE17E, 0x2622,

+    0xE1A1, 0xE1FE, 0x2661, 0xE240, 0xE27E, 0x26BF, 0xE2A1, 0xE2FE, 0x26FE,

+    0xE340, 0xE37E, 0x275C, 0xE3A1, 0xE3FE, 0x279B, 0xE440, 0xE47E, 0x27F9,

+    0xE4A1, 0xE4FE, 0x2838, 0xE540, 0xE57E, 0x2896, 0xE5A1, 0xE5FE, 0x28D5,

+    0xE640, 0xE67E, 0x2933, 0xE6A1, 0xE6FE, 0x2972, 0xE740, 0xE77E, 0x29D0,

+    0xE7A1, 0xE7FE, 0x2A0F, 0xE840, 0xE87E, 0x2A6D, 0xE8A1, 0xE8A2, 0x2AAC,

+    0xE8A3, 0xE8FE, 0x2AAF, 0xE940, 0xE975, 0x2B0B, 0xE976, 0xE97E, 0x2B42,

+    0xE9A1, 0xE9FE, 0x2B4B, 0xEA40, 0xEA7E, 0x2BA9, 0xEAA1, 0xEAFE, 0x2BE8,

+    0xEB40, 0xEB5A, 0x2C46, 0xEB5B, 0xEB7E, 0x2C62, 0xEBA1, 0xEBF0, 0x2C86,

+    0xEBF1, 0xEBF1, 0x2AAE, 0xEBF2, 0xEBFE, 0x2CD6, 0xEC40, 0xEC7E, 0x2CE3,

+    0xECA1, 0xECDD, 0x2D22, 0xECDE, 0xECDE, 0x2B41, 0xECDF, 0xECFE, 0x2D5F,

+    0xED40, 0xED7E, 0x2D7F, 0xEDA1, 0xEDA9, 0x2DBE, 0xEDAA, 0xEDFE, 0x2DC8,

+    0xEE40, 0xEE7E, 0x2E1D, 0xEEA1, 0xEEEA, 0x2E5C, 0xEEEB, 0xEEEB, 0x3014,

+    0xEEEC, 0xEEFE, 0x2EA6, 0xEF40, 0xEF7E, 0x2EB9, 0xEFA1, 0xEFFE, 0x2EF8,

+    0xF040, 0xF055, 0x2F56, 0xF056, 0xF056, 0x2DC7, 0xF057, 0xF07E, 0x2F6C,

+    0xF0A1, 0xF0CA, 0x2F94, 0xF0CB, 0xF0CB, 0x2C61, 0xF0CC, 0xF0FE, 0x2FBE,

+    0xF140, 0xF162, 0x2FF1, 0xF163, 0xF16A, 0x3015, 0xF16B, 0xF16B, 0x3160,

+    0xF16C, 0xF17E, 0x301D, 0xF1A1, 0xF1FE, 0x3030, 0xF240, 0xF267, 0x308E,

+    0xF268, 0xF268, 0x31EF, 0xF269, 0xF27E, 0x30B6, 0xF2A1, 0xF2C2, 0x30CC,

+    0xF2C3, 0xF2FE, 0x30EF, 0xF340, 0xF374, 0x312B, 0xF375, 0xF37E, 0x3161,

+    0xF3A1, 0xF3FE, 0x316B, 0xF440, 0xF465, 0x31C9, 0xF466, 0xF47E, 0x31F0,

+    0xF4A1, 0xF4B4, 0x3209, 0xF4B5, 0xF4B5, 0x30EE, 0xF4B6, 0xF4FC, 0x321D,

+    0xF4FD, 0xF4FE, 0x3265, 0xF540, 0xF57E, 0x3267, 0xF5A1, 0xF5FE, 0x32A6,

+    0xF640, 0xF662, 0x3304, 0xF663, 0xF663, 0x3264, 0xF664, 0xF67E, 0x3327,

+    0xF6A1, 0xF6FE, 0x3342, 0xF740, 0xF77E, 0x33A0, 0xF7A1, 0xF7FE, 0x33DF,

+    0xF840, 0xF87E, 0x343D, 0xF8A1, 0xF8FE, 0x347C, 0xF940, 0xF976, 0x34DA,

+    0xF977, 0xF97E, 0x3512, 0xF9A1, 0xF9C3, 0x351A, 0xF9C4, 0xF9C4, 0x3511,

+    0xF9C5, 0xF9C5, 0x353D, 0xF9C6, 0xF9C6, 0x3549, 0xF9C7, 0xF9D1, 0x353E,

+    0xF9D2, 0xF9D5, 0x354A,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/B5pc-V_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/B5pc-V_0.cpp
new file mode 100644
index 0000000..188aefc
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/B5pc-V_0.cpp
@@ -0,0 +1,12 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_B5pc_V_0[12 * 3] = {

+    0xA14B, 0xA14B, 0x354E, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C, 0x35B1,

+    0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165, 0xA166, 0x008A,

+    0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092, 0xA171, 0xA172, 0x0096,

+    0xA175, 0xA176, 0x009A, 0xA179, 0xA17A, 0x009E, 0xA1E3, 0xA1E3, 0x354F,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp
new file mode 100644
index 0000000..57ae87c
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp
@@ -0,0 +1,182 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_CNS_EUC_H_0[157 * 3] = {

+    0x0020, 0x007E, 0x3550, 0xA1A1, 0xA1FE, 0x0063, 0xA2A1, 0xA2FE, 0x00C1,

+    0xA3A1, 0xA3CE, 0x011F, 0xA4A1, 0xA4FE, 0x014D, 0xA5A1, 0xA5EC, 0x01AB,

+    0xA5EE, 0xA5F0, 0x01F7, 0xA6A1, 0xA6BE, 0x01FA, 0xA7A1, 0xA7A1, 0x0253,

+    0xA7A2, 0xA7A4, 0x0218, 0xA7A5, 0xA7A5, 0x0254, 0xA7A6, 0xA7A6, 0x021B,

+    0xA7A7, 0xA7A7, 0x025A, 0xA7A8, 0xA7A8, 0x021C, 0xA7A9, 0xA7AC, 0x025B,

+    0xA7AD, 0xA7AF, 0x021D, 0xA7B0, 0xA7B0, 0x025F, 0xA7B1, 0xA7B1, 0x176E,

+    0xA7B2, 0xA7B2, 0x0260, 0xA7B3, 0xA7B3, 0x0262, 0xA7B4, 0xA7B4, 0x0220,

+    0xA7B5, 0xA7B5, 0x0263, 0xA7B6, 0xA7B6, 0x176F, 0xA7B7, 0xA7B7, 0x0221,

+    0xA7B8, 0xA7B9, 0x0264, 0xA7BA, 0xA7BA, 0x0222, 0xA7BB, 0xA7BB, 0x1770,

+    0xA7BC, 0xA7BC, 0x0223, 0xA7BD, 0xA7BD, 0x0266, 0xA7BE, 0xA7BE, 0x0279,

+    0xA7BF, 0xA7BF, 0x1775, 0xA7C0, 0xA7C1, 0x027A, 0xA7C2, 0xA7C2, 0x0224,

+    0xA7C3, 0xA7C6, 0x027C, 0xA7C7, 0xA7C7, 0x0225, 0xA7C8, 0xA7CB, 0x0282,

+    0xA7CC, 0xA7CC, 0x1776, 0xA7CD, 0xA7CD, 0x0286, 0xA7CE, 0xA7CE, 0x0226,

+    0xA7CF, 0xA7D0, 0x0288, 0xA7D1, 0xA7D2, 0x028C, 0xA7D3, 0xA7D5, 0x0227,

+    0xA7D6, 0xA7D8, 0x028E, 0xA7D9, 0xA7DA, 0x022A, 0xA7DB, 0xA7DB, 0x1777,

+    0xA7DC, 0xA7DF, 0x02D0, 0xA7E0, 0xA7E0, 0x02D5, 0xA7E1, 0xA7E1, 0x022C,

+    0xA7E2, 0xA7E5, 0x02D6, 0xA7E6, 0xA7E6, 0x022D, 0xA7E7, 0xA7ED, 0x02DA,

+    0xA7EE, 0xA7EE, 0x178A, 0xA7EF, 0xA7F2, 0x02E1, 0xA7F3, 0xA7F3, 0x178C,

+    0xA7F4, 0xA7F8, 0x02E5, 0xA7F9, 0xA7F9, 0x178D, 0xA7FA, 0xA7FD, 0x02EA,

+    0xA7FE, 0xA7FE, 0x0356, 0xA8A1, 0xA8A6, 0x0357, 0xA8A7, 0xA8A7, 0x035E,

+    0xA8A8, 0xA8A8, 0x0362, 0xA8A9, 0xA8AA, 0x022E, 0xA8AB, 0xA8B2, 0x0363,

+    0xA8B3, 0xA8B3, 0x17B2, 0xA8B4, 0xA8B6, 0x036B, 0xA8B7, 0xA8BA, 0x03F6,

+    0xA8BB, 0xA8BB, 0x1812, 0xA8BC, 0xA8BE, 0x03FA, 0xA8BF, 0xA8C3, 0x03FE,

+    0xA8C4, 0xA8CC, 0x0405, 0xA8CD, 0xA8CD, 0x1813, 0xA8CE, 0xA8CE, 0x1818,

+    0xA8CF, 0xA8D2, 0x040F, 0xA8D3, 0xA8D3, 0x1819, 0xA8D4, 0xA8D9, 0x0508,

+    0xA8DA, 0xA8DA, 0x18E7, 0xA8DB, 0xA8E2, 0x050E, 0xA8E3, 0xA8E3, 0x0230,

+    0xA8E4, 0xA8E4, 0x051B, 0xA8E5, 0xA8E7, 0x0520, 0xA8E8, 0xA8EB, 0x0696,

+    0xA8EC, 0xA8EC, 0x0231, 0xA8ED, 0xA8F0, 0x069F, 0xA8F1, 0xA8FB, 0x0826,

+    0xA8FC, 0xA8FE, 0x09F5, 0xA9A1, 0xA9A1, 0x1E33, 0xA9A2, 0xA9A2, 0x09F8,

+    0xA9A3, 0xA9A3, 0x1E34, 0xA9A4, 0xA9A5, 0x09F9, 0xA9A6, 0xA9AB, 0x0BE1,

+    0xA9AC, 0xA9AE, 0x0DBB, 0xA9AF, 0xA9AF, 0x2360, 0xA9B0, 0xA9B0, 0x2612,

+    0xA9B1, 0xA9B3, 0x0F7B, 0xA9B4, 0xA9B5, 0x1100, 0xA9B6, 0xA9B6, 0x1289,

+    0xA9B7, 0xA9B8, 0x13B2, 0xA9B9, 0xA9B9, 0x2F0D, 0xC2A1, 0xC2C1, 0x0232,

+    0xC4A1, 0xC4FE, 0x0253, 0xC5A1, 0xC5FE, 0x02B1, 0xC6A1, 0xC6FE, 0x030F,

+    0xC7A1, 0xC7FE, 0x036D, 0xC8A1, 0xC8FE, 0x03CB, 0xC9A1, 0xC9FE, 0x0429,

+    0xCAA1, 0xCAFE, 0x0487, 0xCBA1, 0xCBFE, 0x04E5, 0xCCA1, 0xCCFE, 0x0543,

+    0xCDA1, 0xCDFE, 0x05A1, 0xCEA1, 0xCEFE, 0x05FF, 0xCFA1, 0xCFFE, 0x065D,

+    0xD0A1, 0xD0FE, 0x06BB, 0xD1A1, 0xD1FE, 0x0719, 0xD2A1, 0xD2FE, 0x0777,

+    0xD3A1, 0xD3FE, 0x07D5, 0xD4A1, 0xD4FE, 0x0833, 0xD5A1, 0xD5FE, 0x0891,

+    0xD6A1, 0xD6FE, 0x08EF, 0xD7A1, 0xD7FE, 0x094D, 0xD8A1, 0xD8FE, 0x09AB,

+    0xD9A1, 0xD9FE, 0x0A09, 0xDAA1, 0xDAFE, 0x0A67, 0xDBA1, 0xDBFE, 0x0AC5,

+    0xDCA1, 0xDCFE, 0x0B23, 0xDDA1, 0xDDFE, 0x0B81, 0xDEA1, 0xDEFE, 0x0BDF,

+    0xDFA1, 0xDFFE, 0x0C3D, 0xE0A1, 0xE0FE, 0x0C9B, 0xE1A1, 0xE1FE, 0x0CF9,

+    0xE2A1, 0xE2FE, 0x0D57, 0xE3A1, 0xE3FE, 0x0DB5, 0xE4A1, 0xE4FE, 0x0E13,

+    0xE5A1, 0xE5FE, 0x0E71, 0xE6A1, 0xE6FE, 0x0ECF, 0xE7A1, 0xE7FE, 0x0F2D,

+    0xE8A1, 0xE8FE, 0x0F8B, 0xE9A1, 0xE9FE, 0x0FE9, 0xEAA1, 0xEAFE, 0x1047,

+    0xEBA1, 0xEBFE, 0x10A5, 0xECA1, 0xECFE, 0x1103, 0xEDA1, 0xEDFE, 0x1161,

+    0xEEA1, 0xEEFE, 0x11BF, 0xEFA1, 0xEFFE, 0x121D, 0xF0A1, 0xF0FE, 0x127B,

+    0xF1A1, 0xF1FE, 0x12D9, 0xF2A1, 0xF2FE, 0x1337, 0xF3A1, 0xF3FE, 0x1395,

+    0xF4A1, 0xF4FE, 0x13F3, 0xF5A1, 0xF5FE, 0x1451, 0xF6A1, 0xF6FE, 0x14AF,

+    0xF7A1, 0xF7FE, 0x150D, 0xF8A1, 0xF8FE, 0x156B, 0xF9A1, 0xF9FE, 0x15C9,

+    0xFAA1, 0xFAFE, 0x1627, 0xFBA1, 0xFBFE, 0x1685, 0xFCA1, 0xFCFE, 0x16E3,

+    0xFDA1, 0xFDCB, 0x1741,

+};

+extern const unsigned short g_FXCMAP_CNS_EUC_H_0_DWord[238 * 4] = {

+    0x8EA1, 0xA1A1, 0xA1FE, 0x0063, 0x8EA1, 0xA2A1, 0xA2FE, 0x00C1,

+    0x8EA1, 0xA3A1, 0xA3CE, 0x011F, 0x8EA1, 0xA4A1, 0xA4FE, 0x014D,

+    0x8EA1, 0xA5A1, 0xA5EC, 0x01AB, 0x8EA1, 0xA5EE, 0xA5F0, 0x01F7,

+    0x8EA1, 0xA6A1, 0xA6BE, 0x01FA, 0x8EA1, 0xA7A1, 0xA7A1, 0x0253,

+    0x8EA1, 0xA7A2, 0xA7A4, 0x0218, 0x8EA1, 0xA7A5, 0xA7A5, 0x0254,

+    0x8EA1, 0xA7A6, 0xA7A6, 0x021B, 0x8EA1, 0xA7A7, 0xA7A7, 0x025A,

+    0x8EA1, 0xA7A8, 0xA7A8, 0x021C, 0x8EA1, 0xA7A9, 0xA7AC, 0x025B,

+    0x8EA1, 0xA7AD, 0xA7AF, 0x021D, 0x8EA1, 0xA7B0, 0xA7B0, 0x025F,

+    0x8EA1, 0xA7B1, 0xA7B1, 0x176E, 0x8EA1, 0xA7B2, 0xA7B2, 0x0260,

+    0x8EA1, 0xA7B3, 0xA7B3, 0x0262, 0x8EA1, 0xA7B4, 0xA7B4, 0x0220,

+    0x8EA1, 0xA7B5, 0xA7B5, 0x0263, 0x8EA1, 0xA7B6, 0xA7B6, 0x176F,

+    0x8EA1, 0xA7B7, 0xA7B7, 0x0221, 0x8EA1, 0xA7B8, 0xA7B9, 0x0264,

+    0x8EA1, 0xA7BA, 0xA7BA, 0x0222, 0x8EA1, 0xA7BB, 0xA7BB, 0x1770,

+    0x8EA1, 0xA7BC, 0xA7BC, 0x0223, 0x8EA1, 0xA7BD, 0xA7BD, 0x0266,

+    0x8EA1, 0xA7BE, 0xA7BE, 0x0279, 0x8EA1, 0xA7BF, 0xA7BF, 0x1775,

+    0x8EA1, 0xA7C0, 0xA7C1, 0x027A, 0x8EA1, 0xA7C2, 0xA7C2, 0x0224,

+    0x8EA1, 0xA7C3, 0xA7C6, 0x027C, 0x8EA1, 0xA7C7, 0xA7C7, 0x0225,

+    0x8EA1, 0xA7C8, 0xA7CB, 0x0282, 0x8EA1, 0xA7CC, 0xA7CC, 0x1776,

+    0x8EA1, 0xA7CD, 0xA7CD, 0x0286, 0x8EA1, 0xA7CE, 0xA7CE, 0x0226,

+    0x8EA1, 0xA7CF, 0xA7D0, 0x0288, 0x8EA1, 0xA7D1, 0xA7D2, 0x028C,

+    0x8EA1, 0xA7D3, 0xA7D5, 0x0227, 0x8EA1, 0xA7D6, 0xA7D8, 0x028E,

+    0x8EA1, 0xA7D9, 0xA7DA, 0x022A, 0x8EA1, 0xA7DB, 0xA7DB, 0x1777,

+    0x8EA1, 0xA7DC, 0xA7DF, 0x02D0, 0x8EA1, 0xA7E0, 0xA7E0, 0x02D5,

+    0x8EA1, 0xA7E1, 0xA7E1, 0x022C, 0x8EA1, 0xA7E2, 0xA7E5, 0x02D6,

+    0x8EA1, 0xA7E6, 0xA7E6, 0x022D, 0x8EA1, 0xA7E7, 0xA7ED, 0x02DA,

+    0x8EA1, 0xA7EE, 0xA7EE, 0x178A, 0x8EA1, 0xA7EF, 0xA7F2, 0x02E1,

+    0x8EA1, 0xA7F3, 0xA7F3, 0x178C, 0x8EA1, 0xA7F4, 0xA7F8, 0x02E5,

+    0x8EA1, 0xA7F9, 0xA7F9, 0x178D, 0x8EA1, 0xA7FA, 0xA7FD, 0x02EA,

+    0x8EA1, 0xA7FE, 0xA7FE, 0x0356, 0x8EA1, 0xA8A1, 0xA8A6, 0x0357,

+    0x8EA1, 0xA8A7, 0xA8A7, 0x035E, 0x8EA1, 0xA8A8, 0xA8A8, 0x0362,

+    0x8EA1, 0xA8A9, 0xA8AA, 0x022E, 0x8EA1, 0xA8AB, 0xA8B2, 0x0363,

+    0x8EA1, 0xA8B3, 0xA8B3, 0x17B2, 0x8EA1, 0xA8B4, 0xA8B6, 0x036B,

+    0x8EA1, 0xA8B7, 0xA8BA, 0x03F6, 0x8EA1, 0xA8BB, 0xA8BB, 0x1812,

+    0x8EA1, 0xA8BC, 0xA8BE, 0x03FA, 0x8EA1, 0xA8BF, 0xA8C3, 0x03FE,

+    0x8EA1, 0xA8C4, 0xA8CC, 0x0405, 0x8EA1, 0xA8CD, 0xA8CD, 0x1813,

+    0x8EA1, 0xA8CE, 0xA8CE, 0x1818, 0x8EA1, 0xA8CF, 0xA8D2, 0x040F,

+    0x8EA1, 0xA8D3, 0xA8D3, 0x1819, 0x8EA1, 0xA8D4, 0xA8D9, 0x0508,

+    0x8EA1, 0xA8DA, 0xA8DA, 0x18E7, 0x8EA1, 0xA8DB, 0xA8E2, 0x050E,

+    0x8EA1, 0xA8E3, 0xA8E3, 0x0230, 0x8EA1, 0xA8E4, 0xA8E4, 0x051B,

+    0x8EA1, 0xA8E5, 0xA8E7, 0x0520, 0x8EA1, 0xA8E8, 0xA8EB, 0x0696,

+    0x8EA1, 0xA8EC, 0xA8EC, 0x0231, 0x8EA1, 0xA8ED, 0xA8F0, 0x069F,

+    0x8EA1, 0xA8F1, 0xA8FB, 0x0826, 0x8EA1, 0xA8FC, 0xA8FE, 0x09F5,

+    0x8EA1, 0xA9A1, 0xA9A1, 0x1E33, 0x8EA1, 0xA9A2, 0xA9A2, 0x09F8,

+    0x8EA1, 0xA9A3, 0xA9A3, 0x1E34, 0x8EA1, 0xA9A4, 0xA9A5, 0x09F9,

+    0x8EA1, 0xA9A6, 0xA9AB, 0x0BE1, 0x8EA1, 0xA9AC, 0xA9AE, 0x0DBB,

+    0x8EA1, 0xA9AF, 0xA9AF, 0x2360, 0x8EA1, 0xA9B0, 0xA9B0, 0x2612,

+    0x8EA1, 0xA9B1, 0xA9B3, 0x0F7B, 0x8EA1, 0xA9B4, 0xA9B5, 0x1100,

+    0x8EA1, 0xA9B6, 0xA9B6, 0x1289, 0x8EA1, 0xA9B7, 0xA9B8, 0x13B2,

+    0x8EA1, 0xA9B9, 0xA9B9, 0x2F0D, 0x8EA1, 0xC2A1, 0xC2C1, 0x0232,

+    0x8EA1, 0xC4A1, 0xC4FE, 0x0253, 0x8EA1, 0xC5A1, 0xC5FE, 0x02B1,

+    0x8EA1, 0xC6A1, 0xC6FE, 0x030F, 0x8EA1, 0xC7A1, 0xC7FE, 0x036D,

+    0x8EA1, 0xC8A1, 0xC8FE, 0x03CB, 0x8EA1, 0xC9A1, 0xC9FE, 0x0429,

+    0x8EA1, 0xCAA1, 0xCAFE, 0x0487, 0x8EA1, 0xCBA1, 0xCBFE, 0x04E5,

+    0x8EA1, 0xCCA1, 0xCCFE, 0x0543, 0x8EA1, 0xCDA1, 0xCDFE, 0x05A1,

+    0x8EA1, 0xCEA1, 0xCEFE, 0x05FF, 0x8EA1, 0xCFA1, 0xCFFE, 0x065D,

+    0x8EA1, 0xD0A1, 0xD0FE, 0x06BB, 0x8EA1, 0xD1A1, 0xD1FE, 0x0719,

+    0x8EA1, 0xD2A1, 0xD2FE, 0x0777, 0x8EA1, 0xD3A1, 0xD3FE, 0x07D5,

+    0x8EA1, 0xD4A1, 0xD4FE, 0x0833, 0x8EA1, 0xD5A1, 0xD5FE, 0x0891,

+    0x8EA1, 0xD6A1, 0xD6FE, 0x08EF, 0x8EA1, 0xD7A1, 0xD7FE, 0x094D,

+    0x8EA1, 0xD8A1, 0xD8FE, 0x09AB, 0x8EA1, 0xD9A1, 0xD9FE, 0x0A09,

+    0x8EA1, 0xDAA1, 0xDAFE, 0x0A67, 0x8EA1, 0xDBA1, 0xDBFE, 0x0AC5,

+    0x8EA1, 0xDCA1, 0xDCFE, 0x0B23, 0x8EA1, 0xDDA1, 0xDDFE, 0x0B81,

+    0x8EA1, 0xDEA1, 0xDEFE, 0x0BDF, 0x8EA1, 0xDFA1, 0xDFFE, 0x0C3D,

+    0x8EA1, 0xE0A1, 0xE0FE, 0x0C9B, 0x8EA1, 0xE1A1, 0xE1FE, 0x0CF9,

+    0x8EA1, 0xE2A1, 0xE2FE, 0x0D57, 0x8EA1, 0xE3A1, 0xE3FE, 0x0DB5,

+    0x8EA1, 0xE4A1, 0xE4FE, 0x0E13, 0x8EA1, 0xE5A1, 0xE5FE, 0x0E71,

+    0x8EA1, 0xE6A1, 0xE6FE, 0x0ECF, 0x8EA1, 0xE7A1, 0xE7FE, 0x0F2D,

+    0x8EA1, 0xE8A1, 0xE8FE, 0x0F8B, 0x8EA1, 0xE9A1, 0xE9FE, 0x0FE9,

+    0x8EA1, 0xEAA1, 0xEAFE, 0x1047, 0x8EA1, 0xEBA1, 0xEBFE, 0x10A5,

+    0x8EA1, 0xECA1, 0xECFE, 0x1103, 0x8EA1, 0xEDA1, 0xEDFE, 0x1161,

+    0x8EA1, 0xEEA1, 0xEEFE, 0x11BF, 0x8EA1, 0xEFA1, 0xEFFE, 0x121D,

+    0x8EA1, 0xF0A1, 0xF0FE, 0x127B, 0x8EA1, 0xF1A1, 0xF1FE, 0x12D9,

+    0x8EA1, 0xF2A1, 0xF2FE, 0x1337, 0x8EA1, 0xF3A1, 0xF3FE, 0x1395,

+    0x8EA1, 0xF4A1, 0xF4FE, 0x13F3, 0x8EA1, 0xF5A1, 0xF5FE, 0x1451,

+    0x8EA1, 0xF6A1, 0xF6FE, 0x14AF, 0x8EA1, 0xF7A1, 0xF7FE, 0x150D,

+    0x8EA1, 0xF8A1, 0xF8FE, 0x156B, 0x8EA1, 0xF9A1, 0xF9FE, 0x15C9,

+    0x8EA1, 0xFAA1, 0xFAFE, 0x1627, 0x8EA1, 0xFBA1, 0xFBFE, 0x1685,

+    0x8EA1, 0xFCA1, 0xFCFE, 0x16E3, 0x8EA1, 0xFDA1, 0xFDCB, 0x1741,

+    0x8EA2, 0xA1A1, 0xA1FE, 0x176C, 0x8EA2, 0xA2A1, 0xA2FE, 0x17CA,

+    0x8EA2, 0xA3A1, 0xA3FE, 0x1828, 0x8EA2, 0xA4A1, 0xA4FE, 0x1886,

+    0x8EA2, 0xA5A1, 0xA5FE, 0x18E4, 0x8EA2, 0xA6A1, 0xA6FE, 0x1942,

+    0x8EA2, 0xA7A1, 0xA7FE, 0x19A0, 0x8EA2, 0xA8A1, 0xA8FE, 0x19FE,

+    0x8EA2, 0xA9A1, 0xA9FE, 0x1A5C, 0x8EA2, 0xAAA1, 0xAAFE, 0x1ABA,

+    0x8EA2, 0xABA1, 0xABFE, 0x1B18, 0x8EA2, 0xACA1, 0xACFE, 0x1B76,

+    0x8EA2, 0xADA1, 0xADFE, 0x1BD4, 0x8EA2, 0xAEA1, 0xAEFE, 0x1C32,

+    0x8EA2, 0xAFA1, 0xAFFE, 0x1C90, 0x8EA2, 0xB0A1, 0xB0FE, 0x1CEE,

+    0x8EA2, 0xB1A1, 0xB1FE, 0x1D4C, 0x8EA2, 0xB2A1, 0xB2FE, 0x1DAA,

+    0x8EA2, 0xB3A1, 0xB3FE, 0x1E08, 0x8EA2, 0xB4A1, 0xB4FE, 0x1E66,

+    0x8EA2, 0xB5A1, 0xB5FE, 0x1EC4, 0x8EA2, 0xB6A1, 0xB6FE, 0x1F22,

+    0x8EA2, 0xB7A1, 0xB7FE, 0x1F80, 0x8EA2, 0xB8A1, 0xB8FE, 0x1FDE,

+    0x8EA2, 0xB9A1, 0xB9FE, 0x203C, 0x8EA2, 0xBAA1, 0xBAFE, 0x209A,

+    0x8EA2, 0xBBA1, 0xBBFE, 0x20F8, 0x8EA2, 0xBCA1, 0xBCFE, 0x2156,

+    0x8EA2, 0xBDA1, 0xBDFE, 0x21B4, 0x8EA2, 0xBEA1, 0xBEFE, 0x2212,

+    0x8EA2, 0xBFA1, 0xBFFE, 0x2270, 0x8EA2, 0xC0A1, 0xC0FE, 0x22CE,

+    0x8EA2, 0xC1A1, 0xC1FE, 0x232C, 0x8EA2, 0xC2A1, 0xC2FE, 0x238A,

+    0x8EA2, 0xC3A1, 0xC3FE, 0x23E8, 0x8EA2, 0xC4A1, 0xC4FE, 0x2446,

+    0x8EA2, 0xC5A1, 0xC5FE, 0x24A4, 0x8EA2, 0xC6A1, 0xC6FE, 0x2502,

+    0x8EA2, 0xC7A1, 0xC7FE, 0x2560, 0x8EA2, 0xC8A1, 0xC8FE, 0x25BE,

+    0x8EA2, 0xC9A1, 0xC9FE, 0x261C, 0x8EA2, 0xCAA1, 0xCAFE, 0x267A,

+    0x8EA2, 0xCBA1, 0xCBFE, 0x26D8, 0x8EA2, 0xCCA1, 0xCCFE, 0x2736,

+    0x8EA2, 0xCDA1, 0xCDFE, 0x2794, 0x8EA2, 0xCEA1, 0xCEFE, 0x27F2,

+    0x8EA2, 0xCFA1, 0xCFFE, 0x2850, 0x8EA2, 0xD0A1, 0xD0FE, 0x28AE,

+    0x8EA2, 0xD1A1, 0xD1FE, 0x290C, 0x8EA2, 0xD2A1, 0xD2FE, 0x296A,

+    0x8EA2, 0xD3A1, 0xD3FE, 0x29C8, 0x8EA2, 0xD4A1, 0xD4FE, 0x2A26,

+    0x8EA2, 0xD5A1, 0xD5FE, 0x2A84, 0x8EA2, 0xD6A1, 0xD6FE, 0x2AE2,

+    0x8EA2, 0xD7A1, 0xD7FE, 0x2B40, 0x8EA2, 0xD8A1, 0xD8FE, 0x2B9E,

+    0x8EA2, 0xD9A1, 0xD9FE, 0x2BFC, 0x8EA2, 0xDAA1, 0xDAFE, 0x2C5A,

+    0x8EA2, 0xDBA1, 0xDBFE, 0x2CB8, 0x8EA2, 0xDCA1, 0xDCFE, 0x2D16,

+    0x8EA2, 0xDDA1, 0xDDFE, 0x2D74, 0x8EA2, 0xDEA1, 0xDEFE, 0x2DD2,

+    0x8EA2, 0xDFA1, 0xDFFE, 0x2E30, 0x8EA2, 0xE0A1, 0xE0FE, 0x2E8E,

+    0x8EA2, 0xE1A1, 0xE1FE, 0x2EEC, 0x8EA2, 0xE2A1, 0xE2FE, 0x2F4A,

+    0x8EA2, 0xE3A1, 0xE3FE, 0x2FA8, 0x8EA2, 0xE4A1, 0xE4FE, 0x3006,

+    0x8EA2, 0xE5A1, 0xE5FE, 0x3064, 0x8EA2, 0xE6A1, 0xE6FE, 0x30C2,

+    0x8EA2, 0xE7A1, 0xE7FE, 0x3120, 0x8EA2, 0xE8A1, 0xE8FE, 0x317E,

+    0x8EA2, 0xE9A1, 0xE9FE, 0x31DC, 0x8EA2, 0xEAA1, 0xEAFE, 0x323A,

+    0x8EA2, 0xEBA1, 0xEBFE, 0x3298, 0x8EA2, 0xECA1, 0xECFE, 0x32F6,

+    0x8EA2, 0xEDA1, 0xEDFE, 0x3354, 0x8EA2, 0xEEA1, 0xEEFE, 0x33B2,

+    0x8EA2, 0xEFA1, 0xEFFE, 0x3410, 0x8EA2, 0xF0A1, 0xF0FE, 0x346E,

+    0x8EA2, 0xF1A1, 0xF1FE, 0x34CC, 0x8EA2, 0xF2A1, 0xF2C4, 0x352A,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp
new file mode 100644
index 0000000..8737cf4
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp
@@ -0,0 +1,201 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_CNS_EUC_V_0[180 * 3] = {

+    0x0020, 0x007E, 0x3550, 0xA1A1, 0xA1AB, 0x0063, 0xA1AC, 0xA1AC, 0x354E,

+    0xA1AD, 0xA1BA, 0x006F, 0xA1BB, 0xA1BB, 0x007C, 0xA1BC, 0xA1BC, 0x007E,

+    0xA1BD, 0xA1BD, 0x007E, 0xA1BE, 0xA1BF, 0x0082, 0xA1C0, 0xA1C1, 0x0082,

+    0xA1C2, 0xA1C3, 0x0086, 0xA1C4, 0xA1C5, 0x0086, 0xA1C6, 0xA1C7, 0x008A,

+    0xA1C8, 0xA1C9, 0x008A, 0xA1CA, 0xA1CB, 0x008E, 0xA1CC, 0xA1CD, 0x008E,

+    0xA1CE, 0xA1CF, 0x0092, 0xA1D0, 0xA1D1, 0x0092, 0xA1D2, 0xA1D3, 0x0096,

+    0xA1D4, 0xA1D5, 0x0096, 0xA1D6, 0xA1D7, 0x009A, 0xA1D8, 0xA1D9, 0x009A,

+    0xA1DA, 0xA1DB, 0x009E, 0xA1DC, 0xA1FE, 0x009E, 0xA2A1, 0xA2C3, 0x00C1,

+    0xA2C4, 0xA2C4, 0x354F, 0xA2C5, 0xA2FE, 0x00E5, 0xA3A1, 0xA3CE, 0x011F,

+    0xA4A1, 0xA4FE, 0x014D, 0xA5A1, 0xA5EC, 0x01AB, 0xA5EE, 0xA5F0, 0x01F7,

+    0xA6A1, 0xA6BE, 0x01FA, 0xA7A1, 0xA7A1, 0x0253, 0xA7A2, 0xA7A4, 0x0218,

+    0xA7A5, 0xA7A5, 0x0254, 0xA7A6, 0xA7A6, 0x021B, 0xA7A7, 0xA7A7, 0x025A,

+    0xA7A8, 0xA7A8, 0x021C, 0xA7A9, 0xA7AC, 0x025B, 0xA7AD, 0xA7AF, 0x021D,

+    0xA7B0, 0xA7B0, 0x025F, 0xA7B1, 0xA7B1, 0x176E, 0xA7B2, 0xA7B2, 0x0260,

+    0xA7B3, 0xA7B3, 0x0262, 0xA7B4, 0xA7B4, 0x0220, 0xA7B5, 0xA7B5, 0x0263,

+    0xA7B6, 0xA7B6, 0x176F, 0xA7B7, 0xA7B7, 0x0221, 0xA7B8, 0xA7B9, 0x0264,

+    0xA7BA, 0xA7BA, 0x0222, 0xA7BB, 0xA7BB, 0x1770, 0xA7BC, 0xA7BC, 0x0223,

+    0xA7BD, 0xA7BD, 0x0266, 0xA7BE, 0xA7BE, 0x0279, 0xA7BF, 0xA7BF, 0x1775,

+    0xA7C0, 0xA7C1, 0x027A, 0xA7C2, 0xA7C2, 0x0224, 0xA7C3, 0xA7C6, 0x027C,

+    0xA7C7, 0xA7C7, 0x0225, 0xA7C8, 0xA7CB, 0x0282, 0xA7CC, 0xA7CC, 0x1776,

+    0xA7CD, 0xA7CD, 0x0286, 0xA7CE, 0xA7CE, 0x0226, 0xA7CF, 0xA7D0, 0x0288,

+    0xA7D1, 0xA7D2, 0x028C, 0xA7D3, 0xA7D5, 0x0227, 0xA7D6, 0xA7D8, 0x028E,

+    0xA7D9, 0xA7DA, 0x022A, 0xA7DB, 0xA7DB, 0x1777, 0xA7DC, 0xA7DF, 0x02D0,

+    0xA7E0, 0xA7E0, 0x02D5, 0xA7E1, 0xA7E1, 0x022C, 0xA7E2, 0xA7E5, 0x02D6,

+    0xA7E6, 0xA7E6, 0x022D, 0xA7E7, 0xA7ED, 0x02DA, 0xA7EE, 0xA7EE, 0x178A,

+    0xA7EF, 0xA7F2, 0x02E1, 0xA7F3, 0xA7F3, 0x178C, 0xA7F4, 0xA7F8, 0x02E5,

+    0xA7F9, 0xA7F9, 0x178D, 0xA7FA, 0xA7FD, 0x02EA, 0xA7FE, 0xA7FE, 0x0356,

+    0xA8A1, 0xA8A6, 0x0357, 0xA8A7, 0xA8A7, 0x035E, 0xA8A8, 0xA8A8, 0x0362,

+    0xA8A9, 0xA8AA, 0x022E, 0xA8AB, 0xA8B2, 0x0363, 0xA8B3, 0xA8B3, 0x17B2,

+    0xA8B4, 0xA8B6, 0x036B, 0xA8B7, 0xA8BA, 0x03F6, 0xA8BB, 0xA8BB, 0x1812,

+    0xA8BC, 0xA8BE, 0x03FA, 0xA8BF, 0xA8C3, 0x03FE, 0xA8C4, 0xA8CC, 0x0405,

+    0xA8CD, 0xA8CD, 0x1813, 0xA8CE, 0xA8CE, 0x1818, 0xA8CF, 0xA8D2, 0x040F,

+    0xA8D3, 0xA8D3, 0x1819, 0xA8D4, 0xA8D9, 0x0508, 0xA8DA, 0xA8DA, 0x18E7,

+    0xA8DB, 0xA8E2, 0x050E, 0xA8E3, 0xA8E3, 0x0230, 0xA8E4, 0xA8E4, 0x051B,

+    0xA8E5, 0xA8E7, 0x0520, 0xA8E8, 0xA8EB, 0x0696, 0xA8EC, 0xA8EC, 0x0231,

+    0xA8ED, 0xA8F0, 0x069F, 0xA8F1, 0xA8FB, 0x0826, 0xA8FC, 0xA8FE, 0x09F5,

+    0xA9A1, 0xA9A1, 0x1E33, 0xA9A2, 0xA9A2, 0x09F8, 0xA9A3, 0xA9A3, 0x1E34,

+    0xA9A4, 0xA9A5, 0x09F9, 0xA9A6, 0xA9AB, 0x0BE1, 0xA9AC, 0xA9AE, 0x0DBB,

+    0xA9AF, 0xA9AF, 0x2360, 0xA9B0, 0xA9B0, 0x2612, 0xA9B1, 0xA9B3, 0x0F7B,

+    0xA9B4, 0xA9B5, 0x1100, 0xA9B6, 0xA9B6, 0x1289, 0xA9B7, 0xA9B8, 0x13B2,

+    0xA9B9, 0xA9B9, 0x2F0D, 0xC2A1, 0xC2C1, 0x0232, 0xC4A1, 0xC4FE, 0x0253,

+    0xC5A1, 0xC5FE, 0x02B1, 0xC6A1, 0xC6FE, 0x030F, 0xC7A1, 0xC7FE, 0x036D,

+    0xC8A1, 0xC8FE, 0x03CB, 0xC9A1, 0xC9FE, 0x0429, 0xCAA1, 0xCAFE, 0x0487,

+    0xCBA1, 0xCBFE, 0x04E5, 0xCCA1, 0xCCFE, 0x0543, 0xCDA1, 0xCDFE, 0x05A1,

+    0xCEA1, 0xCEFE, 0x05FF, 0xCFA1, 0xCFFE, 0x065D, 0xD0A1, 0xD0FE, 0x06BB,

+    0xD1A1, 0xD1FE, 0x0719, 0xD2A1, 0xD2FE, 0x0777, 0xD3A1, 0xD3FE, 0x07D5,

+    0xD4A1, 0xD4FE, 0x0833, 0xD5A1, 0xD5FE, 0x0891, 0xD6A1, 0xD6FE, 0x08EF,

+    0xD7A1, 0xD7FE, 0x094D, 0xD8A1, 0xD8FE, 0x09AB, 0xD9A1, 0xD9FE, 0x0A09,

+    0xDAA1, 0xDAFE, 0x0A67, 0xDBA1, 0xDBFE, 0x0AC5, 0xDCA1, 0xDCFE, 0x0B23,

+    0xDDA1, 0xDDFE, 0x0B81, 0xDEA1, 0xDEFE, 0x0BDF, 0xDFA1, 0xDFFE, 0x0C3D,

+    0xE0A1, 0xE0FE, 0x0C9B, 0xE1A1, 0xE1FE, 0x0CF9, 0xE2A1, 0xE2FE, 0x0D57,

+    0xE3A1, 0xE3FE, 0x0DB5, 0xE4A1, 0xE4FE, 0x0E13, 0xE5A1, 0xE5FE, 0x0E71,

+    0xE6A1, 0xE6FE, 0x0ECF, 0xE7A1, 0xE7FE, 0x0F2D, 0xE8A1, 0xE8FE, 0x0F8B,

+    0xE9A1, 0xE9FE, 0x0FE9, 0xEAA1, 0xEAFE, 0x1047, 0xEBA1, 0xEBFE, 0x10A5,

+    0xECA1, 0xECFE, 0x1103, 0xEDA1, 0xEDFE, 0x1161, 0xEEA1, 0xEEFE, 0x11BF,

+    0xEFA1, 0xEFFE, 0x121D, 0xF0A1, 0xF0FE, 0x127B, 0xF1A1, 0xF1FE, 0x12D9,

+    0xF2A1, 0xF2FE, 0x1337, 0xF3A1, 0xF3FE, 0x1395, 0xF4A1, 0xF4FE, 0x13F3,

+    0xF5A1, 0xF5FE, 0x1451, 0xF6A1, 0xF6FE, 0x14AF, 0xF7A1, 0xF7FE, 0x150D,

+    0xF8A1, 0xF8FE, 0x156B, 0xF9A1, 0xF9FE, 0x15C9, 0xFAA1, 0xFAFE, 0x1627,

+    0xFBA1, 0xFBFE, 0x1685, 0xFCA1, 0xFCFE, 0x16E3, 0xFDA1, 0xFDCB, 0x1741,

+};

+extern const unsigned short g_FXCMAP_CNS_EUC_V_0_DWord[261 * 4] = {

+    0x8EA1, 0xA1A1, 0xA1AB, 0x0063, 0x8EA1, 0xA1AC, 0xA1AC, 0x354E,

+    0x8EA1, 0xA1AD, 0xA1BA, 0x006F, 0x8EA1, 0xA1BB, 0xA1BB, 0x007C,

+    0x8EA1, 0xA1BC, 0xA1BC, 0x007E, 0x8EA1, 0xA1BD, 0xA1BD, 0x007E,

+    0x8EA1, 0xA1BE, 0xA1BF, 0x0082, 0x8EA1, 0xA1C0, 0xA1C1, 0x0082,

+    0x8EA1, 0xA1C2, 0xA1C3, 0x0086, 0x8EA1, 0xA1C4, 0xA1C5, 0x0086,

+    0x8EA1, 0xA1C6, 0xA1C7, 0x008A, 0x8EA1, 0xA1C8, 0xA1C9, 0x008A,

+    0x8EA1, 0xA1CA, 0xA1CB, 0x008E, 0x8EA1, 0xA1CC, 0xA1CD, 0x008E,

+    0x8EA1, 0xA1CE, 0xA1CF, 0x0092, 0x8EA1, 0xA1D0, 0xA1D1, 0x0092,

+    0x8EA1, 0xA1D2, 0xA1D3, 0x0096, 0x8EA1, 0xA1D4, 0xA1D5, 0x0096,

+    0x8EA1, 0xA1D6, 0xA1D7, 0x009A, 0x8EA1, 0xA1D8, 0xA1D9, 0x009A,

+    0x8EA1, 0xA1DA, 0xA1DB, 0x009E, 0x8EA1, 0xA1DC, 0xA1FE, 0x009E,

+    0x8EA1, 0xA2A1, 0xA2C3, 0x00C1, 0x8EA1, 0xA2C4, 0xA2C4, 0x354F,

+    0x8EA1, 0xA2C5, 0xA2FE, 0x00E5, 0x8EA1, 0xA3A1, 0xA3CE, 0x011F,

+    0x8EA1, 0xA4A1, 0xA4FE, 0x014D, 0x8EA1, 0xA5A1, 0xA5EC, 0x01AB,

+    0x8EA1, 0xA5EE, 0xA5F0, 0x01F7, 0x8EA1, 0xA6A1, 0xA6BE, 0x01FA,

+    0x8EA1, 0xA7A1, 0xA7A1, 0x0253, 0x8EA1, 0xA7A2, 0xA7A4, 0x0218,

+    0x8EA1, 0xA7A5, 0xA7A5, 0x0254, 0x8EA1, 0xA7A6, 0xA7A6, 0x021B,

+    0x8EA1, 0xA7A7, 0xA7A7, 0x025A, 0x8EA1, 0xA7A8, 0xA7A8, 0x021C,

+    0x8EA1, 0xA7A9, 0xA7AC, 0x025B, 0x8EA1, 0xA7AD, 0xA7AF, 0x021D,

+    0x8EA1, 0xA7B0, 0xA7B0, 0x025F, 0x8EA1, 0xA7B1, 0xA7B1, 0x176E,

+    0x8EA1, 0xA7B2, 0xA7B2, 0x0260, 0x8EA1, 0xA7B3, 0xA7B3, 0x0262,

+    0x8EA1, 0xA7B4, 0xA7B4, 0x0220, 0x8EA1, 0xA7B5, 0xA7B5, 0x0263,

+    0x8EA1, 0xA7B6, 0xA7B6, 0x176F, 0x8EA1, 0xA7B7, 0xA7B7, 0x0221,

+    0x8EA1, 0xA7B8, 0xA7B9, 0x0264, 0x8EA1, 0xA7BA, 0xA7BA, 0x0222,

+    0x8EA1, 0xA7BB, 0xA7BB, 0x1770, 0x8EA1, 0xA7BC, 0xA7BC, 0x0223,

+    0x8EA1, 0xA7BD, 0xA7BD, 0x0266, 0x8EA1, 0xA7BE, 0xA7BE, 0x0279,

+    0x8EA1, 0xA7BF, 0xA7BF, 0x1775, 0x8EA1, 0xA7C0, 0xA7C1, 0x027A,

+    0x8EA1, 0xA7C2, 0xA7C2, 0x0224, 0x8EA1, 0xA7C3, 0xA7C6, 0x027C,

+    0x8EA1, 0xA7C7, 0xA7C7, 0x0225, 0x8EA1, 0xA7C8, 0xA7CB, 0x0282,

+    0x8EA1, 0xA7CC, 0xA7CC, 0x1776, 0x8EA1, 0xA7CD, 0xA7CD, 0x0286,

+    0x8EA1, 0xA7CE, 0xA7CE, 0x0226, 0x8EA1, 0xA7CF, 0xA7D0, 0x0288,

+    0x8EA1, 0xA7D1, 0xA7D2, 0x028C, 0x8EA1, 0xA7D3, 0xA7D5, 0x0227,

+    0x8EA1, 0xA7D6, 0xA7D8, 0x028E, 0x8EA1, 0xA7D9, 0xA7DA, 0x022A,

+    0x8EA1, 0xA7DB, 0xA7DB, 0x1777, 0x8EA1, 0xA7DC, 0xA7DF, 0x02D0,

+    0x8EA1, 0xA7E0, 0xA7E0, 0x02D5, 0x8EA1, 0xA7E1, 0xA7E1, 0x022C,

+    0x8EA1, 0xA7E2, 0xA7E5, 0x02D6, 0x8EA1, 0xA7E6, 0xA7E6, 0x022D,

+    0x8EA1, 0xA7E7, 0xA7ED, 0x02DA, 0x8EA1, 0xA7EE, 0xA7EE, 0x178A,

+    0x8EA1, 0xA7EF, 0xA7F2, 0x02E1, 0x8EA1, 0xA7F3, 0xA7F3, 0x178C,

+    0x8EA1, 0xA7F4, 0xA7F8, 0x02E5, 0x8EA1, 0xA7F9, 0xA7F9, 0x178D,

+    0x8EA1, 0xA7FA, 0xA7FD, 0x02EA, 0x8EA1, 0xA7FE, 0xA7FE, 0x0356,

+    0x8EA1, 0xA8A1, 0xA8A6, 0x0357, 0x8EA1, 0xA8A7, 0xA8A7, 0x035E,

+    0x8EA1, 0xA8A8, 0xA8A8, 0x0362, 0x8EA1, 0xA8A9, 0xA8AA, 0x022E,

+    0x8EA1, 0xA8AB, 0xA8B2, 0x0363, 0x8EA1, 0xA8B3, 0xA8B3, 0x17B2,

+    0x8EA1, 0xA8B4, 0xA8B6, 0x036B, 0x8EA1, 0xA8B7, 0xA8BA, 0x03F6,

+    0x8EA1, 0xA8BB, 0xA8BB, 0x1812, 0x8EA1, 0xA8BC, 0xA8BE, 0x03FA,

+    0x8EA1, 0xA8BF, 0xA8C3, 0x03FE, 0x8EA1, 0xA8C4, 0xA8CC, 0x0405,

+    0x8EA1, 0xA8CD, 0xA8CD, 0x1813, 0x8EA1, 0xA8CE, 0xA8CE, 0x1818,

+    0x8EA1, 0xA8CF, 0xA8D2, 0x040F, 0x8EA1, 0xA8D3, 0xA8D3, 0x1819,

+    0x8EA1, 0xA8D4, 0xA8D9, 0x0508, 0x8EA1, 0xA8DA, 0xA8DA, 0x18E7,

+    0x8EA1, 0xA8DB, 0xA8E2, 0x050E, 0x8EA1, 0xA8E3, 0xA8E3, 0x0230,

+    0x8EA1, 0xA8E4, 0xA8E4, 0x051B, 0x8EA1, 0xA8E5, 0xA8E7, 0x0520,

+    0x8EA1, 0xA8E8, 0xA8EB, 0x0696, 0x8EA1, 0xA8EC, 0xA8EC, 0x0231,

+    0x8EA1, 0xA8ED, 0xA8F0, 0x069F, 0x8EA1, 0xA8F1, 0xA8FB, 0x0826,

+    0x8EA1, 0xA8FC, 0xA8FE, 0x09F5, 0x8EA1, 0xA9A1, 0xA9A1, 0x1E33,

+    0x8EA1, 0xA9A2, 0xA9A2, 0x09F8, 0x8EA1, 0xA9A3, 0xA9A3, 0x1E34,

+    0x8EA1, 0xA9A4, 0xA9A5, 0x09F9, 0x8EA1, 0xA9A6, 0xA9AB, 0x0BE1,

+    0x8EA1, 0xA9AC, 0xA9AE, 0x0DBB, 0x8EA1, 0xA9AF, 0xA9AF, 0x2360,

+    0x8EA1, 0xA9B0, 0xA9B0, 0x2612, 0x8EA1, 0xA9B1, 0xA9B3, 0x0F7B,

+    0x8EA1, 0xA9B4, 0xA9B5, 0x1100, 0x8EA1, 0xA9B6, 0xA9B6, 0x1289,

+    0x8EA1, 0xA9B7, 0xA9B8, 0x13B2, 0x8EA1, 0xA9B9, 0xA9B9, 0x2F0D,

+    0x8EA1, 0xC2A1, 0xC2C1, 0x0232, 0x8EA1, 0xC4A1, 0xC4FE, 0x0253,

+    0x8EA1, 0xC5A1, 0xC5FE, 0x02B1, 0x8EA1, 0xC6A1, 0xC6FE, 0x030F,

+    0x8EA1, 0xC7A1, 0xC7FE, 0x036D, 0x8EA1, 0xC8A1, 0xC8FE, 0x03CB,

+    0x8EA1, 0xC9A1, 0xC9FE, 0x0429, 0x8EA1, 0xCAA1, 0xCAFE, 0x0487,

+    0x8EA1, 0xCBA1, 0xCBFE, 0x04E5, 0x8EA1, 0xCCA1, 0xCCFE, 0x0543,

+    0x8EA1, 0xCDA1, 0xCDFE, 0x05A1, 0x8EA1, 0xCEA1, 0xCEFE, 0x05FF,

+    0x8EA1, 0xCFA1, 0xCFFE, 0x065D, 0x8EA1, 0xD0A1, 0xD0FE, 0x06BB,

+    0x8EA1, 0xD1A1, 0xD1FE, 0x0719, 0x8EA1, 0xD2A1, 0xD2FE, 0x0777,

+    0x8EA1, 0xD3A1, 0xD3FE, 0x07D5, 0x8EA1, 0xD4A1, 0xD4FE, 0x0833,

+    0x8EA1, 0xD5A1, 0xD5FE, 0x0891, 0x8EA1, 0xD6A1, 0xD6FE, 0x08EF,

+    0x8EA1, 0xD7A1, 0xD7FE, 0x094D, 0x8EA1, 0xD8A1, 0xD8FE, 0x09AB,

+    0x8EA1, 0xD9A1, 0xD9FE, 0x0A09, 0x8EA1, 0xDAA1, 0xDAFE, 0x0A67,

+    0x8EA1, 0xDBA1, 0xDBFE, 0x0AC5, 0x8EA1, 0xDCA1, 0xDCFE, 0x0B23,

+    0x8EA1, 0xDDA1, 0xDDFE, 0x0B81, 0x8EA1, 0xDEA1, 0xDEFE, 0x0BDF,

+    0x8EA1, 0xDFA1, 0xDFFE, 0x0C3D, 0x8EA1, 0xE0A1, 0xE0FE, 0x0C9B,

+    0x8EA1, 0xE1A1, 0xE1FE, 0x0CF9, 0x8EA1, 0xE2A1, 0xE2FE, 0x0D57,

+    0x8EA1, 0xE3A1, 0xE3FE, 0x0DB5, 0x8EA1, 0xE4A1, 0xE4FE, 0x0E13,

+    0x8EA1, 0xE5A1, 0xE5FE, 0x0E71, 0x8EA1, 0xE6A1, 0xE6FE, 0x0ECF,

+    0x8EA1, 0xE7A1, 0xE7FE, 0x0F2D, 0x8EA1, 0xE8A1, 0xE8FE, 0x0F8B,

+    0x8EA1, 0xE9A1, 0xE9FE, 0x0FE9, 0x8EA1, 0xEAA1, 0xEAFE, 0x1047,

+    0x8EA1, 0xEBA1, 0xEBFE, 0x10A5, 0x8EA1, 0xECA1, 0xECFE, 0x1103,

+    0x8EA1, 0xEDA1, 0xEDFE, 0x1161, 0x8EA1, 0xEEA1, 0xEEFE, 0x11BF,

+    0x8EA1, 0xEFA1, 0xEFFE, 0x121D, 0x8EA1, 0xF0A1, 0xF0FE, 0x127B,

+    0x8EA1, 0xF1A1, 0xF1FE, 0x12D9, 0x8EA1, 0xF2A1, 0xF2FE, 0x1337,

+    0x8EA1, 0xF3A1, 0xF3FE, 0x1395, 0x8EA1, 0xF4A1, 0xF4FE, 0x13F3,

+    0x8EA1, 0xF5A1, 0xF5FE, 0x1451, 0x8EA1, 0xF6A1, 0xF6FE, 0x14AF,

+    0x8EA1, 0xF7A1, 0xF7FE, 0x150D, 0x8EA1, 0xF8A1, 0xF8FE, 0x156B,

+    0x8EA1, 0xF9A1, 0xF9FE, 0x15C9, 0x8EA1, 0xFAA1, 0xFAFE, 0x1627,

+    0x8EA1, 0xFBA1, 0xFBFE, 0x1685, 0x8EA1, 0xFCA1, 0xFCFE, 0x16E3,

+    0x8EA1, 0xFDA1, 0xFDCB, 0x1741, 0x8EA2, 0xA1A1, 0xA1FE, 0x176C,

+    0x8EA2, 0xA2A1, 0xA2FE, 0x17CA, 0x8EA2, 0xA3A1, 0xA3FE, 0x1828,

+    0x8EA2, 0xA4A1, 0xA4FE, 0x1886, 0x8EA2, 0xA5A1, 0xA5FE, 0x18E4,

+    0x8EA2, 0xA6A1, 0xA6FE, 0x1942, 0x8EA2, 0xA7A1, 0xA7FE, 0x19A0,

+    0x8EA2, 0xA8A1, 0xA8FE, 0x19FE, 0x8EA2, 0xA9A1, 0xA9FE, 0x1A5C,

+    0x8EA2, 0xAAA1, 0xAAFE, 0x1ABA, 0x8EA2, 0xABA1, 0xABFE, 0x1B18,

+    0x8EA2, 0xACA1, 0xACFE, 0x1B76, 0x8EA2, 0xADA1, 0xADFE, 0x1BD4,

+    0x8EA2, 0xAEA1, 0xAEFE, 0x1C32, 0x8EA2, 0xAFA1, 0xAFFE, 0x1C90,

+    0x8EA2, 0xB0A1, 0xB0FE, 0x1CEE, 0x8EA2, 0xB1A1, 0xB1FE, 0x1D4C,

+    0x8EA2, 0xB2A1, 0xB2FE, 0x1DAA, 0x8EA2, 0xB3A1, 0xB3FE, 0x1E08,

+    0x8EA2, 0xB4A1, 0xB4FE, 0x1E66, 0x8EA2, 0xB5A1, 0xB5FE, 0x1EC4,

+    0x8EA2, 0xB6A1, 0xB6FE, 0x1F22, 0x8EA2, 0xB7A1, 0xB7FE, 0x1F80,

+    0x8EA2, 0xB8A1, 0xB8FE, 0x1FDE, 0x8EA2, 0xB9A1, 0xB9FE, 0x203C,

+    0x8EA2, 0xBAA1, 0xBAFE, 0x209A, 0x8EA2, 0xBBA1, 0xBBFE, 0x20F8,

+    0x8EA2, 0xBCA1, 0xBCFE, 0x2156, 0x8EA2, 0xBDA1, 0xBDFE, 0x21B4,

+    0x8EA2, 0xBEA1, 0xBEFE, 0x2212, 0x8EA2, 0xBFA1, 0xBFFE, 0x2270,

+    0x8EA2, 0xC0A1, 0xC0FE, 0x22CE, 0x8EA2, 0xC1A1, 0xC1FE, 0x232C,

+    0x8EA2, 0xC2A1, 0xC2FE, 0x238A, 0x8EA2, 0xC3A1, 0xC3FE, 0x23E8,

+    0x8EA2, 0xC4A1, 0xC4FE, 0x2446, 0x8EA2, 0xC5A1, 0xC5FE, 0x24A4,

+    0x8EA2, 0xC6A1, 0xC6FE, 0x2502, 0x8EA2, 0xC7A1, 0xC7FE, 0x2560,

+    0x8EA2, 0xC8A1, 0xC8FE, 0x25BE, 0x8EA2, 0xC9A1, 0xC9FE, 0x261C,

+    0x8EA2, 0xCAA1, 0xCAFE, 0x267A, 0x8EA2, 0xCBA1, 0xCBFE, 0x26D8,

+    0x8EA2, 0xCCA1, 0xCCFE, 0x2736, 0x8EA2, 0xCDA1, 0xCDFE, 0x2794,

+    0x8EA2, 0xCEA1, 0xCEFE, 0x27F2, 0x8EA2, 0xCFA1, 0xCFFE, 0x2850,

+    0x8EA2, 0xD0A1, 0xD0FE, 0x28AE, 0x8EA2, 0xD1A1, 0xD1FE, 0x290C,

+    0x8EA2, 0xD2A1, 0xD2FE, 0x296A, 0x8EA2, 0xD3A1, 0xD3FE, 0x29C8,

+    0x8EA2, 0xD4A1, 0xD4FE, 0x2A26, 0x8EA2, 0xD5A1, 0xD5FE, 0x2A84,

+    0x8EA2, 0xD6A1, 0xD6FE, 0x2AE2, 0x8EA2, 0xD7A1, 0xD7FE, 0x2B40,

+    0x8EA2, 0xD8A1, 0xD8FE, 0x2B9E, 0x8EA2, 0xD9A1, 0xD9FE, 0x2BFC,

+    0x8EA2, 0xDAA1, 0xDAFE, 0x2C5A, 0x8EA2, 0xDBA1, 0xDBFE, 0x2CB8,

+    0x8EA2, 0xDCA1, 0xDCFE, 0x2D16, 0x8EA2, 0xDDA1, 0xDDFE, 0x2D74,

+    0x8EA2, 0xDEA1, 0xDEFE, 0x2DD2, 0x8EA2, 0xDFA1, 0xDFFE, 0x2E30,

+    0x8EA2, 0xE0A1, 0xE0FE, 0x2E8E, 0x8EA2, 0xE1A1, 0xE1FE, 0x2EEC,

+    0x8EA2, 0xE2A1, 0xE2FE, 0x2F4A, 0x8EA2, 0xE3A1, 0xE3FE, 0x2FA8,

+    0x8EA2, 0xE4A1, 0xE4FE, 0x3006, 0x8EA2, 0xE5A1, 0xE5FE, 0x3064,

+    0x8EA2, 0xE6A1, 0xE6FE, 0x30C2, 0x8EA2, 0xE7A1, 0xE7FE, 0x3120,

+    0x8EA2, 0xE8A1, 0xE8FE, 0x317E, 0x8EA2, 0xE9A1, 0xE9FE, 0x31DC,

+    0x8EA2, 0xEAA1, 0xEAFE, 0x323A, 0x8EA2, 0xEBA1, 0xEBFE, 0x3298,

+    0x8EA2, 0xECA1, 0xECFE, 0x32F6, 0x8EA2, 0xEDA1, 0xEDFE, 0x3354,

+    0x8EA2, 0xEEA1, 0xEEFE, 0x33B2, 0x8EA2, 0xEFA1, 0xEFFE, 0x3410,

+    0x8EA2, 0xF0A1, 0xF0FE, 0x346E, 0x8EA2, 0xF1A1, 0xF1FE, 0x34CC,

+    0x8EA2, 0xF2A1, 0xF2C4, 0x352A,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-H_0.cpp
new file mode 100644
index 0000000..f1c9483
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-H_0.cpp
@@ -0,0 +1,93 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_ETen_B5_H_0[254 * 3] = {

+    0x0020, 0x007E, 0x3550, 0xA140, 0xA158, 0x0063, 0xA159, 0xA15C, 0x35AF,

+    0xA15D, 0xA17E, 0x0080, 0xA1A1, 0xA1F5, 0x00A2, 0xA1F6, 0xA1F6, 0x00F8,

+    0xA1F7, 0xA1F7, 0x00F7, 0xA1F8, 0xA1FE, 0x00F9, 0xA240, 0xA27E, 0x0100,

+    0xA2A1, 0xA2FE, 0x013F, 0xA340, 0xA37E, 0x019D, 0xA3A1, 0xA3BB, 0x01DC,

+    0xA3BD, 0xA3BF, 0x01F7, 0xA440, 0xA47E, 0x0253, 0xA4A1, 0xA4FE, 0x0292,

+    0xA540, 0xA57E, 0x02F0, 0xA5A1, 0xA5FE, 0x032F, 0xA640, 0xA67E, 0x038D,

+    0xA6A1, 0xA6FE, 0x03CC, 0xA740, 0xA77E, 0x042A, 0xA7A1, 0xA7FE, 0x0469,

+    0xA840, 0xA87E, 0x04C7, 0xA8A1, 0xA8FE, 0x0506, 0xA940, 0xA97E, 0x0564,

+    0xA9A1, 0xA9FE, 0x05A3, 0xAA40, 0xAA7E, 0x0601, 0xAAA1, 0xAAFE, 0x0640,

+    0xAB40, 0xAB7E, 0x069E, 0xABA1, 0xABFE, 0x06DD, 0xAC40, 0xAC7E, 0x073B,

+    0xACA1, 0xACFD, 0x077A, 0xACFE, 0xACFE, 0x097F, 0xAD40, 0xAD7E, 0x07D7,

+    0xADA1, 0xADFE, 0x0816, 0xAE40, 0xAE7E, 0x0874, 0xAEA1, 0xAEFE, 0x08B3,

+    0xAF40, 0xAF7E, 0x0911, 0xAFA1, 0xAFCF, 0x0950, 0xAFD0, 0xAFFE, 0x0980,

+    0xB040, 0xB07E, 0x09AF, 0xB0A1, 0xB0FE, 0x09EE, 0xB140, 0xB17E, 0x0A4C,

+    0xB1A1, 0xB1FE, 0x0A8B, 0xB240, 0xB27E, 0x0AE9, 0xB2A1, 0xB2FE, 0x0B28,

+    0xB340, 0xB37E, 0x0B86, 0xB3A1, 0xB3FE, 0x0BC5, 0xB440, 0xB47E, 0x0C23,

+    0xB4A1, 0xB4FE, 0x0C62, 0xB540, 0xB57E, 0x0CC0, 0xB5A1, 0xB5FE, 0x0CFF,

+    0xB640, 0xB67E, 0x0D5D, 0xB6A1, 0xB6FE, 0x0D9C, 0xB740, 0xB77E, 0x0DFA,

+    0xB7A1, 0xB7FE, 0x0E39, 0xB840, 0xB87E, 0x0E97, 0xB8A1, 0xB8FE, 0x0ED6,

+    0xB940, 0xB97E, 0x0F34, 0xB9A1, 0xB9FE, 0x0F73, 0xBA40, 0xBA7E, 0x0FD1,

+    0xBAA1, 0xBAFE, 0x1010, 0xBB40, 0xBB7E, 0x106E, 0xBBA1, 0xBBC7, 0x10AD,

+    0xBBC8, 0xBBFE, 0x10D5, 0xBC40, 0xBC7E, 0x110C, 0xBCA1, 0xBCFE, 0x114B,

+    0xBD40, 0xBD7E, 0x11A9, 0xBDA1, 0xBDFE, 0x11E8, 0xBE40, 0xBE51, 0x1246,

+    0xBE52, 0xBE52, 0x10D4, 0xBE53, 0xBE7E, 0x1258, 0xBEA1, 0xBEFE, 0x1284,

+    0xBF40, 0xBF7E, 0x12E2, 0xBFA1, 0xBFFE, 0x1321, 0xC040, 0xC07E, 0x137F,

+    0xC0A1, 0xC0FE, 0x13BE, 0xC140, 0xC17E, 0x141C, 0xC1A1, 0xC1AA, 0x145B,

+    0xC1AB, 0xC1FE, 0x1466, 0xC240, 0xC27E, 0x14BA, 0xC2A1, 0xC2CA, 0x14F9,

+    0xC2CB, 0xC2CB, 0x1465, 0xC2CC, 0xC2FE, 0x1523, 0xC340, 0xC360, 0x1556,

+    0xC361, 0xC37E, 0x1578, 0xC3A1, 0xC3B8, 0x1596, 0xC3B9, 0xC3B9, 0x15AF,

+    0xC3BA, 0xC3BA, 0x15AE, 0xC3BB, 0xC3FE, 0x15B0, 0xC440, 0xC455, 0x15F4,

+    0xC456, 0xC456, 0x1577, 0xC457, 0xC47E, 0x160A, 0xC4A1, 0xC4FE, 0x1632,

+    0xC540, 0xC57E, 0x1690, 0xC5A1, 0xC5FE, 0x16CF, 0xC640, 0xC67E, 0x172D,

+    0xC6A1, 0xC6BE, 0x01FA, 0xC6BF, 0xC6D7, 0x0219, 0xC6D8, 0xC6DE, 0x35B3,

+    0xC6DF, 0xC6DF, 0x1794, 0xC6E0, 0xC6FE, 0x35BA, 0xC740, 0xC77E, 0x35D9,

+    0xC7A1, 0xC7FE, 0x3618, 0xC840, 0xC87E, 0x3676, 0xC8A1, 0xC8D3, 0x36B5,

+    0xC940, 0xC949, 0x176C, 0xC94A, 0xC94A, 0x0274, 0xC94B, 0xC96B, 0x1776,

+    0xC96C, 0xC97E, 0x1798, 0xC9A1, 0xC9BD, 0x17AB, 0xC9BE, 0xC9BE, 0x1797,

+    0xC9BF, 0xC9EC, 0x17C8, 0xC9ED, 0xC9FE, 0x17F7, 0xCA40, 0xCA7E, 0x1809,

+    0xCAA1, 0xCAF6, 0x1848, 0xCAF7, 0xCAF7, 0x17F6, 0xCAF8, 0xCAFE, 0x189E,

+    0xCB40, 0xCB7E, 0x18A5, 0xCBA1, 0xCBFE, 0x18E4, 0xCC40, 0xCC7E, 0x1942,

+    0xCCA1, 0xCCFE, 0x1981, 0xCD40, 0xCD7E, 0x19DF, 0xCDA1, 0xCDFE, 0x1A1E,

+    0xCE40, 0xCE7E, 0x1A7C, 0xCEA1, 0xCEFE, 0x1ABB, 0xCF40, 0xCF7E, 0x1B19,

+    0xCFA1, 0xCFFE, 0x1B58, 0xD040, 0xD07E, 0x1BB6, 0xD0A1, 0xD0FE, 0x1BF5,

+    0xD140, 0xD17E, 0x1C53, 0xD1A1, 0xD1FE, 0x1C92, 0xD240, 0xD27E, 0x1CF0,

+    0xD2A1, 0xD2FE, 0x1D2F, 0xD340, 0xD37E, 0x1D8D, 0xD3A1, 0xD3FE, 0x1DCC,

+    0xD440, 0xD47E, 0x1E2A, 0xD4A1, 0xD4FE, 0x1E69, 0xD540, 0xD57E, 0x1EC7,

+    0xD5A1, 0xD5FE, 0x1F06, 0xD640, 0xD67E, 0x1F64, 0xD6A1, 0xD6CB, 0x1FA3,

+    0xD6CC, 0xD6CC, 0x2254, 0xD6CD, 0xD6FE, 0x1FCF, 0xD740, 0xD779, 0x2001,

+    0xD77A, 0xD77A, 0x22B9, 0xD77B, 0xD77E, 0x203B, 0xD7A1, 0xD7FE, 0x203F,

+    0xD840, 0xD87E, 0x209D, 0xD8A1, 0xD8FE, 0x20DC, 0xD940, 0xD97E, 0x213A,

+    0xD9A1, 0xD9FE, 0x2179, 0xDA40, 0xDA7E, 0x21D7, 0xDAA1, 0xDADE, 0x2216,

+    0xDADF, 0xDADF, 0x1FCE, 0xDAE0, 0xDAFE, 0x2255, 0xDB40, 0xDB7E, 0x2274,

+    0xDBA1, 0xDBA6, 0x22B3, 0xDBA7, 0xDBFE, 0x22BA, 0xDC40, 0xDC7E, 0x2312,

+    0xDCA1, 0xDCFE, 0x2351, 0xDD40, 0xDD7E, 0x23AF, 0xDDA1, 0xDDFB, 0x23EE,

+    0xDDFC, 0xDDFC, 0x2381, 0xDDFD, 0xDDFE, 0x2449, 0xDE40, 0xDE7E, 0x244B,

+    0xDEA1, 0xDEFE, 0x248A, 0xDF40, 0xDF7E, 0x24E8, 0xDFA1, 0xDFFE, 0x2527,

+    0xE040, 0xE07E, 0x2585, 0xE0A1, 0xE0FE, 0x25C4, 0xE140, 0xE17E, 0x2622,

+    0xE1A1, 0xE1FE, 0x2661, 0xE240, 0xE27E, 0x26BF, 0xE2A1, 0xE2FE, 0x26FE,

+    0xE340, 0xE37E, 0x275C, 0xE3A1, 0xE3FE, 0x279B, 0xE440, 0xE47E, 0x27F9,

+    0xE4A1, 0xE4FE, 0x2838, 0xE540, 0xE57E, 0x2896, 0xE5A1, 0xE5FE, 0x28D5,

+    0xE640, 0xE67E, 0x2933, 0xE6A1, 0xE6FE, 0x2972, 0xE740, 0xE77E, 0x29D0,

+    0xE7A1, 0xE7FE, 0x2A0F, 0xE840, 0xE87E, 0x2A6D, 0xE8A1, 0xE8A2, 0x2AAC,

+    0xE8A3, 0xE8FE, 0x2AAF, 0xE940, 0xE975, 0x2B0B, 0xE976, 0xE97E, 0x2B42,

+    0xE9A1, 0xE9FE, 0x2B4B, 0xEA40, 0xEA7E, 0x2BA9, 0xEAA1, 0xEAFE, 0x2BE8,

+    0xEB40, 0xEB5A, 0x2C46, 0xEB5B, 0xEB7E, 0x2C62, 0xEBA1, 0xEBF0, 0x2C86,

+    0xEBF1, 0xEBF1, 0x2AAE, 0xEBF2, 0xEBFE, 0x2CD6, 0xEC40, 0xEC7E, 0x2CE3,

+    0xECA1, 0xECDD, 0x2D22, 0xECDE, 0xECDE, 0x2B41, 0xECDF, 0xECFE, 0x2D5F,

+    0xED40, 0xED7E, 0x2D7F, 0xEDA1, 0xEDA9, 0x2DBE, 0xEDAA, 0xEDFE, 0x2DC8,

+    0xEE40, 0xEE7E, 0x2E1D, 0xEEA1, 0xEEEA, 0x2E5C, 0xEEEB, 0xEEEB, 0x3014,

+    0xEEEC, 0xEEFE, 0x2EA6, 0xEF40, 0xEF7E, 0x2EB9, 0xEFA1, 0xEFFE, 0x2EF8,

+    0xF040, 0xF055, 0x2F56, 0xF056, 0xF056, 0x2DC7, 0xF057, 0xF07E, 0x2F6C,

+    0xF0A1, 0xF0CA, 0x2F94, 0xF0CB, 0xF0CB, 0x2C61, 0xF0CC, 0xF0FE, 0x2FBE,

+    0xF140, 0xF162, 0x2FF1, 0xF163, 0xF16A, 0x3015, 0xF16B, 0xF16B, 0x3160,

+    0xF16C, 0xF17E, 0x301D, 0xF1A1, 0xF1FE, 0x3030, 0xF240, 0xF267, 0x308E,

+    0xF268, 0xF268, 0x31EF, 0xF269, 0xF27E, 0x30B6, 0xF2A1, 0xF2C2, 0x30CC,

+    0xF2C3, 0xF2FE, 0x30EF, 0xF340, 0xF374, 0x312B, 0xF375, 0xF37E, 0x3161,

+    0xF3A1, 0xF3FE, 0x316B, 0xF440, 0xF465, 0x31C9, 0xF466, 0xF47E, 0x31F0,

+    0xF4A1, 0xF4B4, 0x3209, 0xF4B5, 0xF4B5, 0x30EE, 0xF4B6, 0xF4FC, 0x321D,

+    0xF4FD, 0xF4FE, 0x3265, 0xF540, 0xF57E, 0x3267, 0xF5A1, 0xF5FE, 0x32A6,

+    0xF640, 0xF662, 0x3304, 0xF663, 0xF663, 0x3264, 0xF664, 0xF67E, 0x3327,

+    0xF6A1, 0xF6FE, 0x3342, 0xF740, 0xF77E, 0x33A0, 0xF7A1, 0xF7FE, 0x33DF,

+    0xF840, 0xF87E, 0x343D, 0xF8A1, 0xF8FE, 0x347C, 0xF940, 0xF976, 0x34DA,

+    0xF977, 0xF97E, 0x3512, 0xF9A1, 0xF9C3, 0x351A, 0xF9C4, 0xF9C4, 0x3511,

+    0xF9C5, 0xF9C5, 0x353D, 0xF9C6, 0xF9C6, 0x3549, 0xF9C7, 0xF9D1, 0x353E,

+    0xF9D2, 0xF9D5, 0x354A, 0xF9D6, 0xF9FE, 0x36E8,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp
new file mode 100644
index 0000000..e1d9e23
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp
@@ -0,0 +1,13 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_ETen_B5_V_0[13 * 3] = {

+    0xA14B, 0xA14B, 0x354E, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C, 0x35B1,

+    0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165, 0xA166, 0x008A,

+    0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092, 0xA171, 0xA172, 0x0096,

+    0xA175, 0xA176, 0x009A, 0xA179, 0xA17A, 0x009E, 0xA1E3, 0xA1E3, 0x354F,

+    0xC6E4, 0xC6E5, 0x3711,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/ETenms-B5-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETenms-B5-H_0.cpp
new file mode 100644
index 0000000..1b5136e
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETenms-B5-H_0.cpp
@@ -0,0 +1,9 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_ETenms_B5_H_0[1 * 3] = {

+    0x0020, 0x007E, 0x0001,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/ETenms-B5-V_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETenms-B5-V_0.cpp
new file mode 100644
index 0000000..1b8ad0e
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETenms-B5-V_0.cpp
@@ -0,0 +1,14 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_ETenms_B5_V_0[18 * 3] = {

+    0xA14B, 0xA14B, 0x354E, 0xA14C, 0xA14C, 0x006D, 0xA156, 0xA156, 0x0138,

+    0xA158, 0xA158, 0x007A, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C, 0x35B1,

+    0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165, 0xA166, 0x008A,

+    0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092, 0xA171, 0xA172, 0x0096,

+    0xA175, 0xA176, 0x009A, 0xA179, 0xA17A, 0x009E, 0xA17D, 0xA17E, 0x0082,

+    0xA1A1, 0xA1A2, 0x0086, 0xA1A3, 0xA1A4, 0x008A, 0xC6E4, 0xC6E5, 0x3711,

+};

diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-H_5.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-H_5.cpp
new file mode 100644
index 0000000..287c10e
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-H_5.cpp
@@ -0,0 +1,412 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+extern const unsigned short g_FXCMAP_HKscs_B5_H_5[1210 * 3] = {
+    0x0020, 0x007E, 0x0001, 0x8740, 0x8765, 0x4A15, 0x8767, 0x8779, 0x4A3B,
+    0x8840, 0x8855, 0x44C9, 0x8856, 0x887E, 0x4961, 0x88A1, 0x88A8, 0x498A,
+    0x88A9, 0x88AA, 0x499C, 0x8940, 0x8941, 0x4534, 0x8943, 0x8943, 0x4536,
+    0x8946, 0x8949, 0x4537, 0x894C, 0x894C, 0x453B, 0x894D, 0x894D, 0x43C3,
+    0x894E, 0x8950, 0x453C, 0x8951, 0x8951, 0x439A, 0x8952, 0x897E, 0x453F,
+    0x89A1, 0x89A5, 0x456C, 0x89A6, 0x89A6, 0x43A2, 0x89AB, 0x89AB, 0x43EC,
+    0x89AC, 0x89AC, 0x4571, 0x89AD, 0x89AD, 0x43EB, 0x89AE, 0x89AE, 0x4572,
+    0x89B0, 0x89B2, 0x4573, 0x89B5, 0x89BF, 0x4576, 0x89C1, 0x89C3, 0x4581,
+    0x89C5, 0x89CE, 0x4584, 0x89CF, 0x89CF, 0x43BC, 0x89D0, 0x89D8, 0x458E,
+    0x89D9, 0x89D9, 0x439C, 0x89DA, 0x89DA, 0x4597, 0x89DB, 0x89DB, 0x439E,
+    0x89DC, 0x89DC, 0x4598, 0x89DD, 0x89DD, 0x439F, 0x89DE, 0x89E0, 0x4599,
+    0x89E1, 0x89E1, 0x43A1, 0x89E2, 0x89E2, 0x459C, 0x89E3, 0x89E3, 0x43A3,
+    0x89E4, 0x89E9, 0x459D, 0x89EA, 0x89EB, 0x43A5, 0x89EC, 0x89F9, 0x45A3,
+    0x89FA, 0x89FA, 0x43A9, 0x89FB, 0x89FE, 0x45B1, 0x8A40, 0x8A40, 0x45B5,
+    0x8A41, 0x8A41, 0x4309, 0x8A43, 0x8A4C, 0x430B, 0x8A4D, 0x8A4D, 0x45B6,
+    0x8A4E, 0x8A59, 0x4316, 0x8A5A, 0x8A5A, 0x45B7, 0x8A5B, 0x8A5D, 0x4323,
+    0x8A5E, 0x8A5E, 0x45B8, 0x8A5F, 0x8A62, 0x4327, 0x8A64, 0x8A70, 0x432C,
+    0x8A71, 0x8A71, 0x45B9, 0x8A72, 0x8A74, 0x433A, 0x8A76, 0x8A76, 0x433E,
+    0x8A77, 0x8A77, 0x45BA, 0x8A78, 0x8A79, 0x4340, 0x8A7A, 0x8A7A, 0x45BB,
+    0x8A7B, 0x8A7B, 0x4343, 0x8A7C, 0x8A7C, 0x45BC, 0x8A7D, 0x8A7D, 0x4345,
+    0x8A7E, 0x8A7E, 0x45BD, 0x8AA1, 0x8AA7, 0x4347, 0x8AA8, 0x8AA8, 0x45BE,
+    0x8AA9, 0x8AAA, 0x434F, 0x8AAC, 0x8AB0, 0x4352, 0x8AB2, 0x8AB5, 0x4358,
+    0x8AB6, 0x8AB6, 0x45BF, 0x8AB7, 0x8AB7, 0x435D, 0x8AB8, 0x8AB8, 0x45C0,
+    0x8AB9, 0x8AB9, 0x435F, 0x8ABB, 0x8AC7, 0x4361, 0x8AC9, 0x8ACB, 0x436F,
+    0x8ACC, 0x8ACC, 0x45C1, 0x8ACE, 0x8AD5, 0x4374, 0x8AD6, 0x8AD7, 0x45C2,
+    0x8AD8, 0x8ADC, 0x437E, 0x8ADF, 0x8AE5, 0x4385, 0x8AE6, 0x8AE6, 0x45C4,
+    0x8AE7, 0x8AE7, 0x43DB, 0x8AE8, 0x8AF4, 0x45C5, 0x8AF6, 0x8AFE, 0x45D2,
+    0x8B40, 0x8B40, 0x45DB, 0x8B41, 0x8B42, 0x438C, 0x8B43, 0x8B44, 0x45DC,
+    0x8B45, 0x8B45, 0x438E, 0x8B46, 0x8B46, 0x45DE, 0x8B47, 0x8B47, 0x438F,
+    0x8B48, 0x8B48, 0x45DF, 0x8B49, 0x8B49, 0x4390, 0x8B4A, 0x8B4A, 0x45E0,
+    0x8B4B, 0x8B4B, 0x4391, 0x8B4C, 0x8B4C, 0x45E1, 0x8B4D, 0x8B50, 0x4392,
+    0x8B51, 0x8B53, 0x45E2, 0x8B55, 0x8B57, 0x45E5, 0x8B58, 0x8B58, 0x4397,
+    0x8B59, 0x8B59, 0x45E8, 0x8B5A, 0x8B5A, 0x4398, 0x8B5B, 0x8B5B, 0x43C4,
+    0x8B5C, 0x8B60, 0x45E9, 0x8B61, 0x8B61, 0x43A7, 0x8B62, 0x8B67, 0x45EE,
+    0x8B68, 0x8B68, 0x43AC, 0x8B69, 0x8B7E, 0x45F4, 0x8BA1, 0x8BBF, 0x460A,
+    0x8BC0, 0x8BDC, 0x44DF, 0x8BDE, 0x8BFD, 0x44FC, 0x8C40, 0x8C61, 0x49A1,
+    0x8C62, 0x8C62, 0x4A4E, 0x8C63, 0x8C7E, 0x49C3, 0x8CA1, 0x8CA5, 0x49DF,
+    0x8CA7, 0x8CC5, 0x49E4, 0x8CC9, 0x8CCC, 0x4A03, 0x8CCE, 0x8CDA, 0x4A07,
+    0x8CDB, 0x8CDB, 0x4A4F, 0x8CDC, 0x8CDC, 0x4A14, 0x8CDD, 0x8CE4, 0x4A50,
+    0x8CE6, 0x8CFE, 0x4A58, 0x8D40, 0x8D40, 0x4A71, 0x8D42, 0x8D5F, 0x4A72,
+    0x8D60, 0x8D61, 0x4629, 0x8D62, 0x8D62, 0x43BA, 0x8D63, 0x8D67, 0x462B,
+    0x8D68, 0x8D68, 0x43BB, 0x8D69, 0x8D69, 0x43A0, 0x8D6A, 0x8D6A, 0x43BD,
+    0x8D6B, 0x8D6D, 0x4630, 0x8D6E, 0x8D6E, 0x43BE, 0x8D6F, 0x8D75, 0x4633,
+    0x8D76, 0x8D76, 0x43BF, 0x8D77, 0x8D79, 0x463A, 0x8D7A, 0x8D7A, 0x43C0,
+    0x8D7B, 0x8D7B, 0x463D, 0x8D7C, 0x8D7C, 0x43C1, 0x8D7D, 0x8D7E, 0x463E,
+    0x8DA1, 0x8DA4, 0x4640, 0x8DA5, 0x8DA5, 0x43C2, 0x8DA6, 0x8DA7, 0x4644,
+    0x8DA8, 0x8DA8, 0x43B9, 0x8DA9, 0x8DA9, 0x43AD, 0x8DAA, 0x8DB5, 0x4646,
+    0x8DB6, 0x8DB6, 0x43C7, 0x8DB7, 0x8DC2, 0x4652, 0x8DC3, 0x8DC3, 0x43C8,
+    0x8DC4, 0x8DF9, 0x465E, 0x8DFA, 0x8DFA, 0x43F9, 0x8DFB, 0x8DFE, 0x4694,
+    0x8E40, 0x8E44, 0x372B, 0x8E45, 0x8E45, 0x4698, 0x8E46, 0x8E68, 0x3730,
+    0x8E69, 0x8E69, 0x1055, 0x8E6A, 0x8E6A, 0x3754, 0x8E6B, 0x8E6C, 0x4699,
+    0x8E6D, 0x8E6E, 0x3756, 0x8E6F, 0x8E6F, 0x2DE8, 0x8E70, 0x8E75, 0x3759,
+    0x8E76, 0x8E76, 0x469B, 0x8E77, 0x8E7A, 0x375F, 0x8E7B, 0x8E7B, 0x469C,
+    0x8E7C, 0x8E7D, 0x3764, 0x8E7E, 0x8E7E, 0x0121, 0x8EA1, 0x8EA5, 0x3766,
+    0x8EA6, 0x8EA6, 0x469D, 0x8EA7, 0x8EAA, 0x376B, 0x8EAB, 0x8EAB, 0x106B,
+    0x8EAC, 0x8EB3, 0x3770, 0x8EB4, 0x8EB4, 0x1326, 0x8EB5, 0x8EB7, 0x3779,
+    0x8EB8, 0x8EB8, 0x469E, 0x8EB9, 0x8EC8, 0x377D, 0x8EC9, 0x8EC9, 0x469F,
+    0x8ECA, 0x8ECC, 0x378D, 0x8ECD, 0x8ECD, 0x066B, 0x8ECE, 0x8ECF, 0x3791,
+    0x8ED0, 0x8ED0, 0x132E, 0x8ED1, 0x8EE4, 0x3794, 0x8EE5, 0x8EE5, 0x46A0,
+    0x8EE6, 0x8EEE, 0x37A8, 0x8EEF, 0x8EEF, 0x46A1, 0x8EF0, 0x8EF5, 0x37B1,
+    0x8EF6, 0x8EF6, 0x46A2, 0x8EF7, 0x8EFE, 0x37B8, 0x8F40, 0x8F56, 0x37C0,
+    0x8F57, 0x8F57, 0x0D35, 0x8F58, 0x8F58, 0x37D8, 0x8F59, 0x8F59, 0x46A3,
+    0x8F5A, 0x8F5E, 0x37D9, 0x8F5F, 0x8F5F, 0x46A4, 0x8F60, 0x8F66, 0x37DE,
+    0x8F67, 0x8F67, 0x46A5, 0x8F68, 0x8F68, 0x37E5, 0x8F69, 0x8F69, 0x27C2,
+    0x8F6A, 0x8F6D, 0x37E7, 0x8F6E, 0x8F6E, 0x22AD, 0x8F6F, 0x8F78, 0x37EC,
+    0x8F79, 0x8F79, 0x46A6, 0x8F7A, 0x8F7E, 0x37F7, 0x8FA1, 0x8FAF, 0x37FC,
+    0x8FB0, 0x8FB0, 0x46A7, 0x8FB1, 0x8FC4, 0x380C, 0x8FC5, 0x8FC5, 0x46A8,
+    0x8FC6, 0x8FC6, 0x3820, 0x8FC7, 0x8FC7, 0x46A9, 0x8FC8, 0x8FC9, 0x3821,
+    0x8FCA, 0x8FCA, 0x46AA, 0x8FCB, 0x8FCB, 0x134C, 0x8FCC, 0x8FCC, 0x3FF9,
+    0x8FCD, 0x8FD9, 0x3826, 0x8FDA, 0x8FDA, 0x46AB, 0x8FDB, 0x8FE2, 0x3833,
+    0x8FE3, 0x8FE3, 0x46AC, 0x8FE4, 0x8FFB, 0x383C, 0x8FFC, 0x8FFC, 0x46AD,
+    0x8FFD, 0x8FFD, 0x3854, 0x8FFE, 0x8FFE, 0x09CE, 0x9040, 0x9054, 0x3856,
+    0x9055, 0x9055, 0x46AE, 0x9056, 0x905B, 0x386C, 0x905C, 0x905E, 0x46AF,
+    0x905F, 0x906C, 0x3873, 0x906D, 0x906D, 0x0BC7, 0x906E, 0x906E, 0x3882,
+    0x906F, 0x906F, 0x46B2, 0x9070, 0x9079, 0x3883, 0x907A, 0x907A, 0x36E9,
+    0x907B, 0x907E, 0x388D, 0x90A1, 0x90A5, 0x3891, 0x90A6, 0x90A6, 0x46B3,
+    0x90A7, 0x90B7, 0x3896, 0x90B8, 0x90B8, 0x46B4, 0x90B9, 0x90DB, 0x38A7,
+    0x90DC, 0x90DC, 0x1391, 0x90DD, 0x90F0, 0x38CB, 0x90F1, 0x90F1, 0x16A4,
+    0x90F2, 0x90FE, 0x38E0, 0x9140, 0x9164, 0x38ED, 0x9165, 0x9165, 0x46B5,
+    0x9166, 0x916D, 0x3912, 0x916E, 0x916E, 0x46B6, 0x916F, 0x917D, 0x391A,
+    0x917E, 0x917E, 0x46B7, 0x91A1, 0x91A1, 0x3929, 0x91A2, 0x91A2, 0x46B8,
+    0x91A3, 0x91BE, 0x392A, 0x91BF, 0x91BF, 0x3072, 0x91C0, 0x91C7, 0x3947,
+    0x91C8, 0x91C8, 0x46B9, 0x91C9, 0x91FE, 0x3950, 0x9240, 0x9243, 0x3986,
+    0x9244, 0x9244, 0x3988, 0x9245, 0x9263, 0x398B, 0x9264, 0x9264, 0x46BA,
+    0x9265, 0x926C, 0x39AB, 0x926D, 0x926D, 0x46BB, 0x926E, 0x927E, 0x39B4,
+    0x92A1, 0x92AE, 0x39C5, 0x92AF, 0x92B0, 0x0119, 0x92B1, 0x92B1, 0x011C,
+    0x92B2, 0x92B2, 0x011B, 0x92B3, 0x92C7, 0x39D3, 0x92C8, 0x92C8, 0x3FAC,
+    0x92C9, 0x92D0, 0x39E9, 0x92D1, 0x92D1, 0x297C, 0x92D2, 0x92E4, 0x39F2,
+    0x92E5, 0x92E5, 0x46BC, 0x92E6, 0x92F1, 0x3A05, 0x92F2, 0x92F2, 0x46BD,
+    0x92F3, 0x92FE, 0x3A11, 0x9340, 0x9367, 0x3A1D, 0x9368, 0x9368, 0x46BE,
+    0x9369, 0x937E, 0x3A45, 0x93A1, 0x93A9, 0x3A5B, 0x93AA, 0x93AA, 0x46BF,
+    0x93AB, 0x93C1, 0x3A64, 0x93C2, 0x93C2, 0x46C0, 0x93C3, 0x93E4, 0x3A7B,
+    0x93E5, 0x93E5, 0x46C1, 0x93E6, 0x93E7, 0x3A9D, 0x93E8, 0x93E8, 0x46C2,
+    0x93E9, 0x93EA, 0x3AA0, 0x93EB, 0x93EB, 0x46C3, 0x93EC, 0x93FE, 0x3AA2,
+    0x9440, 0x9445, 0x3AB5, 0x9446, 0x9446, 0x46C4, 0x9447, 0x9447, 0x1D06,
+    0x9448, 0x9478, 0x3ABC, 0x9479, 0x9479, 0x46C5, 0x947A, 0x947E, 0x3AEE,
+    0x94A1, 0x94C9, 0x3AF3, 0x94CA, 0x94CA, 0x29A1, 0x94CB, 0x94CB, 0x46C6,
+    0x94CC, 0x94FE, 0x3B1E, 0x9540, 0x954C, 0x3B51, 0x954D, 0x954D, 0x46C7,
+    0x954E, 0x9559, 0x3B5E, 0x955A, 0x955A, 0x46C8, 0x955B, 0x955E, 0x3B6A,
+    0x955F, 0x955F, 0x46C9, 0x9560, 0x957E, 0x3B6F, 0x95A1, 0x95C5, 0x3B8E,
+    0x95C6, 0x95C6, 0x46CA, 0x95C7, 0x95D8, 0x3BB3, 0x95D9, 0x95D9, 0x181B,
+    0x95DA, 0x95FE, 0x3BC6, 0x9640, 0x9643, 0x3BEB, 0x9644, 0x9644, 0x3E2F,
+    0x9645, 0x9650, 0x3BF0, 0x9651, 0x9651, 0x46CB, 0x9652, 0x9669, 0x3BFD,
+    0x966A, 0x966A, 0x46CC, 0x966B, 0x967E, 0x3C16, 0x96A1, 0x96D3, 0x3C2A,
+    0x96D4, 0x96D4, 0x46CD, 0x96D5, 0x96EC, 0x3C5D, 0x96ED, 0x96ED, 0x3C76,
+    0x96EE, 0x96FB, 0x3C76, 0x96FC, 0x96FC, 0x2B24, 0x96FD, 0x96FE, 0x3C85,
+    0x9740, 0x977E, 0x3C87, 0x97A1, 0x97FE, 0x3CC6, 0x9840, 0x9843, 0x3D24,
+    0x9844, 0x9845, 0x46CE, 0x9846, 0x986E, 0x3D2A, 0x986F, 0x986F, 0x46D0,
+    0x9870, 0x9874, 0x3D54, 0x9875, 0x9876, 0x46D1, 0x9877, 0x9877, 0x3D59,
+    0x9878, 0x9879, 0x46D3, 0x987A, 0x987A, 0x3D5A, 0x987B, 0x987E, 0x46D5,
+    0x98A1, 0x98A2, 0x46D9, 0x98A3, 0x98A3, 0x3D5B, 0x98A4, 0x98AE, 0x46DB,
+    0x98AF, 0x98AF, 0x3D5C, 0x98B0, 0x98B3, 0x46E6, 0x98B4, 0x98B4, 0x43CA,
+    0x98B5, 0x98B5, 0x46EA, 0x98B6, 0x98B6, 0x3D5D, 0x98B7, 0x98B7, 0x46EB,
+    0x98B8, 0x98B8, 0x43CC, 0x98B9, 0x98B9, 0x3D5E, 0x98BA, 0x98BA, 0x46EC,
+    0x98BB, 0x98BB, 0x43FA, 0x98BC, 0x98BC, 0x46ED, 0x98BD, 0x98BE, 0x3D5F,
+    0x98BF, 0x98C1, 0x46EE, 0x98C2, 0x98C2, 0x3D61, 0x98C3, 0x98C3, 0x46F1,
+    0x98C4, 0x98C4, 0x3D62, 0x98C5, 0x98C5, 0x46F2, 0x98C6, 0x98C7, 0x3D63,
+    0x98C8, 0x98D1, 0x46F3, 0x98D2, 0x98D2, 0x43CD, 0x98D3, 0x98D7, 0x46FD,
+    0x98D8, 0x98D9, 0x43CE, 0x98DA, 0x98DA, 0x4702, 0x98DB, 0x98DB, 0x43D1,
+    0x98DC, 0x98DE, 0x4703, 0x98DF, 0x98DF, 0x43D4, 0x98E0, 0x98E2, 0x4706,
+    0x98E3, 0x98E3, 0x3D65, 0x98E4, 0x98E6, 0x4709, 0x98E7, 0x98E7, 0x3D66,
+    0x98E8, 0x98EC, 0x470C, 0x98ED, 0x98ED, 0x3D67, 0x98EE, 0x98EF, 0x4711,
+    0x98F0, 0x98F0, 0x3D68, 0x98F1, 0x98F1, 0x4713, 0x98F2, 0x98F2, 0x3D69,
+    0x98F3, 0x98F3, 0x4714, 0x98F4, 0x98F5, 0x43D5, 0x98F6, 0x98FB, 0x4715,
+    0x98FC, 0x98FC, 0x3D6A, 0x98FD, 0x98FD, 0x471B, 0x98FE, 0x98FE, 0x43D7,
+    0x9940, 0x9941, 0x471C, 0x9942, 0x9942, 0x43FC, 0x9943, 0x9943, 0x3D6B,
+    0x9944, 0x9944, 0x471E, 0x9945, 0x9945, 0x3D6C, 0x9946, 0x9946, 0x471F,
+    0x9947, 0x9947, 0x43D8, 0x9948, 0x994E, 0x4720, 0x994F, 0x994F, 0x3D6D,
+    0x9950, 0x9953, 0x4727, 0x9954, 0x9954, 0x43D9, 0x9955, 0x995B, 0x472B,
+    0x995C, 0x995C, 0x43DA, 0x995D, 0x9963, 0x4732, 0x9964, 0x9964, 0x43DC,
+    0x9965, 0x9969, 0x4739, 0x996A, 0x996A, 0x3D6E, 0x996B, 0x996D, 0x473E,
+    0x996E, 0x996E, 0x3D6F, 0x996F, 0x9974, 0x4741, 0x9975, 0x9975, 0x3D70,
+    0x9976, 0x9977, 0x4747, 0x9978, 0x9978, 0x3D71, 0x9979, 0x997E, 0x4749,
+    0x99A1, 0x99A1, 0x474F, 0x99A2, 0x99A2, 0x3D72, 0x99A3, 0x99A3, 0x4750,
+    0x99A4, 0x99A4, 0x43C5, 0x99A5, 0x99A5, 0x4751, 0x99A6, 0x99A6, 0x43C6,
+    0x99A7, 0x99AD, 0x4752, 0x99AE, 0x99AE, 0x3D73, 0x99AF, 0x99B1, 0x4759,
+    0x99B2, 0x99B2, 0x43DE, 0x99B3, 0x99B5, 0x475C, 0x99B6, 0x99B6, 0x3D74,
+    0x99B7, 0x99B9, 0x475F, 0x99BA, 0x99BA, 0x3D75, 0x99BB, 0x99C9, 0x4762,
+    0x99CA, 0x99CA, 0x43E0, 0x99CB, 0x99CC, 0x4771, 0x99CD, 0x99CD, 0x43E2,
+    0x99CE, 0x99D2, 0x4773, 0x99D3, 0x99D3, 0x43E3, 0x99D4, 0x99D5, 0x4778,
+    0x99D6, 0x99D6, 0x43E5, 0x99D7, 0x99DE, 0x477A, 0x99DF, 0x99DF, 0x43DF,
+    0x99E0, 0x99E1, 0x4782, 0x99E2, 0x99E2, 0x3D76, 0x99E3, 0x99E3, 0x4784,
+    0x99E4, 0x99E4, 0x43AB, 0x99E5, 0x99E5, 0x4785, 0x99E6, 0x99E6, 0x43E7,
+    0x99E7, 0x99E7, 0x4786, 0x99E8, 0x99E8, 0x43E9, 0x99E9, 0x99EE, 0x4787,
+    0x99EF, 0x99EF, 0x43FD, 0x99F0, 0x99F3, 0x478D, 0x99F4, 0x99F4, 0x3D77,
+    0x99F5, 0x99FE, 0x4791, 0x9A40, 0x9A49, 0x479B, 0x9A4A, 0x9A4A, 0x3D78,
+    0x9A4B, 0x9A4B, 0x47A5, 0x9A4C, 0x9A4C, 0x3D79, 0x9A4D, 0x9A58, 0x47A6,
+    0x9A59, 0x9A59, 0x3D7A, 0x9A5A, 0x9A5E, 0x47B2, 0x9A5F, 0x9A5F, 0x43AF,
+    0x9A60, 0x9A60, 0x47B7, 0x9A61, 0x9A61, 0x3D7B, 0x9A62, 0x9A65, 0x47B8,
+    0x9A66, 0x9A66, 0x43ED, 0x9A67, 0x9A67, 0x47BC, 0x9A68, 0x9A68, 0x3D7C,
+    0x9A69, 0x9A69, 0x43EE, 0x9A6A, 0x9A6A, 0x47BD, 0x9A6B, 0x9A6B, 0x43FF,
+    0x9A6C, 0x9A72, 0x47BE, 0x9A73, 0x9A73, 0x3D7D, 0x9A74, 0x9A74, 0x47C5,
+    0x9A75, 0x9A75, 0x43F1, 0x9A76, 0x9A7D, 0x47C6, 0x9A7E, 0x9A7E, 0x3D7E,
+    0x9AA1, 0x9AA2, 0x47CE, 0x9AA3, 0x9AA3, 0x43F3, 0x9AA4, 0x9AA4, 0x47D0,
+    0x9AA5, 0x9AA5, 0x43F2, 0x9AA6, 0x9AA8, 0x47D1, 0x9AA9, 0x9AA9, 0x43F8,
+    0x9AAA, 0x9AAA, 0x43F4, 0x9AAB, 0x9AB1, 0x47D4, 0x9AB2, 0x9AB2, 0x3D7F,
+    0x9AB3, 0x9AB6, 0x47DB, 0x9AB7, 0x9AB7, 0x3D80, 0x9AB8, 0x9AB8, 0x47DF,
+    0x9AB9, 0x9AB9, 0x3D81, 0x9ABA, 0x9ABA, 0x47E0, 0x9ABB, 0x9ABB, 0x3D82,
+    0x9ABC, 0x9ABC, 0x47E1, 0x9ABD, 0x9ABD, 0x43B7, 0x9ABE, 0x9AC6, 0x47E2,
+    0x9AC7, 0x9AC7, 0x3D83, 0x9AC8, 0x9ACF, 0x47EB, 0x9AD0, 0x9AD0, 0x3D84,
+    0x9AD1, 0x9AD1, 0x47F3, 0x9AD2, 0x9AD2, 0x3D85, 0x9AD3, 0x9AD8, 0x47F4,
+    0x9AD9, 0x9ADB, 0x3D86, 0x9ADC, 0x9AE1, 0x47FA, 0x9AE2, 0x9AE2, 0x3D89,
+    0x9AE3, 0x9AE3, 0x4800, 0x9AE4, 0x9AE4, 0x3D8A, 0x9AE5, 0x9AE7, 0x4801,
+    0x9AE8, 0x9AE8, 0x3D8B, 0x9AE9, 0x9AE9, 0x43B0, 0x9AEA, 0x9AED, 0x4804,
+    0x9AEE, 0x9AEE, 0x43B2, 0x9AEF, 0x9AF1, 0x4808, 0x9AF2, 0x9AF2, 0x3D8C,
+    0x9AF3, 0x9AF5, 0x480B, 0x9AF6, 0x9AF6, 0x3D8D, 0x9AF7, 0x9AFA, 0x480E,
+    0x9AFB, 0x9AFB, 0x3D8E, 0x9AFC, 0x9AFE, 0x4812, 0x9B40, 0x9B45, 0x4815,
+    0x9B46, 0x9B46, 0x3D8F, 0x9B47, 0x9B49, 0x481B, 0x9B4A, 0x9B4A, 0x3D90,
+    0x9B4B, 0x9B53, 0x481E, 0x9B54, 0x9B54, 0x3D92, 0x9B55, 0x9B57, 0x4827,
+    0x9B58, 0x9B58, 0x3D93, 0x9B59, 0x9B59, 0x482A, 0x9B5A, 0x9B5A, 0x3D94,
+    0x9B5B, 0x9B5B, 0x482B, 0x9B5C, 0x9B5C, 0x3D95, 0x9B5D, 0x9B5D, 0x482C,
+    0x9B5E, 0x9B5F, 0x3D96, 0x9B60, 0x9B60, 0x482D, 0x9B62, 0x9B6F, 0x482E,
+    0x9B70, 0x9B73, 0x3D98, 0x9B74, 0x9B75, 0x483C, 0x9B76, 0x9B76, 0x2F50,
+    0x9B77, 0x9B77, 0x3D9D, 0x9B78, 0x9B78, 0x1725, 0x9B79, 0x9B7A, 0x483E,
+    0x9B7B, 0x9B7B, 0x32ED, 0x9B7C, 0x9B7C, 0x3DA0, 0x9B7D, 0x9B7D, 0x4840,
+    0x9B7E, 0x9B7E, 0x3DA1, 0x9BA1, 0x9BA1, 0x3DA2, 0x9BA2, 0x9BA2, 0x4841,
+    0x9BA3, 0x9BA4, 0x3DA3, 0x9BA5, 0x9BA6, 0x4842, 0x9BA7, 0x9BAA, 0x3DA5,
+    0x9BAB, 0x9BAB, 0x4844, 0x9BAC, 0x9BAC, 0x3DA9, 0x9BAD, 0x9BAE, 0x4845,
+    0x9BAF, 0x9BAF, 0x3DAA, 0x9BB0, 0x9BB1, 0x4847, 0x9BB2, 0x9BB9, 0x3DAB,
+    0x9BBA, 0x9BBD, 0x4849, 0x9BBE, 0x9BBE, 0x3DB3, 0x9BBF, 0x9BBF, 0x484D,
+    0x9BC0, 0x9BC5, 0x3DB4, 0x9BC6, 0x9BC6, 0x2AD9, 0x9BC7, 0x9BC9, 0x484E,
+    0x9BCA, 0x9BCA, 0x3DBB, 0x9BCB, 0x9BCB, 0x4851, 0x9BCC, 0x9BCC, 0x3DBC,
+    0x9BCD, 0x9BCD, 0x4852, 0x9BCE, 0x9BCE, 0x43D0, 0x9BCF, 0x9BCF, 0x4853,
+    0x9BD0, 0x9BD1, 0x3DBD, 0x9BD2, 0x9BD2, 0x4854, 0x9BD3, 0x9BD3, 0x3DBF,
+    0x9BD4, 0x9BD4, 0x4855, 0x9BD5, 0x9BD5, 0x3DC0, 0x9BD6, 0x9BD7, 0x4856,
+    0x9BD8, 0x9BDA, 0x3DC1, 0x9BDB, 0x9BDC, 0x4858, 0x9BDD, 0x9BDD, 0x3DC4,
+    0x9BDE, 0x9BDE, 0x1C14, 0x9BDF, 0x9BDF, 0x3DC5, 0x9BE0, 0x9BE0, 0x485A,
+    0x9BE1, 0x9BE1, 0x3DC6, 0x9BE2, 0x9BE2, 0x485B, 0x9BE3, 0x9BE3, 0x3DC7,
+    0x9BE4, 0x9BE6, 0x485C, 0x9BE7, 0x9BE7, 0x3DC8, 0x9BE8, 0x9BE8, 0x485F,
+    0x9BE9, 0x9BEB, 0x3DC9, 0x9BEC, 0x9BEC, 0x41FA, 0x9BED, 0x9BED, 0x4860,
+    0x9BEE, 0x9BEF, 0x3DCD, 0x9BF0, 0x9BF2, 0x4861, 0x9BF3, 0x9BF3, 0x3DCF,
+    0x9BF4, 0x9BF5, 0x4864, 0x9BF6, 0x9BF6, 0x12E9, 0x9BF7, 0x9BF7, 0x4866,
+    0x9BF8, 0x9BF9, 0x3DD1, 0x9BFA, 0x9BFA, 0x4867, 0x9BFB, 0x9BFC, 0x3DD3,
+    0x9BFD, 0x9BFE, 0x4868, 0x9C40, 0x9C41, 0x3DD5, 0x9C42, 0x9C42, 0x2CAE,
+    0x9C43, 0x9C43, 0x486A, 0x9C44, 0x9C46, 0x3DD8, 0x9C47, 0x9C47, 0x486B,
+    0x9C48, 0x9C48, 0x3DDB, 0x9C49, 0x9C49, 0x486C, 0x9C4A, 0x9C4A, 0x3DDC,
+    0x9C4B, 0x9C4C, 0x486D, 0x9C4D, 0x9C52, 0x3DDD, 0x9C53, 0x9C53, 0x1A64,
+    0x9C54, 0x9C54, 0x486F, 0x9C55, 0x9C55, 0x3DE4, 0x9C56, 0x9C56, 0x4870,
+    0x9C57, 0x9C5B, 0x3DE5, 0x9C5C, 0x9C5C, 0x4871, 0x9C5D, 0x9C5D, 0x3DEA,
+    0x9C5E, 0x9C5F, 0x4872, 0x9C60, 0x9C60, 0x3DEB, 0x9C61, 0x9C61, 0x4874,
+    0x9C62, 0x9C62, 0x1404, 0x9C63, 0x9C63, 0x4875, 0x9C64, 0x9C66, 0x3DED,
+    0x9C67, 0x9C67, 0x4876, 0x9C68, 0x9C68, 0x2324, 0x9C69, 0x9C69, 0x4877,
+    0x9C6A, 0x9C6A, 0x3DF1, 0x9C6B, 0x9C6B, 0x346A, 0x9C6C, 0x9C6C, 0x4878,
+    0x9C6D, 0x9C6D, 0x3DF2, 0x9C6E, 0x9C6E, 0x4879, 0x9C6F, 0x9C72, 0x3DF3,
+    0x9C73, 0x9C74, 0x487A, 0x9C75, 0x9C76, 0x3DF7, 0x9C77, 0x9C77, 0x2291,
+    0x9C78, 0x9C78, 0x487C, 0x9C79, 0x9C79, 0x3DFA, 0x9C7A, 0x9C7A, 0x487D,
+    0x9C7B, 0x9C7C, 0x3DFB, 0x9C7D, 0x9C7D, 0x487E, 0x9C7E, 0x9C7E, 0x3DFD,
+    0x9CA1, 0x9CA2, 0x3DFE, 0x9CA3, 0x9CA4, 0x487F, 0x9CA5, 0x9CA5, 0x3E00,
+    0x9CA6, 0x9CA7, 0x4881, 0x9CA8, 0x9CA9, 0x3E01, 0x9CAA, 0x9CAA, 0x4883,
+    0x9CAB, 0x9CAB, 0x3E03, 0x9CAC, 0x9CAC, 0x4884, 0x9CAD, 0x9CAE, 0x3E04,
+    0x9CAF, 0x9CB0, 0x4885, 0x9CB1, 0x9CBA, 0x3E06, 0x9CBB, 0x9CBB, 0x4887,
+    0x9CBC, 0x9CBC, 0x1787, 0x9CBD, 0x9CBD, 0x095F, 0x9CBE, 0x9CC2, 0x3E12,
+    0x9CC3, 0x9CC5, 0x4888, 0x9CC6, 0x9CCD, 0x3E17, 0x9CCE, 0x9CCE, 0x488B,
+    0x9CCF, 0x9CCF, 0x3E1F, 0x9CD0, 0x9CD0, 0x1E99, 0x9CD1, 0x9CD3, 0x3E21,
+    0x9CD4, 0x9CD7, 0x488C, 0x9CD8, 0x9CDA, 0x3E24, 0x9CDB, 0x9CDB, 0x4890,
+    0x9CDC, 0x9CE5, 0x3E27, 0x9CE6, 0x9CE6, 0x4891, 0x9CE7, 0x9CE9, 0x3E31,
+    0x9CEA, 0x9CEA, 0x4892, 0x9CEB, 0x9CEC, 0x3E34, 0x9CED, 0x9CED, 0x4893,
+    0x9CEE, 0x9CF9, 0x3E36, 0x9CFA, 0x9CFC, 0x4894, 0x9CFD, 0x9CFD, 0x3E42,
+    0x9CFE, 0x9CFE, 0x4897, 0x9D40, 0x9D40, 0x43E8, 0x9D41, 0x9D45, 0x4898,
+    0x9D46, 0x9D46, 0x3E43, 0x9D47, 0x9D48, 0x489D, 0x9D49, 0x9D49, 0x3E44,
+    0x9D4A, 0x9D4B, 0x489F, 0x9D4C, 0x9D4D, 0x3E46, 0x9D4E, 0x9D4E, 0x48A1,
+    0x9D4F, 0x9D4F, 0x3E48, 0x9D50, 0x9D50, 0x48A2, 0x9D51, 0x9D51, 0x3E49,
+    0x9D52, 0x9D54, 0x48A3, 0x9D55, 0x9D55, 0x3E4A, 0x9D56, 0x9D56, 0x48A6,
+    0x9D57, 0x9D57, 0x25C1, 0x9D58, 0x9D59, 0x48A7, 0x9D5A, 0x9D5A, 0x0D0C,
+    0x9D5B, 0x9D60, 0x48A9, 0x9D61, 0x9D61, 0x43C9, 0x9D62, 0x9D62, 0x3E4C,
+    0x9D63, 0x9D63, 0x48AF, 0x9D64, 0x9D64, 0x3E4D, 0x9D65, 0x9D77, 0x48B0,
+    0x9D78, 0x9D78, 0x43F5, 0x9D79, 0x9D79, 0x3E4E, 0x9D7A, 0x9D7D, 0x48C3,
+    0x9D7E, 0x9D7E, 0x3E4F, 0x9DA1, 0x9DA4, 0x48C7, 0x9DA5, 0x9DA8, 0x3E50,
+    0x9DA9, 0x9DA9, 0x48CB, 0x9DAA, 0x9DAA, 0x3E54, 0x9DAB, 0x9DAB, 0x48CC,
+    0x9DAC, 0x9DAD, 0x3E55, 0x9DAE, 0x9DAF, 0x48CD, 0x9DB0, 0x9DB0, 0x3E58,
+    0x9DB1, 0x9DB2, 0x48CF, 0x9DB3, 0x9DB3, 0x3E59, 0x9DB4, 0x9DB4, 0x48D1,
+    0x9DB5, 0x9DB5, 0x3E5A, 0x9DB6, 0x9DB6, 0x48D2, 0x9DB7, 0x9DB7, 0x3E5B,
+    0x9DB8, 0x9DBB, 0x48D3, 0x9DBC, 0x9DBD, 0x3E5C, 0x9DBE, 0x9DBE, 0x48D7,
+    0x9DBF, 0x9DC0, 0x3E5E, 0x9DC1, 0x9DC2, 0x48D8, 0x9DC3, 0x9DC3, 0x3E60,
+    0x9DC4, 0x9DC4, 0x05E6, 0x9DC5, 0x9DC6, 0x48DA, 0x9DC7, 0x9DC8, 0x3E62,
+    0x9DC9, 0x9DC9, 0x48DC, 0x9DCA, 0x9DCA, 0x3E64, 0x9DCB, 0x9DCC, 0x48DD,
+    0x9DCD, 0x9DD1, 0x3E65, 0x9DD2, 0x9DD2, 0x48DF, 0x9DD3, 0x9DD5, 0x3E6A,
+    0x9DD6, 0x9DD9, 0x48E0, 0x9DDA, 0x9DFB, 0x3E6D, 0x9DFC, 0x9DFC, 0x48E4,
+    0x9DFD, 0x9DFE, 0x3E8F, 0x9E40, 0x9E42, 0x3E91, 0x9E43, 0x9E43, 0x48E5,
+    0x9E44, 0x9E5E, 0x3E95, 0x9E5F, 0x9E5F, 0x48E6, 0x9E60, 0x9E62, 0x3EB1,
+    0x9E63, 0x9E63, 0x48E7, 0x9E64, 0x9E65, 0x3EB4, 0x9E66, 0x9E67, 0x48E8,
+    0x9E68, 0x9E68, 0x3EB6, 0x9E69, 0x9E69, 0x48EA, 0x9E6A, 0x9E6A, 0x3EB7,
+    0x9E6B, 0x9E70, 0x48EB, 0x9E71, 0x9E71, 0x3EB8, 0x9E72, 0x9E72, 0x48F1,
+    0x9E73, 0x9E73, 0x3EB9, 0x9E74, 0x9E76, 0x48F2, 0x9E77, 0x9E78, 0x3EBA,
+    0x9E79, 0x9E79, 0x48F5, 0x9E7A, 0x9E7A, 0x3EBC, 0x9E7B, 0x9E7B, 0x48F6,
+    0x9E7C, 0x9E7C, 0x3EBD, 0x9E7D, 0x9E7D, 0x48F7, 0x9E7E, 0x9E7E, 0x3EBE,
+    0x9EA1, 0x9EA2, 0x3EBF, 0x9EA3, 0x9EA3, 0x48F8, 0x9EA4, 0x9EA6, 0x3EC1,
+    0x9EA7, 0x9EA8, 0x48F9, 0x9EA9, 0x9EA9, 0x0728, 0x9EAA, 0x9EAA, 0x3EC5,
+    0x9EAB, 0x9EAB, 0x48FB, 0x9EAC, 0x9EAD, 0x3EC6, 0x9EAE, 0x9EAE, 0x48FC,
+    0x9EAF, 0x9EB1, 0x3EC8, 0x9EB2, 0x9EB3, 0x48FD, 0x9EB4, 0x9EB4, 0x3ECB,
+    0x9EB5, 0x9EB5, 0x48FF, 0x9EB6, 0x9EB7, 0x3ECC, 0x9EB8, 0x9EB8, 0x4900,
+    0x9EB9, 0x9EB9, 0x3ECE, 0x9EBA, 0x9EBB, 0x4901, 0x9EBC, 0x9EBC, 0x3ECF,
+    0x9EBD, 0x9EBE, 0x4903, 0x9EBF, 0x9EC0, 0x3ED0, 0x9EC1, 0x9EC3, 0x4905,
+    0x9EC4, 0x9EC5, 0x3ED2, 0x9EC6, 0x9EC6, 0x4908, 0x9EC7, 0x9ECA, 0x3ED4,
+    0x9ECB, 0x9ECC, 0x4909, 0x9ECD, 0x9ECD, 0x3ED9, 0x9ECE, 0x9ECF, 0x490B,
+    0x9ED0, 0x9ED1, 0x3EDA, 0x9ED2, 0x9ED2, 0x490D, 0x9ED3, 0x9ED3, 0x3EDC,
+    0x9ED4, 0x9ED5, 0x490E, 0x9ED6, 0x9ED7, 0x3EDD, 0x9ED8, 0x9ED9, 0x4910,
+    0x9EDA, 0x9EEE, 0x3EDF, 0x9EEF, 0x9EEF, 0x24B6, 0x9EF0, 0x9EF1, 0x3EF5,
+    0x9EF2, 0x9EF2, 0x4912, 0x9EF3, 0x9EF5, 0x3EF7, 0x9EF6, 0x9EF8, 0x4913,
+    0x9EF9, 0x9EFA, 0x3EFA, 0x9EFB, 0x9EFB, 0x4916, 0x9EFC, 0x9EFC, 0x3EFC,
+    0x9EFD, 0x9EFD, 0x1806, 0x9EFE, 0x9EFE, 0x3EFE, 0x9F40, 0x9F42, 0x3EFF,
+    0x9F43, 0x9F43, 0x4917, 0x9F44, 0x9F47, 0x3F02, 0x9F48, 0x9F48, 0x4918,
+    0x9F49, 0x9F4A, 0x3F06, 0x9F4B, 0x9F4C, 0x4919, 0x9F4D, 0x9F5F, 0x3F08,
+    0x9F60, 0x9F60, 0x3511, 0x9F61, 0x9F65, 0x3F1C, 0x9F66, 0x9F66, 0x3945,
+    0x9F67, 0x9F68, 0x491B, 0x9F69, 0x9F6F, 0x3F23, 0x9F70, 0x9F70, 0x491D,
+    0x9F71, 0x9F7E, 0x3F2A, 0x9FA1, 0x9FB4, 0x3F38, 0x9FB5, 0x9FB5, 0x491E,
+    0x9FB6, 0x9FBA, 0x3F4C, 0x9FBB, 0x9FBB, 0x491F, 0x9FBC, 0x9FBE, 0x3F51,
+    0x9FBF, 0x9FBF, 0x4920, 0x9FC0, 0x9FC0, 0x3F54, 0x9FC1, 0x9FC1, 0x4921,
+    0x9FC2, 0x9FCA, 0x3F55, 0x9FCB, 0x9FCB, 0x0F82, 0x9FCC, 0x9FCC, 0x4922,
+    0x9FCD, 0x9FD3, 0x3F60, 0x9FD4, 0x9FD4, 0x4923, 0x9FD5, 0x9FD7, 0x3F68,
+    0x9FD8, 0x9FD8, 0x3A3E, 0x9FD9, 0x9FE3, 0x3F6C, 0x9FE4, 0x9FE4, 0x4924,
+    0x9FE5, 0x9FF8, 0x3F77, 0x9FF9, 0x9FF9, 0x4925, 0x9FFA, 0x9FFE, 0x3F8B,
+    0xA040, 0xA040, 0x4926, 0xA041, 0xA046, 0x3F90, 0xA047, 0xA047, 0x4927,
+    0xA048, 0xA054, 0x3F96, 0xA055, 0xA055, 0x4928, 0xA056, 0xA062, 0x3FA3,
+    0xA063, 0xA063, 0x3811, 0xA064, 0xA06C, 0x3FB1, 0xA06D, 0xA06D, 0x4929,
+    0xA06E, 0xA076, 0x3FBA, 0xA077, 0xA077, 0x05F2, 0xA078, 0xA07A, 0x3FC4,
+    0xA07B, 0xA07B, 0x492A, 0xA07C, 0xA07E, 0x3FC7, 0xA0A1, 0xA0A1, 0x3FCA,
+    0xA0A2, 0xA0A2, 0x492B, 0xA0A3, 0xA0A6, 0x3FCB, 0xA0A7, 0xA0A7, 0x492C,
+    0xA0A8, 0xA0C4, 0x3FCF, 0xA0C5, 0xA0C5, 0x492D, 0xA0C6, 0xA0CF, 0x3FEC,
+    0xA0D0, 0xA0D0, 0x492E, 0xA0D1, 0xA0D4, 0x3FF6, 0xA0D5, 0xA0D5, 0x3AEE,
+    0xA0D6, 0xA0DE, 0x3FFB, 0xA0DF, 0xA0DF, 0x247D, 0xA0E0, 0xA0E2, 0x4005,
+    0xA0E3, 0xA0E3, 0x492F, 0xA0E4, 0xA0E4, 0x3AC9, 0xA0E5, 0xA0E6, 0x4009,
+    0xA0E7, 0xA0ED, 0x4930, 0xA0EE, 0xA0EE, 0x43B4, 0xA0EF, 0xA0F1, 0x4937,
+    0xA0F2, 0xA0F2, 0x43B8, 0xA0F3, 0xA0FE, 0x493A, 0xA140, 0xA158, 0x0063,
+    0xA159, 0xA15C, 0x35AF, 0xA15D, 0xA17E, 0x0080, 0xA1A1, 0xA1F5, 0x00A2,
+    0xA1F6, 0xA1F6, 0x00F8, 0xA1F7, 0xA1F7, 0x00F7, 0xA1F8, 0xA1FE, 0x00F9,
+    0xA240, 0xA27E, 0x0100, 0xA2A1, 0xA2FE, 0x013F, 0xA340, 0xA37E, 0x019D,
+    0xA3A1, 0xA3BB, 0x01DC, 0xA3BD, 0xA3BF, 0x01F7, 0xA440, 0xA47E, 0x0253,
+    0xA4A1, 0xA4FE, 0x0292, 0xA540, 0xA57E, 0x02F0, 0xA5A1, 0xA5FE, 0x032F,
+    0xA640, 0xA67E, 0x038D, 0xA6A1, 0xA6FE, 0x03CC, 0xA740, 0xA77E, 0x042A,
+    0xA7A1, 0xA7FE, 0x0469, 0xA840, 0xA87E, 0x04C7, 0xA8A1, 0xA8FE, 0x0506,
+    0xA940, 0xA97E, 0x0564, 0xA9A1, 0xA9FE, 0x05A3, 0xAA40, 0xAA7E, 0x0601,
+    0xAAA1, 0xAAFE, 0x0640, 0xAB40, 0xAB7E, 0x069E, 0xABA1, 0xABFE, 0x06DD,
+    0xAC40, 0xAC7E, 0x073B, 0xACA1, 0xACFD, 0x077A, 0xACFE, 0xACFE, 0x097F,
+    0xAD40, 0xAD7E, 0x07D7, 0xADA1, 0xADFE, 0x0816, 0xAE40, 0xAE7E, 0x0874,
+    0xAEA1, 0xAEFE, 0x08B3, 0xAF40, 0xAF7E, 0x0911, 0xAFA1, 0xAFCF, 0x0950,
+    0xAFD0, 0xAFFE, 0x0980, 0xB040, 0xB07E, 0x09AF, 0xB0A1, 0xB0FE, 0x09EE,
+    0xB140, 0xB17E, 0x0A4C, 0xB1A1, 0xB1FE, 0x0A8B, 0xB240, 0xB27E, 0x0AE9,
+    0xB2A1, 0xB2FE, 0x0B28, 0xB340, 0xB37E, 0x0B86, 0xB3A1, 0xB3FE, 0x0BC5,
+    0xB440, 0xB47E, 0x0C23, 0xB4A1, 0xB4FE, 0x0C62, 0xB540, 0xB57E, 0x0CC0,
+    0xB5A1, 0xB5FE, 0x0CFF, 0xB640, 0xB67E, 0x0D5D, 0xB6A1, 0xB6FE, 0x0D9C,
+    0xB740, 0xB77E, 0x0DFA, 0xB7A1, 0xB7FE, 0x0E39, 0xB840, 0xB87E, 0x0E97,
+    0xB8A1, 0xB8FE, 0x0ED6, 0xB940, 0xB97E, 0x0F34, 0xB9A1, 0xB9FE, 0x0F73,
+    0xBA40, 0xBA7E, 0x0FD1, 0xBAA1, 0xBAFE, 0x1010, 0xBB40, 0xBB7E, 0x106E,
+    0xBBA1, 0xBBC7, 0x10AD, 0xBBC8, 0xBBFE, 0x10D5, 0xBC40, 0xBC7E, 0x110C,
+    0xBCA1, 0xBCFE, 0x114B, 0xBD40, 0xBD7E, 0x11A9, 0xBDA1, 0xBDFE, 0x11E8,
+    0xBE40, 0xBE51, 0x1246, 0xBE52, 0xBE52, 0x10D4, 0xBE53, 0xBE7E, 0x1258,
+    0xBEA1, 0xBEFE, 0x1284, 0xBF40, 0xBF7E, 0x12E2, 0xBFA1, 0xBFFE, 0x1321,
+    0xC040, 0xC07E, 0x137F, 0xC0A1, 0xC0FE, 0x13BE, 0xC140, 0xC17E, 0x141C,
+    0xC1A1, 0xC1AA, 0x145B, 0xC1AB, 0xC1FE, 0x1466, 0xC240, 0xC27E, 0x14BA,
+    0xC2A1, 0xC2CA, 0x14F9, 0xC2CB, 0xC2CB, 0x1465, 0xC2CC, 0xC2FE, 0x1523,
+    0xC340, 0xC360, 0x1556, 0xC361, 0xC37E, 0x1578, 0xC3A1, 0xC3B8, 0x1596,
+    0xC3B9, 0xC3B9, 0x15AF, 0xC3BA, 0xC3BA, 0x15AE, 0xC3BB, 0xC3FE, 0x15B0,
+    0xC440, 0xC455, 0x15F4, 0xC456, 0xC456, 0x1577, 0xC457, 0xC47E, 0x160A,
+    0xC4A1, 0xC4FE, 0x1632, 0xC540, 0xC57E, 0x1690, 0xC5A1, 0xC5FE, 0x16CF,
+    0xC640, 0xC67E, 0x172D, 0xC6A1, 0xC6BE, 0x01FA, 0xC6BF, 0xC6CE, 0x0219,
+    0xC6D0, 0xC6D2, 0x022A, 0xC6D4, 0xC6D4, 0x022E, 0xC6D6, 0xC6D6, 0x0230,
+    0xC6D8, 0xC6DD, 0x35B3, 0xC6E0, 0xC6FE, 0x35BA, 0xC740, 0xC77E, 0x35D9,
+    0xC7A1, 0xC7FE, 0x3618, 0xC840, 0xC87E, 0x3676, 0xC8A1, 0xC8A4, 0x36B5,
+    0xC8CD, 0xC8D3, 0x36E1, 0xC8D4, 0xC8D6, 0x44C6, 0xC8D7, 0xC8DF, 0x451C,
+    0xC8E0, 0xC8E0, 0x499E, 0xC8E1, 0xC8E8, 0x4525, 0xC8E9, 0xC8E9, 0x499F,
+    0xC8EA, 0xC8F0, 0x452D, 0xC8F1, 0xC8F1, 0x49A0, 0xC8F5, 0xC8FE, 0x4992,
+    0xC940, 0xC949, 0x176C, 0xC94A, 0xC94A, 0x0274, 0xC94B, 0xC96B, 0x1776,
+    0xC96C, 0xC97E, 0x1798, 0xC9A1, 0xC9BD, 0x17AB, 0xC9BE, 0xC9BE, 0x1797,
+    0xC9BF, 0xC9EC, 0x17C8, 0xC9ED, 0xC9FE, 0x17F7, 0xCA40, 0xCA7E, 0x1809,
+    0xCAA1, 0xCAF6, 0x1848, 0xCAF7, 0xCAF7, 0x17F6, 0xCAF8, 0xCAFE, 0x189E,
+    0xCB40, 0xCB7E, 0x18A5, 0xCBA1, 0xCBFE, 0x18E4, 0xCC40, 0xCC7E, 0x1942,
+    0xCCA1, 0xCCFE, 0x1981, 0xCD40, 0xCD7E, 0x19DF, 0xCDA1, 0xCDFE, 0x1A1E,
+    0xCE40, 0xCE7E, 0x1A7C, 0xCEA1, 0xCEFE, 0x1ABB, 0xCF40, 0xCF7E, 0x1B19,
+    0xCFA1, 0xCFFE, 0x1B58, 0xD040, 0xD07E, 0x1BB6, 0xD0A1, 0xD0FE, 0x1BF5,
+    0xD140, 0xD17E, 0x1C53, 0xD1A1, 0xD1FE, 0x1C92, 0xD240, 0xD27E, 0x1CF0,
+    0xD2A1, 0xD2FE, 0x1D2F, 0xD340, 0xD37E, 0x1D8D, 0xD3A1, 0xD3FE, 0x1DCC,
+    0xD440, 0xD47E, 0x1E2A, 0xD4A1, 0xD4FE, 0x1E69, 0xD540, 0xD57E, 0x1EC7,
+    0xD5A1, 0xD5FE, 0x1F06, 0xD640, 0xD67E, 0x1F64, 0xD6A1, 0xD6CB, 0x1FA3,
+    0xD6CC, 0xD6CC, 0x2254, 0xD6CD, 0xD6FE, 0x1FCF, 0xD740, 0xD779, 0x2001,
+    0xD77A, 0xD77A, 0x22B9, 0xD77B, 0xD77E, 0x203B, 0xD7A1, 0xD7FE, 0x203F,
+    0xD840, 0xD87E, 0x209D, 0xD8A1, 0xD8FE, 0x20DC, 0xD940, 0xD97E, 0x213A,
+    0xD9A1, 0xD9FE, 0x2179, 0xDA40, 0xDA7E, 0x21D7, 0xDAA1, 0xDADE, 0x2216,
+    0xDADF, 0xDADF, 0x1FCE, 0xDAE0, 0xDAFE, 0x2255, 0xDB40, 0xDB7E, 0x2274,
+    0xDBA1, 0xDBA6, 0x22B3, 0xDBA7, 0xDBFE, 0x22BA, 0xDC40, 0xDC7E, 0x2312,
+    0xDCA1, 0xDCFE, 0x2351, 0xDD40, 0xDD7E, 0x23AF, 0xDDA1, 0xDDFB, 0x23EE,
+    0xDDFC, 0xDDFC, 0x2381, 0xDDFD, 0xDDFE, 0x2449, 0xDE40, 0xDE7E, 0x244B,
+    0xDEA1, 0xDEFE, 0x248A, 0xDF40, 0xDF7E, 0x24E8, 0xDFA1, 0xDFFE, 0x2527,
+    0xE040, 0xE07E, 0x2585, 0xE0A1, 0xE0FE, 0x25C4, 0xE140, 0xE17E, 0x2622,
+    0xE1A1, 0xE1FE, 0x2661, 0xE240, 0xE27E, 0x26BF, 0xE2A1, 0xE2FE, 0x26FE,
+    0xE340, 0xE37E, 0x275C, 0xE3A1, 0xE3FE, 0x279B, 0xE440, 0xE47E, 0x27F9,
+    0xE4A1, 0xE4FE, 0x2838, 0xE540, 0xE57E, 0x2896, 0xE5A1, 0xE5FE, 0x28D5,
+    0xE640, 0xE67E, 0x2933, 0xE6A1, 0xE6FE, 0x2972, 0xE740, 0xE77E, 0x29D0,
+    0xE7A1, 0xE7FE, 0x2A0F, 0xE840, 0xE87E, 0x2A6D, 0xE8A1, 0xE8A2, 0x2AAC,
+    0xE8A3, 0xE8FE, 0x2AAF, 0xE940, 0xE975, 0x2B0B, 0xE976, 0xE97E, 0x2B42,
+    0xE9A1, 0xE9FE, 0x2B4B, 0xEA40, 0xEA7E, 0x2BA9, 0xEAA1, 0xEAFE, 0x2BE8,
+    0xEB40, 0xEB5A, 0x2C46, 0xEB5B, 0xEB7E, 0x2C62, 0xEBA1, 0xEBF0, 0x2C86,
+    0xEBF1, 0xEBF1, 0x2AAE, 0xEBF2, 0xEBFE, 0x2CD6, 0xEC40, 0xEC7E, 0x2CE3,
+    0xECA1, 0xECDD, 0x2D22, 0xECDE, 0xECDE, 0x2B41, 0xECDF, 0xECFE, 0x2D5F,
+    0xED40, 0xED7E, 0x2D7F, 0xEDA1, 0xEDA9, 0x2DBE, 0xEDAA, 0xEDFE, 0x2DC8,
+    0xEE40, 0xEE7E, 0x2E1D, 0xEEA1, 0xEEEA, 0x2E5C, 0xEEEB, 0xEEEB, 0x3014,
+    0xEEEC, 0xEEFE, 0x2EA6, 0xEF40, 0xEF7E, 0x2EB9, 0xEFA1, 0xEFFE, 0x2EF8,
+    0xF040, 0xF055, 0x2F56, 0xF056, 0xF056, 0x2DC7, 0xF057, 0xF07E, 0x2F6C,
+    0xF0A1, 0xF0CA, 0x2F94, 0xF0CB, 0xF0CB, 0x2C61, 0xF0CC, 0xF0FE, 0x2FBE,
+    0xF140, 0xF162, 0x2FF1, 0xF163, 0xF16A, 0x3015, 0xF16B, 0xF16B, 0x3160,
+    0xF16C, 0xF17E, 0x301D, 0xF1A1, 0xF1FE, 0x3030, 0xF240, 0xF267, 0x308E,
+    0xF268, 0xF268, 0x31EF, 0xF269, 0xF27E, 0x30B6, 0xF2A1, 0xF2C2, 0x30CC,
+    0xF2C3, 0xF2FE, 0x30EF, 0xF340, 0xF374, 0x312B, 0xF375, 0xF37E, 0x3161,
+    0xF3A1, 0xF3FE, 0x316B, 0xF440, 0xF465, 0x31C9, 0xF466, 0xF47E, 0x31F0,
+    0xF4A1, 0xF4B4, 0x3209, 0xF4B5, 0xF4B5, 0x30EE, 0xF4B6, 0xF4FC, 0x321D,
+    0xF4FD, 0xF4FE, 0x3265, 0xF540, 0xF57E, 0x3267, 0xF5A1, 0xF5FE, 0x32A6,
+    0xF640, 0xF662, 0x3304, 0xF663, 0xF663, 0x3264, 0xF664, 0xF67E, 0x3327,
+    0xF6A1, 0xF6FE, 0x3342, 0xF740, 0xF77E, 0x33A0, 0xF7A1, 0xF7FE, 0x33DF,
+    0xF840, 0xF87E, 0x343D, 0xF8A1, 0xF8FE, 0x347C, 0xF940, 0xF976, 0x34DA,
+    0xF977, 0xF97E, 0x3512, 0xF9A1, 0xF9C3, 0x351A, 0xF9C4, 0xF9C4, 0x3511,
+    0xF9C5, 0xF9C5, 0x353D, 0xF9C6, 0xF9C6, 0x3549, 0xF9C7, 0xF9D1, 0x353E,
+    0xF9D2, 0xF9D5, 0x354A, 0xF9D6, 0xF9FE, 0x36E8, 0xFA40, 0xFA5E, 0x400B,
+    0xFA5F, 0xFA5F, 0x083A, 0xFA60, 0xFA65, 0x402B, 0xFA66, 0xFA66, 0x09FD,
+    0xFA67, 0xFA7E, 0x4032, 0xFAA1, 0xFAA8, 0x404A, 0xFAA9, 0xFAAA, 0x4946,
+    0xFAAB, 0xFABC, 0x4054, 0xFABD, 0xFABD, 0x030D, 0xFABE, 0xFAC4, 0x4067,
+    0xFAC5, 0xFAC5, 0x016B, 0xFAC6, 0xFAD4, 0x406F, 0xFAD5, 0xFAD5, 0x0860,
+    0xFAD6, 0xFAFE, 0x407F, 0xFB40, 0xFB47, 0x40A8, 0xFB48, 0xFB48, 0x3E82,
+    0xFB49, 0xFB52, 0x40B1, 0xFB53, 0xFB53, 0x4948, 0xFB54, 0xFB6D, 0x40BC,
+    0xFB6E, 0xFB6E, 0x4949, 0xFB6F, 0xFB7E, 0x40D7, 0xFBA1, 0xFBA2, 0x40E7,
+    0xFBA3, 0xFBA3, 0x494A, 0xFBA4, 0xFBB7, 0x40EA, 0xFBB8, 0xFBB8, 0x0C23,
+    0xFBB9, 0xFBBE, 0x40FF, 0xFBBF, 0xFBBF, 0x494B, 0xFBC0, 0xFBCC, 0x4105,
+    0xFBCD, 0xFBCD, 0x494C, 0xFBCE, 0xFBF2, 0x4112, 0xFBF3, 0xFBF3, 0x17E4,
+    0xFBF4, 0xFBF8, 0x4138, 0xFBF9, 0xFBF9, 0x3E8E, 0xFBFA, 0xFBFE, 0x413E,
+    0xFC40, 0xFC49, 0x4143, 0xFC4A, 0xFC4A, 0x494D, 0xFC4B, 0xFC4E, 0x414D,
+    0xFC4F, 0xFC4F, 0x212F, 0xFC50, 0xFC51, 0x4151, 0xFC52, 0xFC52, 0x494E,
+    0xFC53, 0xFC62, 0x4153, 0xFC63, 0xFC63, 0x494F, 0xFC64, 0xFC6B, 0x4163,
+    0xFC6C, 0xFC6C, 0x4001, 0xFC6D, 0xFC6D, 0x4950, 0xFC6E, 0xFC74, 0x416D,
+    0xFC75, 0xFC75, 0x4951, 0xFC76, 0xFC7E, 0x4174, 0xFCA1, 0xFCB8, 0x417D,
+    0xFCB9, 0xFCB9, 0x115F, 0xFCBA, 0xFCBB, 0x4195, 0xFCBC, 0xFCBD, 0x4952,
+    0xFCBE, 0xFCCB, 0x4198, 0xFCCC, 0xFCCC, 0x4954, 0xFCCD, 0xFCE1, 0x41A7,
+    0xFCE2, 0xFCE2, 0x0C79, 0xFCE3, 0xFCE3, 0x4955, 0xFCE4, 0xFCED, 0x41BD,
+    0xFCEE, 0xFCEE, 0x4956, 0xFCEF, 0xFCF0, 0x41C7, 0xFCF1, 0xFCF1, 0x04C3,
+    0xFCF2, 0xFCFE, 0x41CA, 0xFD40, 0xFD48, 0x41D7, 0xFD49, 0xFD49, 0x4957,
+    0xFD4A, 0xFD69, 0x41E0, 0xFD6A, 0xFD6A, 0x4958, 0xFD6B, 0xFD7E, 0x4201,
+    0xFDA1, 0xFDB6, 0x4215, 0xFDB7, 0xFDB7, 0x18BD, 0xFDB8, 0xFDB8, 0x0CBD,
+    0xFDB9, 0xFDBA, 0x422D, 0xFDBB, 0xFDBB, 0x0CA5, 0xFDBC, 0xFDE2, 0x4230,
+    0xFDE3, 0xFDE3, 0x4959, 0xFDE4, 0xFDF0, 0x4258, 0xFDF1, 0xFDF1, 0x0CCE,
+    0xFDF2, 0xFDF2, 0x495A, 0xFDF3, 0xFDFE, 0x4266, 0xFE40, 0xFE51, 0x4272,
+    0xFE52, 0xFE52, 0x3D70, 0xFE53, 0xFE6C, 0x4285, 0xFE6D, 0xFE6D, 0x495B,
+    0xFE6E, 0xFE6E, 0x429F, 0xFE6F, 0xFE6F, 0x0E84, 0xFE70, 0xFE77, 0x42A1,
+    0xFE78, 0xFE78, 0x495C, 0xFE79, 0xFE7E, 0x42A9, 0xFEA1, 0xFEA9, 0x42AF,
+    0xFEAA, 0xFEAA, 0x0120, 0xFEAB, 0xFEDC, 0x42B8, 0xFEDD, 0xFEDD, 0x1BA8,
+    0xFEDE, 0xFEDF, 0x495D, 0xFEE0, 0xFEEC, 0x42EB, 0xFEED, 0xFEEE, 0x495F,
+    0xFEEF, 0xFEFE, 0x42F8,
+};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp
new file mode 100644
index 0000000..05c52e4
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp
@@ -0,0 +1,13 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+extern const unsigned short g_FXCMAP_HKscs_B5_V_5[13 * 3] = {
+    0xA14B, 0xA14B, 0x354E, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C, 0x35B1,
+    0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165, 0xA166, 0x008A,
+    0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092, 0xA171, 0xA172, 0x0096,
+    0xA175, 0xA176, 0x009A, 0xA179, 0xA17A, 0x009E, 0xA1E3, 0xA1E3, 0x354F,
+    0xC6E4, 0xC6E5, 0x3711,
+};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-H_3.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-H_3.cpp
new file mode 100644
index 0000000..d58b5a3
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-H_3.cpp
@@ -0,0 +1,5481 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+extern const unsigned short g_FXCMAP_UniCNS_UCS2_H_3[16418 * 3] = {
+    0x0020, 0x007E, 0x0001, 0x00A2, 0x00A3, 0x0106, 0x00A5, 0x00A5, 0x0104,
+    0x00A7, 0x00A7, 0x00B2, 0x00A8, 0x00A8, 0x35B3, 0x00AC, 0x00AC, 0x36E1,
+    0x00B0, 0x00B0, 0x0118, 0x00B1, 0x00B1, 0x00D4, 0x00B7, 0x00B7, 0x0073,
+    0x00C0, 0x00C0, 0x4964, 0x00C1, 0x00C1, 0x4962, 0x00C8, 0x00C8, 0x4968,
+    0x00C9, 0x00C9, 0x4966, 0x00CA, 0x00CA, 0x4971, 0x00D2, 0x00D2, 0x496C,
+    0x00D3, 0x00D3, 0x496A, 0x00D7, 0x00D7, 0x00D2, 0x00E0, 0x00E0, 0x4975,
+    0x00E1, 0x00E1, 0x4973, 0x00E8, 0x00E8, 0x497A, 0x00E9, 0x00E9, 0x4978,
+    0x00EA, 0x00EA, 0x4990, 0x00EC, 0x00EC, 0x497E, 0x00ED, 0x00ED, 0x497C,
+    0x00F2, 0x00F2, 0x4982, 0x00F3, 0x00F3, 0x4980, 0x00F7, 0x00F7, 0x00D3,
+    0x00F8, 0x00F8, 0x4998, 0x00F9, 0x00F9, 0x4986, 0x00FA, 0x00FA, 0x4984,
+    0x00FC, 0x00FC, 0x498B, 0x0100, 0x0100, 0x4961, 0x0101, 0x0101, 0x4972,
+    0x0112, 0x0112, 0x4965, 0x0113, 0x0113, 0x4977, 0x011A, 0x011A, 0x4967,
+    0x011B, 0x011B, 0x4979, 0x012B, 0x012B, 0x497B, 0x014B, 0x014B, 0x4999,
+    0x014C, 0x014C, 0x4969, 0x014D, 0x014D, 0x497F, 0x0153, 0x0153, 0x4997,
+    0x016B, 0x016B, 0x4983, 0x01CD, 0x01CD, 0x4963, 0x01CE, 0x01CE, 0x4974,
+    0x01D0, 0x01D0, 0x497D, 0x01D1, 0x01D1, 0x496B, 0x01D2, 0x01D2, 0x4981,
+    0x01D4, 0x01D4, 0x4985, 0x01D6, 0x01D6, 0x4987, 0x01D8, 0x01D8, 0x4988,
+    0x01DA, 0x01DA, 0x4989, 0x01DC, 0x01DC, 0x498A, 0x0250, 0x0250, 0x4993,
+    0x0251, 0x0251, 0x4976, 0x0254, 0x0254, 0x4995, 0x025B, 0x025B, 0x4994,
+    0x0261, 0x0261, 0x4991, 0x026A, 0x026A, 0x499B, 0x0275, 0x0275, 0x4996,
+    0x0283, 0x0283, 0x4992, 0x028A, 0x028A, 0x499A, 0x02C6, 0x02C6, 0x35B4,
+    0x02C7, 0x02C7, 0x01F8, 0x02CA, 0x02CA, 0x01F7, 0x02CB, 0x02CB, 0x01F9,
+    0x02D9, 0x02D9, 0x01F6, 0x0308, 0x0308, 0x35B3, 0x0391, 0x03A1, 0x01A1,
+    0x03A3, 0x03A9, 0x01B2, 0x03B1, 0x03C1, 0x01B9, 0x03C3, 0x03C9, 0x01CA,
+    0x0401, 0x0401, 0x3670, 0x0410, 0x0415, 0x366A, 0x0416, 0x0435, 0x3671,
+    0x0436, 0x044F, 0x3692, 0x0451, 0x0451, 0x3691, 0x1EBE, 0x1EBE, 0x496E,
+    0x1EBF, 0x1EBF, 0x498D, 0x1EC0, 0x1EC0, 0x4970, 0x1EC1, 0x1EC1, 0x498F,
+    0x2013, 0x2013, 0x0079, 0x2014, 0x2014, 0x007B, 0x2018, 0x2019, 0x00A6,
+    0x201C, 0x201D, 0x00A8, 0x2022, 0x2022, 0x0068, 0x2025, 0x2025, 0x006F,
+    0x2026, 0x2026, 0x006E, 0x2032, 0x2032, 0x00AD, 0x2035, 0x2035, 0x00AC,
+    0x203B, 0x203B, 0x00B1, 0x203E, 0x203E, 0x00C3, 0x20AC, 0x20AC, 0x44C1,
+    0x2103, 0x2103, 0x010A, 0x2105, 0x2105, 0x00C2, 0x2109, 0x2109, 0x010B,
+    0x2116, 0x2116, 0x36E6, 0x2121, 0x2121, 0x36E7, 0x2160, 0x2169, 0x0157,
+    0x2170, 0x2179, 0x020E, 0x2190, 0x2190, 0x00F8, 0x2191, 0x2191, 0x00F5,
+    0x2192, 0x2192, 0x00F7, 0x2193, 0x2193, 0x00F6, 0x2196, 0x2197, 0x00F9,
+    0x2198, 0x2198, 0x00FC, 0x2199, 0x2199, 0x00FB, 0x21B8, 0x21B9, 0x36AD,
+    0x21E7, 0x21E7, 0x36AC, 0x221A, 0x221A, 0x00D5, 0x221E, 0x221E, 0x00DC,
+    0x221F, 0x221F, 0x00E9, 0x2220, 0x2220, 0x00E8, 0x2223, 0x2223, 0x00FE,
+    0x2225, 0x2225, 0x00FD, 0x2229, 0x222A, 0x00E5, 0x222B, 0x222B, 0x00ED,
+    0x222E, 0x222E, 0x00EE, 0x2234, 0x2234, 0x00F0, 0x2235, 0x2235, 0x00EF,
+    0x223C, 0x223C, 0x00E4, 0x2252, 0x2252, 0x00DD, 0x2260, 0x2260, 0x00DB,
+    0x2261, 0x2261, 0x00DE, 0x2266, 0x2267, 0x00D9, 0x22A5, 0x22A5, 0x00E7,
+    0x22BF, 0x22BF, 0x00EA, 0x2400, 0x241F, 0x0232, 0x2421, 0x2421, 0x0252,
+    0x2460, 0x2469, 0x01FA, 0x2474, 0x247D, 0x0204, 0x2500, 0x2500, 0x0137,
+    0x2502, 0x2502, 0x0138, 0x250C, 0x250C, 0x013A, 0x2510, 0x2510, 0x013B,
+    0x2514, 0x2514, 0x013C, 0x2518, 0x2518, 0x013D, 0x251C, 0x251C, 0x0135,
+    0x2524, 0x2524, 0x0134, 0x252C, 0x252C, 0x0133, 0x2534, 0x2534, 0x0132,
+    0x253C, 0x253C, 0x0131, 0x2550, 0x2550, 0x0142, 0x2551, 0x2551, 0x370A,
+    0x2552, 0x2552, 0x36F8, 0x2553, 0x2553, 0x3701, 0x2554, 0x2554, 0x36EF,
+    0x2555, 0x2555, 0x36FA, 0x2556, 0x2556, 0x3703, 0x2557, 0x2557, 0x36F1,
+    0x2558, 0x2558, 0x36FE, 0x2559, 0x2559, 0x3707, 0x255A, 0x255A, 0x36F5,
+    0x255B, 0x255B, 0x3700, 0x255C, 0x255C, 0x3709, 0x255D, 0x255D, 0x36F7,
+    0x255E, 0x255E, 0x0143, 0x255F, 0x255F, 0x3704, 0x2560, 0x2560, 0x36F2,
+    0x2561, 0x2561, 0x0145, 0x2562, 0x2562, 0x3706, 0x2563, 0x2563, 0x36F4,
+    0x2564, 0x2564, 0x36F9, 0x2565, 0x2565, 0x3702, 0x2566, 0x2566, 0x36F0,
+    0x2567, 0x2567, 0x36FF, 0x2568, 0x2568, 0x3708, 0x2569, 0x2569, 0x36F6,
+    0x256A, 0x256A, 0x0144, 0x256B, 0x256B, 0x3705, 0x256C, 0x256C, 0x36F3,
+    0x256D, 0x256E, 0x013E, 0x256F, 0x256F, 0x0141, 0x2570, 0x2570, 0x0140,
+    0x2571, 0x2573, 0x014A, 0x2581, 0x2588, 0x0122, 0x2589, 0x2589, 0x0130,
+    0x258A, 0x258A, 0x012F, 0x258B, 0x258B, 0x012E, 0x258C, 0x258C, 0x012D,
+    0x258D, 0x258D, 0x012C, 0x258E, 0x258E, 0x012B, 0x258F, 0x258F, 0x012A,
+    0x2593, 0x2593, 0x3710, 0x2594, 0x2594, 0x0136, 0x2595, 0x2595, 0x0139,
+    0x25A0, 0x25A0, 0x00BE, 0x25A1, 0x25A1, 0x00BD, 0x25B2, 0x25B2, 0x00B7,
+    0x25B3, 0x25B3, 0x00B6, 0x25BC, 0x25BC, 0x00C0, 0x25BD, 0x25BD, 0x00BF,
+    0x25C6, 0x25C6, 0x00BC, 0x25C7, 0x25C7, 0x00BB, 0x25CB, 0x25CB, 0x00B4,
+    0x25CE, 0x25CE, 0x00B8, 0x25CF, 0x25CF, 0x00B5, 0x25E2, 0x25E3, 0x0146,
+    0x25E4, 0x25E4, 0x0149, 0x25E5, 0x25E5, 0x0148, 0x2605, 0x2605, 0x00BA,
+    0x2606, 0x2606, 0x00B9, 0x2609, 0x2609, 0x00F4, 0x2640, 0x2640, 0x00F1,
+    0x2641, 0x2641, 0x00F3, 0x2642, 0x2642, 0x00F2, 0x273D, 0x273D, 0x35C0,
+    0x2E80, 0x2E80, 0x44C8, 0x2E84, 0x2E84, 0x451C, 0x2E86, 0x2E88, 0x451D,
+    0x2E8A, 0x2E8A, 0x4520, 0x2E8C, 0x2E8D, 0x4521, 0x2E95, 0x2E95, 0x4523,
+    0x2E9C, 0x2E9C, 0x4524, 0x2E9D, 0x2E9D, 0x02DC, 0x2EA5, 0x2EA5, 0x4525,
+    0x2EA7, 0x2EA7, 0x4526, 0x2EAA, 0x2EAA, 0x4527, 0x2EAC, 0x2EAC, 0x4528,
+    0x2EAE, 0x2EAE, 0x4529, 0x2EB6, 0x2EB6, 0x452A, 0x2EBC, 0x2EBC, 0x452B,
+    0x2EBE, 0x2EBE, 0x452C, 0x2EC6, 0x2EC6, 0x0509, 0x2ECA, 0x2ECA, 0x452D,
+    0x2ECC, 0x2ECD, 0x452E, 0x2ECF, 0x2ECF, 0x4530, 0x2ED6, 0x2ED7, 0x4531,
+    0x2EDE, 0x2EDE, 0x4533, 0x2EE3, 0x2EE3, 0x09F6, 0x2F33, 0x2F33, 0x0227,
+    0x3000, 0x3000, 0x0063, 0x3001, 0x3002, 0x0065, 0x3003, 0x3003, 0x00B3,
+    0x3005, 0x3007, 0x35BA, 0x3008, 0x3009, 0x0094, 0x300A, 0x300B, 0x0090,
+    0x300C, 0x300D, 0x0098, 0x300E, 0x300F, 0x009C, 0x3010, 0x3011, 0x008C,
+    0x3012, 0x3012, 0x0105, 0x3014, 0x3015, 0x0088, 0x301D, 0x301E, 0x00AA,
+    0x3021, 0x3029, 0x0161, 0x3041, 0x3093, 0x35C1, 0x309B, 0x309C, 0x44C6,
+    0x309D, 0x309E, 0x35B7, 0x30A1, 0x30F6, 0x3614, 0x30FC, 0x30FC, 0x35BD,
+    0x30FD, 0x30FE, 0x35B5, 0x3105, 0x3129, 0x01D1, 0x3231, 0x3231, 0x36E5,
+    0x32A3, 0x32A3, 0x00C1, 0x338E, 0x338F, 0x0115, 0x339C, 0x339E, 0x0110,
+    0x33A1, 0x33A1, 0x0114, 0x33C4, 0x33C4, 0x0117, 0x33CE, 0x33CE, 0x0113,
+    0x33D1, 0x33D1, 0x00EC, 0x33D2, 0x33D2, 0x00EB, 0x33D5, 0x33D5, 0x010F,
+    0x3435, 0x3435, 0x39BD, 0x3440, 0x3440, 0x3C67, 0x344C, 0x344C, 0x4593,
+    0x3464, 0x3464, 0x3A85, 0x3473, 0x3473, 0x3DC5, 0x347A, 0x347A, 0x4033,
+    0x347D, 0x347D, 0x4597, 0x347E, 0x347E, 0x46A3, 0x3493, 0x3493, 0x439E,
+    0x3496, 0x3496, 0x37DC, 0x34A5, 0x34A5, 0x4598, 0x34AF, 0x34AF, 0x3C7F,
+    0x34BC, 0x34BC, 0x4380, 0x34C1, 0x34C1, 0x44FB, 0x34C8, 0x34C8, 0x3D00,
+    0x34DF, 0x34DF, 0x3EA4, 0x34E4, 0x34E4, 0x3E54, 0x34FB, 0x34FB, 0x3DCA,
+    0x3506, 0x3506, 0x4336, 0x353E, 0x353E, 0x44E7, 0x3551, 0x3551, 0x45A1,
+    0x3553, 0x3553, 0x43A5, 0x3561, 0x3561, 0x40D8, 0x356D, 0x356D, 0x45A4,
+    0x3570, 0x3570, 0x3B2F, 0x3572, 0x3572, 0x45A5, 0x3577, 0x3577, 0x3ECB,
+    0x3578, 0x3578, 0x4379, 0x3584, 0x3584, 0x39FB, 0x3597, 0x3597, 0x3B2D,
+    0x3598, 0x3598, 0x45B0, 0x35A1, 0x35A1, 0x40E2, 0x35A5, 0x35A5, 0x45B1,
+    0x35AD, 0x35AD, 0x3EFC, 0x35BF, 0x35BF, 0x45B2, 0x35C1, 0x35C1, 0x4580,
+    0x35C5, 0x35C5, 0x45B4, 0x35C7, 0x35C7, 0x459F, 0x35CA, 0x35CA, 0x3E43,
+    0x35CE, 0x35CE, 0x3E81, 0x35D2, 0x35D2, 0x3FC9, 0x35D6, 0x35D6, 0x3FB5,
+    0x35DB, 0x35DB, 0x470D, 0x35DD, 0x35DD, 0x43AC, 0x35F1, 0x35F1, 0x4696,
+    0x35F2, 0x35F2, 0x4627, 0x35F3, 0x35F3, 0x3F6C, 0x35FB, 0x35FB, 0x45C8,
+    0x35FE, 0x35FE, 0x3F6A, 0x3609, 0x3609, 0x45F5, 0x3618, 0x3618, 0x4871,
+    0x361A, 0x361A, 0x461A, 0x3623, 0x3623, 0x40C6, 0x362D, 0x362D, 0x3E86,
+    0x3635, 0x3635, 0x492E, 0x3639, 0x3639, 0x4165, 0x363E, 0x363E, 0x3A08,
+    0x3647, 0x3647, 0x4806, 0x3648, 0x3648, 0x3806, 0x3649, 0x3649, 0x4013,
+    0x364E, 0x364E, 0x4698, 0x365F, 0x365F, 0x3DF3, 0x367A, 0x367A, 0x3EE3,
+    0x3681, 0x3681, 0x45A6, 0x369A, 0x369A, 0x3C71, 0x36A5, 0x36A5, 0x4902,
+    0x36AA, 0x36AA, 0x3B30, 0x36AC, 0x36AC, 0x4900, 0x36B0, 0x36B0, 0x3CDF,
+    0x36B1, 0x36B1, 0x40CD, 0x36B5, 0x36B5, 0x3BC2, 0x36B9, 0x36B9, 0x4887,
+    0x36BC, 0x36BC, 0x3CFF, 0x36C1, 0x36C1, 0x37C5, 0x36C3, 0x36C3, 0x40E5,
+    0x36C4, 0x36C4, 0x3905, 0x36C5, 0x36C5, 0x4296, 0x36C7, 0x36C7, 0x3D3A,
+    0x36C8, 0x36C8, 0x4820, 0x36D3, 0x36D3, 0x3A38, 0x36D4, 0x36D4, 0x3BB3,
+    0x36D6, 0x36D6, 0x3D0C, 0x36DD, 0x36DD, 0x3A36, 0x36E1, 0x36E1, 0x397C,
+    0x36E2, 0x36E2, 0x3CDD, 0x36E5, 0x36E5, 0x4216, 0x36E6, 0x36E6, 0x40FC,
+    0x36F5, 0x36F5, 0x3A18, 0x3701, 0x3701, 0x3A34, 0x3703, 0x3703, 0x460F,
+    0x3708, 0x3708, 0x40FF, 0x370A, 0x370A, 0x3CD5, 0x370D, 0x370D, 0x4238,
+    0x371C, 0x371C, 0x3DFE, 0x3722, 0x3722, 0x3979, 0x3723, 0x3723, 0x3980,
+    0x3725, 0x3725, 0x3849, 0x372C, 0x372C, 0x3C8C, 0x372D, 0x372D, 0x3D37,
+    0x3730, 0x3730, 0x495C, 0x3732, 0x3732, 0x4106, 0x3733, 0x3733, 0x3997,
+    0x373A, 0x373A, 0x3E56, 0x3740, 0x3740, 0x4202, 0x3743, 0x3743, 0x4036,
+    0x3762, 0x3762, 0x3DB6, 0x376F, 0x376F, 0x47CB, 0x3797, 0x3797, 0x45ED,
+    0x37A0, 0x37A0, 0x3A28, 0x37B9, 0x37B9, 0x43B7, 0x37BE, 0x37BE, 0x393E,
+    0x37F2, 0x37F2, 0x3BA1, 0x37F8, 0x37F8, 0x42D2, 0x37FB, 0x37FB, 0x3EF5,
+    0x380F, 0x380F, 0x462C, 0x3819, 0x3819, 0x39AF, 0x3820, 0x3820, 0x462F,
+    0x382D, 0x382D, 0x412E, 0x3836, 0x3836, 0x4133, 0x3838, 0x3838, 0x43BB,
+    0x3863, 0x3863, 0x46C3, 0x38A0, 0x38A0, 0x4145, 0x38C3, 0x38C3, 0x3912,
+    0x38CC, 0x38CC, 0x4076, 0x38D1, 0x38D1, 0x3A95, 0x38FA, 0x38FA, 0x44EB,
+    0x3908, 0x3908, 0x4632, 0x3914, 0x3914, 0x43BE, 0x3927, 0x3927, 0x3C31,
+    0x3932, 0x3932, 0x4182, 0x393F, 0x393F, 0x4633, 0x394D, 0x394D, 0x4634,
+    0x3963, 0x3963, 0x4163, 0x3980, 0x3980, 0x3874, 0x3989, 0x3989, 0x4638,
+    0x398A, 0x398A, 0x3CE8, 0x3992, 0x3992, 0x4376, 0x3999, 0x3999, 0x39BA,
+    0x399B, 0x399B, 0x3DB3, 0x39A1, 0x39A1, 0x3E19, 0x39A4, 0x39A4, 0x3E0F,
+    0x39B8, 0x39B8, 0x463B, 0x39DC, 0x39DC, 0x3ECE, 0x39E2, 0x39E2, 0x46C8,
+    0x39E5, 0x39E5, 0x393B, 0x39EC, 0x39EC, 0x4310, 0x39F8, 0x39F8, 0x463E,
+    0x39FB, 0x39FB, 0x4345, 0x39FE, 0x39FE, 0x4368, 0x3A01, 0x3A01, 0x41E0,
+    0x3A03, 0x3A03, 0x4640, 0x3A06, 0x3A06, 0x4377, 0x3A17, 0x3A17, 0x4190,
+    0x3A18, 0x3A18, 0x438F, 0x3A29, 0x3A29, 0x3A5E, 0x3A2A, 0x3A2A, 0x3EDF,
+    0x3A34, 0x3A34, 0x4319, 0x3A4B, 0x3A4B, 0x4644, 0x3A52, 0x3A52, 0x3ED3,
+    0x3A57, 0x3A57, 0x419E, 0x3A5C, 0x3A5C, 0x3FC4, 0x3A5E, 0x3A5E, 0x3B07,
+    0x3A66, 0x3A66, 0x419C, 0x3A67, 0x3A67, 0x4333, 0x3A97, 0x3A97, 0x4647,
+    0x3AAB, 0x3AAB, 0x4091, 0x3ABD, 0x3ABD, 0x4649, 0x3ADE, 0x3ADE, 0x414C,
+    0x3AE0, 0x3AE0, 0x3A7A, 0x3AF0, 0x3AF0, 0x46B2, 0x3AF2, 0x3AF2, 0x464C,
+    0x3AFB, 0x3AFB, 0x3AF2, 0x3B0E, 0x3B0E, 0x38E8, 0x3B19, 0x3B19, 0x46C5,
+    0x3B22, 0x3B22, 0x464E, 0x3B2B, 0x3B2B, 0x4956, 0x3B39, 0x3B39, 0x474B,
+    0x3B42, 0x3B42, 0x4650, 0x3B58, 0x3B58, 0x4652, 0x3B60, 0x3B60, 0x393A,
+    0x3B71, 0x3B71, 0x4656, 0x3B72, 0x3B72, 0x4655, 0x3B7B, 0x3B7B, 0x4657,
+    0x3B7C, 0x3B7C, 0x385A, 0x3B80, 0x3B80, 0x41E2, 0x3B96, 0x3B96, 0x3A9C,
+    0x3B99, 0x3B99, 0x3A98, 0x3BA1, 0x3BA1, 0x41E9, 0x3BBC, 0x3BBC, 0x43C8,
+    0x3BBE, 0x3BBE, 0x3DB1, 0x3BC2, 0x3BC2, 0x4134, 0x3BC4, 0x3BC4, 0x3AA0,
+    0x3BD7, 0x3BD7, 0x3AAC, 0x3BDD, 0x3BDD, 0x465F, 0x3BEC, 0x3BEC, 0x4664,
+    0x3BF2, 0x3BF2, 0x4666, 0x3BF3, 0x3BF3, 0x41F3, 0x3BF4, 0x3BF4, 0x3A6E,
+    0x3C0D, 0x3C0D, 0x41F7, 0x3C11, 0x3C11, 0x3E40, 0x3C15, 0x3C15, 0x3998,
+    0x3C54, 0x3C54, 0x3E00, 0x3CCB, 0x3CCB, 0x4670, 0x3CCD, 0x3CCD, 0x3CE5,
+    0x3CD1, 0x3CD1, 0x4003, 0x3CD6, 0x3CD6, 0x3CF7, 0x3CDC, 0x3CDC, 0x404E,
+    0x3CEB, 0x3CEB, 0x4217, 0x3CEF, 0x3CEF, 0x4675, 0x3D13, 0x3D13, 0x3773,
+    0x3D1D, 0x3D1D, 0x393C, 0x3D32, 0x3D32, 0x4957, 0x3D3B, 0x3D3B, 0x4245,
+    0x3D46, 0x3D46, 0x4685, 0x3D4C, 0x3D4C, 0x3CEB, 0x3D4E, 0x3D4E, 0x4242,
+    0x3D51, 0x3D51, 0x38EA, 0x3D5F, 0x3D5F, 0x4159, 0x3D62, 0x3D62, 0x3C5E,
+    0x3D69, 0x3D69, 0x3CEA, 0x3D6A, 0x3D6A, 0x4689, 0x3D6F, 0x3D6F, 0x3CFC,
+    0x3D75, 0x3D75, 0x468A, 0x3D7D, 0x3D7D, 0x3C2F, 0x3D85, 0x3D85, 0x494B,
+    0x3D8A, 0x3D8A, 0x468D, 0x3D8F, 0x3D8F, 0x3ABD, 0x3D91, 0x3D91, 0x468F,
+    0x3DA5, 0x3DA5, 0x3D56, 0x3DAD, 0x3DAD, 0x4699, 0x3DB4, 0x3DB4, 0x40A6,
+    0x3DBF, 0x3DBF, 0x37D0, 0x3DC6, 0x3DC6, 0x48DE, 0x3DC7, 0x3DC7, 0x4164,
+    0x3DCC, 0x3DCC, 0x3D6F, 0x3DCD, 0x3DCD, 0x3AF3, 0x3DD3, 0x3DD3, 0x37E1,
+    0x3DDB, 0x3DDB, 0x3FFF, 0x3DE7, 0x3DE7, 0x3999, 0x3DE8, 0x3DE8, 0x425D,
+    0x3DEB, 0x3DEB, 0x3E5A, 0x3DF3, 0x3DF3, 0x46D4, 0x3DF7, 0x3DF7, 0x48AB,
+    0x3DFC, 0x3DFC, 0x462B, 0x3DFD, 0x3DFD, 0x3C14, 0x3E06, 0x3E06, 0x491D,
+    0x3E40, 0x3E40, 0x4169, 0x3E43, 0x3E43, 0x436D, 0x3E48, 0x3E48, 0x4595,
+    0x3E55, 0x3E55, 0x427F, 0x3E74, 0x3E74, 0x3EE2, 0x3EA8, 0x3EA8, 0x4304,
+    0x3EA9, 0x3EA9, 0x46ED, 0x3EAA, 0x3EAA, 0x4075, 0x3EAD, 0x3EAD, 0x3B9D,
+    0x3EB1, 0x3EB1, 0x3AD8, 0x3EB8, 0x3EB8, 0x3A4B, 0x3EBF, 0x3EBF, 0x3B0B,
+    0x3EC2, 0x3EC2, 0x3BD8, 0x3EC7, 0x3EC7, 0x3975, 0x3ECA, 0x3ECA, 0x46F1,
+    0x3ECC, 0x3ECC, 0x3BE2, 0x3ED0, 0x3ED0, 0x3854, 0x3ED1, 0x3ED1, 0x46F2,
+    0x3ED6, 0x3ED6, 0x3CAD, 0x3ED7, 0x3ED7, 0x429F, 0x3EDA, 0x3EDA, 0x3D02,
+    0x3EDE, 0x3EDE, 0x39F2, 0x3EE1, 0x3EE1, 0x3CA8, 0x3EE2, 0x3EE2, 0x46F6,
+    0x3EE7, 0x3EE7, 0x3BDC, 0x3EE9, 0x3EE9, 0x3CA4, 0x3EEB, 0x3EEB, 0x396A,
+    0x3EF0, 0x3EF0, 0x46F7, 0x3EF3, 0x3EF3, 0x3ADD, 0x3EF4, 0x3EF4, 0x46F8,
+    0x3EFA, 0x3EFA, 0x46F9, 0x3EFC, 0x3EFC, 0x3BE8, 0x3EFF, 0x3EFF, 0x3AF5,
+    0x3F00, 0x3F00, 0x3C0D, 0x3F04, 0x3F04, 0x42C3, 0x3F06, 0x3F06, 0x3AD7,
+    0x3F0E, 0x3F0E, 0x46FB, 0x3F53, 0x3F53, 0x46FC, 0x3F58, 0x3F58, 0x3AE9,
+    0x3F59, 0x3F59, 0x4089, 0x3F63, 0x3F63, 0x3AE6, 0x3F7C, 0x3F7C, 0x4700,
+    0x3F93, 0x3F93, 0x45CD, 0x3FC0, 0x3FC0, 0x43CF, 0x3FD7, 0x3FD7, 0x43D1,
+    0x3FDC, 0x3FDC, 0x4704, 0x3FE5, 0x3FE5, 0x46DF, 0x3FED, 0x3FED, 0x4335,
+    0x3FF9, 0x3FF9, 0x45D7, 0x3FFA, 0x3FFA, 0x4354, 0x4004, 0x4004, 0x410E,
+    0x401D, 0x401D, 0x4709, 0x4039, 0x4039, 0x470B, 0x4045, 0x4045, 0x470C,
+    0x4053, 0x4053, 0x45B6, 0x4057, 0x4057, 0x399D, 0x4062, 0x4062, 0x3BCB,
+    0x4065, 0x4065, 0x3FD3, 0x406A, 0x406A, 0x470F, 0x406F, 0x406F, 0x4710,
+    0x40A8, 0x40A8, 0x43D5, 0x40BB, 0x40BB, 0x45C0, 0x40BF, 0x40BF, 0x3EEC,
+    0x40C8, 0x40C8, 0x3B0E, 0x40D8, 0x40D8, 0x41AB, 0x40DF, 0x40DF, 0x3E17,
+    0x40FA, 0x40FA, 0x3EBE, 0x4103, 0x4103, 0x43D7, 0x4104, 0x4104, 0x425C,
+    0x4109, 0x4109, 0x471C, 0x410E, 0x410E, 0x3B1B, 0x4132, 0x4132, 0x3B25,
+    0x4167, 0x4167, 0x471F, 0x416C, 0x416C, 0x38AE, 0x416E, 0x416E, 0x3B23,
+    0x417F, 0x417F, 0x3B82, 0x4190, 0x4190, 0x46C0, 0x41B2, 0x41B2, 0x4720,
+    0x41C4, 0x41C4, 0x4723, 0x41CA, 0x41CA, 0x373F, 0x41CF, 0x41CF, 0x4726,
+    0x41DB, 0x41DB, 0x37BF, 0x41EF, 0x41EF, 0x3743, 0x41F9, 0x41F9, 0x3B3E,
+    0x4211, 0x4211, 0x3B41, 0x4240, 0x4240, 0x37F1, 0x4260, 0x4260, 0x472B,
+    0x426A, 0x426A, 0x3B55, 0x427A, 0x427A, 0x472C, 0x428C, 0x428C, 0x472F,
+    0x4294, 0x4294, 0x4731, 0x42B5, 0x42B5, 0x4010, 0x42B9, 0x42B9, 0x38A6,
+    0x42BC, 0x42BC, 0x3C8A, 0x42F4, 0x42F4, 0x3BB9, 0x42FB, 0x42FB, 0x3CEE,
+    0x42FC, 0x42FC, 0x41E6, 0x432B, 0x432B, 0x377D, 0x436E, 0x436E, 0x46CA,
+    0x4397, 0x4397, 0x473B, 0x43BA, 0x43BA, 0x435F, 0x43C1, 0x43C1, 0x4695,
+    0x43D9, 0x43D9, 0x433E, 0x43DF, 0x43DF, 0x3E49, 0x43ED, 0x43ED, 0x4745,
+    0x43F2, 0x43F2, 0x3E48, 0x4401, 0x4401, 0x474A, 0x4402, 0x4402, 0x3B73,
+    0x4413, 0x4413, 0x474F, 0x4425, 0x4425, 0x4751, 0x442D, 0x442D, 0x4752,
+    0x447A, 0x447A, 0x37AF, 0x448F, 0x448F, 0x4758, 0x449F, 0x449F, 0x3AE2,
+    0x44A0, 0x44A0, 0x37ED, 0x44A2, 0x44A2, 0x4079, 0x44B0, 0x44B0, 0x475C,
+    0x44B7, 0x44B7, 0x3FA1, 0x44C0, 0x44C0, 0x3C07, 0x44C5, 0x44C5, 0x4210,
+    0x44CE, 0x44CE, 0x3D23, 0x44DD, 0x44DD, 0x39DD, 0x44DF, 0x44DF, 0x3D22,
+    0x44E4, 0x44E4, 0x37E2, 0x44E9, 0x44E9, 0x41CF, 0x44EA, 0x44EA, 0x3B71,
+    0x44EB, 0x44EB, 0x3CF2, 0x44EC, 0x44EC, 0x3EB4, 0x44F4, 0x44F4, 0x3992,
+    0x4503, 0x4503, 0x469F, 0x4504, 0x4504, 0x4763, 0x4509, 0x4509, 0x3E50,
+    0x450B, 0x450B, 0x37D4, 0x4516, 0x4516, 0x37F9, 0x451D, 0x451D, 0x3767,
+    0x4527, 0x4527, 0x37F7, 0x452E, 0x452E, 0x3CD3, 0x4533, 0x4533, 0x3C51,
+    0x453B, 0x453B, 0x476A, 0x453D, 0x453D, 0x38C4, 0x453F, 0x453F, 0x3E12,
+    0x4543, 0x4543, 0x37F3, 0x4551, 0x4551, 0x3AE4, 0x4552, 0x4552, 0x40B3,
+    0x4555, 0x4555, 0x423E, 0x455C, 0x455C, 0x378B, 0x4562, 0x4562, 0x4940,
+    0x456A, 0x456A, 0x3804, 0x4577, 0x4577, 0x476E, 0x4585, 0x4585, 0x38C5,
+    0x45E9, 0x45E9, 0x3EE4, 0x4606, 0x4606, 0x4773, 0x460F, 0x460F, 0x3815,
+    0x4615, 0x4615, 0x3843, 0x4617, 0x4617, 0x4774, 0x465B, 0x465B, 0x381D,
+    0x467A, 0x467A, 0x39E9, 0x4680, 0x4680, 0x3D01, 0x46CF, 0x46CF, 0x3BA0,
+    0x46D0, 0x46D0, 0x3DFA, 0x46F5, 0x46F5, 0x3B9F, 0x4713, 0x4713, 0x3833,
+    0x4718, 0x4718, 0x3DC7, 0x474E, 0x474E, 0x3EBC, 0x477C, 0x477C, 0x3DCD,
+    0x4798, 0x4798, 0x4781, 0x47A6, 0x47A6, 0x40A3, 0x47B6, 0x47B6, 0x3EEA,
+    0x47D5, 0x47D5, 0x431A, 0x47ED, 0x47ED, 0x4783, 0x47F4, 0x47F4, 0x432F,
+    0x4800, 0x4800, 0x461E, 0x480B, 0x480B, 0x4352, 0x4837, 0x4837, 0x4787,
+    0x485D, 0x485D, 0x410F, 0x4871, 0x4871, 0x3D03, 0x489B, 0x489B, 0x3BBD,
+    0x48AD, 0x48AD, 0x4791, 0x48AE, 0x48AE, 0x494D, 0x48D0, 0x48D0, 0x3DA7,
+    0x48DD, 0x48DD, 0x4120, 0x48ED, 0x48ED, 0x4288, 0x48F3, 0x48F3, 0x3EC1,
+    0x48FA, 0x48FA, 0x3E44, 0x4906, 0x4906, 0x3BC7, 0x4911, 0x4911, 0x4584,
+    0x491E, 0x491E, 0x4794, 0x4925, 0x4925, 0x3C0F, 0x492A, 0x492A, 0x46AE,
+    0x492D, 0x492D, 0x46CD, 0x4935, 0x4935, 0x3CC3, 0x493C, 0x493C, 0x3BF8,
+    0x493E, 0x493E, 0x3D06, 0x4945, 0x4945, 0x47A3, 0x4951, 0x4951, 0x47A4,
+    0x4953, 0x4953, 0x42AD, 0x4965, 0x4965, 0x3899, 0x496A, 0x496A, 0x47A9,
+    0x4972, 0x4972, 0x3A24, 0x4989, 0x4989, 0x379B, 0x49A1, 0x49A1, 0x38B7,
+    0x49A7, 0x49A7, 0x47AE, 0x49DF, 0x49DF, 0x38AA, 0x49E5, 0x49E5, 0x47B1,
+    0x49E7, 0x49E7, 0x4621, 0x4A0F, 0x4A0F, 0x38C3, 0x4A1D, 0x4A1D, 0x3BEC,
+    0x4A24, 0x4A24, 0x47B2, 0x4A35, 0x4A35, 0x47B4, 0x4A96, 0x4A96, 0x3CE7,
+    0x4AB4, 0x4AB4, 0x4361, 0x4AB8, 0x4AB8, 0x3DA8, 0x4AD1, 0x4AD1, 0x38E3,
+    0x4AE4, 0x4AE4, 0x47B7, 0x4AFF, 0x4AFF, 0x38F2, 0x4B19, 0x4B19, 0x47B9,
+    0x4B2C, 0x4B2C, 0x461F, 0x4B37, 0x4B37, 0x41A9, 0x4B6F, 0x4B6F, 0x3C16,
+    0x4B70, 0x4B70, 0x47C0, 0x4B72, 0x4B72, 0x38FC, 0x4B7B, 0x4B7B, 0x3C8D,
+    0x4B7E, 0x4B7E, 0x400A, 0x4B8E, 0x4B8E, 0x39F7, 0x4B90, 0x4B90, 0x3C20,
+    0x4B93, 0x4B93, 0x3A8C, 0x4B96, 0x4B96, 0x3942, 0x4B97, 0x4B97, 0x3C24,
+    0x4B9D, 0x4B9D, 0x47C2, 0x4BBD, 0x4BBD, 0x3C23, 0x4BBE, 0x4BBE, 0x3954,
+    0x4BC0, 0x4BC0, 0x3DDC, 0x4C04, 0x4C04, 0x3FBB, 0x4C07, 0x4C07, 0x3FB7,
+    0x4C0E, 0x4C0E, 0x390C, 0x4C3B, 0x4C3B, 0x3F3C, 0x4C3E, 0x4C3E, 0x457B,
+    0x4C5B, 0x4C5B, 0x3ED9, 0x4C6D, 0x4C6D, 0x47C9, 0x4C7D, 0x4C7D, 0x3E66,
+    0x4CA4, 0x4CA4, 0x48BE, 0x4CAE, 0x4CAE, 0x3C42, 0x4CB0, 0x4CB0, 0x3C45,
+    0x4CB7, 0x4CB7, 0x3E21, 0x4CCD, 0x4CCD, 0x4578, 0x4CE1, 0x4CE1, 0x3EF3,
+    0x4CED, 0x4CED, 0x40AB, 0x4D09, 0x4D09, 0x3ED6, 0x4D10, 0x4D10, 0x4117,
+    0x4D34, 0x4D34, 0x3935, 0x4D91, 0x4D91, 0x43F5, 0x4D9C, 0x4D9C, 0x48C4,
+    0x4E00, 0x4E00, 0x0253, 0x4E01, 0x4E01, 0x0255, 0x4E03, 0x4E03, 0x0256,
+    0x4E04, 0x4E04, 0x48FE, 0x4E07, 0x4E07, 0x1771, 0x4E08, 0x4E08, 0x0269,
+    0x4E09, 0x4E09, 0x0267, 0x4E0A, 0x4E0A, 0x026A, 0x4E0B, 0x4E0B, 0x0268,
+    0x4E0C, 0x4E0C, 0x1772, 0x4E0D, 0x4E0D, 0x0294, 0x4E0E, 0x4E0E, 0x177A,
+    0x4E0F, 0x4E0F, 0x1778, 0x4E10, 0x4E10, 0x0293, 0x4E11, 0x4E11, 0x0292,
+    0x4E14, 0x4E14, 0x02F2, 0x4E15, 0x4E15, 0x02F1, 0x4E16, 0x4E16, 0x02F0,
+    0x4E18, 0x4E18, 0x02F3, 0x4E19, 0x4E19, 0x02EF, 0x4E1A, 0x4E1A, 0x48FD,
+    0x4E1C, 0x4E1C, 0x48E0, 0x4E1E, 0x4E1F, 0x036E, 0x4E21, 0x4E21, 0x3D6D,
+    0x4E24, 0x4E24, 0x458D, 0x4E26, 0x4E26, 0x0528, 0x4E28, 0x4E28, 0x0218,
+    0x4E2A, 0x4E2A, 0x3F57, 0x4E2B, 0x4E2B, 0x026B, 0x4E2C, 0x4E2C, 0x44F3,
+    0x4E2D, 0x4E2D, 0x0295, 0x4E2E, 0x4E2E, 0x177B, 0x4E30, 0x4E30, 0x0296,
+    0x4E31, 0x4E31, 0x178E, 0x4E32, 0x4E32, 0x0415, 0x4E33, 0x4E33, 0x18F4,
+    0x4E36, 0x4E36, 0x0219, 0x4E37, 0x4E37, 0x4517, 0x4E38, 0x4E38, 0x026C,
+    0x4E39, 0x4E39, 0x0297, 0x4E3B, 0x4E3B, 0x02F4, 0x4E3C, 0x4E3C, 0x178F,
+    0x4E3D, 0x4E3D, 0x4537, 0x4E3F, 0x4E3F, 0x021A, 0x4E41, 0x4E41, 0x36AF,
+    0x4E42, 0x4E42, 0x176C, 0x4E43, 0x4E43, 0x0257, 0x4E45, 0x4E45, 0x026E,
+    0x4E47, 0x4E47, 0x1773, 0x4E48, 0x4E48, 0x026F, 0x4E49, 0x4E49, 0x408E,
+    0x4E4B, 0x4E4B, 0x0298, 0x4E4D, 0x4E4D, 0x02F5, 0x4E4E, 0x4E4E, 0x02F7,
+    0x4E4F, 0x4E4F, 0x02F6, 0x4E52, 0x4E53, 0x0370, 0x4E56, 0x4E56, 0x0529,
+    0x4E58, 0x4E58, 0x0831, 0x4E59, 0x4E59, 0x0254, 0x4E5A, 0x4E5A, 0x36B1,
+    0x4E5B, 0x4E5B, 0x44E5, 0x4E5C, 0x4E5C, 0x176D, 0x4E5D, 0x4E5D, 0x0258,
+    0x4E5E, 0x4E5E, 0x0271, 0x4E5F, 0x4E5F, 0x0270, 0x4E69, 0x4E69, 0x0372,
+    0x4E6A, 0x4E6A, 0x3DE5, 0x4E73, 0x4E73, 0x052A, 0x4E78, 0x4E78, 0x3D8E,
+    0x4E7E, 0x4E7E, 0x09FB, 0x4E7F, 0x4E7F, 0x1E35, 0x4E80, 0x4E80, 0x458E,
+    0x4E81, 0x4E81, 0x43BC, 0x4E82, 0x4E82, 0x0DBE, 0x4E83, 0x4E84, 0x2361,
+    0x4E85, 0x4E85, 0x021B, 0x4E86, 0x4E86, 0x0259, 0x4E87, 0x4E87, 0x458F,
+    0x4E88, 0x4E88, 0x029A, 0x4E89, 0x4E89, 0x459C, 0x4E8B, 0x4E8B, 0x052B,
+    0x4E8C, 0x4E8C, 0x025A, 0x4E8D, 0x4E8D, 0x1774, 0x4E8E, 0x4E8E, 0x0272,
+    0x4E91, 0x4E91, 0x029B, 0x4E92, 0x4E92, 0x029D, 0x4E93, 0x4E93, 0x177C,
+    0x4E94, 0x4E94, 0x029E, 0x4E95, 0x4E95, 0x029C, 0x4E98, 0x4E98, 0x39C4,
+    0x4E99, 0x4E99, 0x0373, 0x4E9A, 0x4E9A, 0x48D5, 0x4E9B, 0x4E9B, 0x052C,
+    0x4E9E, 0x4E9E, 0x052D, 0x4E9F, 0x4E9F, 0x06A3, 0x4EA0, 0x4EA0, 0x021C,
+    0x4EA1, 0x4EA1, 0x0273, 0x4EA2, 0x4EA2, 0x029F, 0x4EA4, 0x4EA4, 0x0374,
+    0x4EA5, 0x4EA5, 0x0376, 0x4EA6, 0x4EA6, 0x0375, 0x4EA8, 0x4EA8, 0x0416,
+    0x4EAB, 0x4EAC, 0x052E, 0x4EAD, 0x4EAE, 0x06A4, 0x4EB3, 0x4EB3, 0x0832,
+    0x4EB6, 0x4EB6, 0x2363, 0x4EB7, 0x4EB7, 0x413C, 0x4EB9, 0x4EB9, 0x3377,
+    0x4EBA, 0x4EBA, 0x025B, 0x4EBB, 0x4EBB, 0x44E6, 0x4EBC, 0x4EBC, 0x39B1,
+    0x4EBF, 0x4EBF, 0x4590, 0x4EC0, 0x4EC0, 0x02A1, 0x4EC1, 0x4EC1, 0x02A0,
+    0x4EC2, 0x4EC2, 0x177D, 0x4EC3, 0x4EC3, 0x02A2, 0x4EC4, 0x4EC4, 0x02A8,
+    0x4EC6, 0x4EC7, 0x02A3, 0x4EC8, 0x4EC8, 0x177F, 0x4EC9, 0x4EC9, 0x177E,
+    0x4ECA, 0x4ECB, 0x02A6, 0x4ECD, 0x4ECD, 0x02A5, 0x4ECE, 0x4ECE, 0x3F62,
+    0x4ED4, 0x4ED7, 0x02FA, 0x4ED8, 0x4ED8, 0x02F9, 0x4ED9, 0x4ED9, 0x0300,
+    0x4EDA, 0x4EDA, 0x1795, 0x4EDC, 0x4EDC, 0x1791, 0x4EDD, 0x4EDD, 0x1794,
+    0x4EDE, 0x4EDE, 0x0301, 0x4EDF, 0x4EDF, 0x0311, 0x4EE1, 0x4EE1, 0x1793,
+    0x4EE3, 0x4EE4, 0x02FE, 0x4EE5, 0x4EE5, 0x02F8, 0x4EE8, 0x4EE8, 0x1790,
+    0x4EE9, 0x4EE9, 0x1792, 0x4EEA, 0x4EEA, 0x48CB, 0x4EEB, 0x4EEB, 0x4591,
+    0x4EEE, 0x4EEE, 0x3D76, 0x4EF0, 0x4EF0, 0x0383, 0x4EF1, 0x4EF1, 0x17BA,
+    0x4EF2, 0x4EF2, 0x0380, 0x4EF3, 0x4EF3, 0x0384, 0x4EF4, 0x4EF4, 0x17C4,
+    0x4EF5, 0x4EF5, 0x17B8, 0x4EF6, 0x4EF6, 0x0381, 0x4EF7, 0x4EF7, 0x17BC,
+    0x4EF8, 0x4EF8, 0x39AD, 0x4EFB, 0x4EFB, 0x0382, 0x4EFD, 0x4EFD, 0x0385,
+    0x4EFF, 0x4EFF, 0x0377, 0x4F00, 0x4F00, 0x17BB, 0x4F01, 0x4F01, 0x0386,
+    0x4F02, 0x4F02, 0x17BF, 0x4F03, 0x4F03, 0x39C8, 0x4F04, 0x4F04, 0x17C3,
+    0x4F05, 0x4F05, 0x17C0, 0x4F08, 0x4F08, 0x17BD, 0x4F09, 0x4F09, 0x0378,
+    0x4F0A, 0x4F0A, 0x037A, 0x4F0B, 0x4F0B, 0x0387, 0x4F0D, 0x4F0D, 0x037C,
+    0x4F0E, 0x4F0E, 0x17B5, 0x4F0F, 0x4F0F, 0x037F, 0x4F10, 0x4F11, 0x037D,
+    0x4F12, 0x4F12, 0x17C5, 0x4F13, 0x4F13, 0x17C2, 0x4F14, 0x4F14, 0x17B9,
+    0x4F15, 0x4F15, 0x037B, 0x4F18, 0x4F18, 0x17B6, 0x4F19, 0x4F19, 0x0379,
+    0x4F1A, 0x4F1A, 0x453C, 0x4F1D, 0x4F1D, 0x17BE, 0x4F22, 0x4F22, 0x17C1,
+    0x4F28, 0x4F28, 0x453D, 0x4F29, 0x4F29, 0x39BE, 0x4F2C, 0x4F2C, 0x17B7,
+    0x4F2D, 0x4F2D, 0x182F, 0x4F2F, 0x4F2F, 0x042C, 0x4F30, 0x4F30, 0x041F,
+    0x4F32, 0x4F32, 0x393D, 0x4F33, 0x4F33, 0x1830, 0x4F34, 0x4F34, 0x041C,
+    0x4F36, 0x4F36, 0x042E, 0x4F37, 0x4F37, 0x4592, 0x4F38, 0x4F38, 0x0424,
+    0x4F39, 0x4F39, 0x3F65, 0x4F3A, 0x4F3A, 0x0423, 0x4F3B, 0x4F3B, 0x1824,
+    0x4F3C, 0x4F3C, 0x0427, 0x4F3D, 0x4F3D, 0x0422, 0x4F3E, 0x4F3E, 0x1829,
+    0x4F3F, 0x4F3F, 0x1831, 0x4F41, 0x4F41, 0x182D, 0x4F42, 0x4F42, 0x39CB,
+    0x4F43, 0x4F43, 0x0425, 0x4F45, 0x4F45, 0x3B8F, 0x4F46, 0x4F46, 0x0428,
+    0x4F47, 0x4F47, 0x0419, 0x4F48, 0x4F48, 0x0431, 0x4F49, 0x4F49, 0x1826,
+    0x4F4B, 0x4F4B, 0x39B4, 0x4F4C, 0x4F4C, 0x1900, 0x4F4D, 0x4F4D, 0x0417,
+    0x4F4E, 0x4F4E, 0x042D, 0x4F4F, 0x4F4F, 0x0418, 0x4F50, 0x4F51, 0x0420,
+    0x4F52, 0x4F52, 0x182B, 0x4F53, 0x4F53, 0x1827, 0x4F54, 0x4F54, 0x0426,
+    0x4F55, 0x4F55, 0x041E, 0x4F56, 0x4F56, 0x1823, 0x4F57, 0x4F57, 0x041A,
+    0x4F58, 0x4F58, 0x182E, 0x4F59, 0x4F59, 0x042F, 0x4F5A, 0x4F5A, 0x0432,
+    0x4F5B, 0x4F5B, 0x041D, 0x4F5C, 0x4F5C, 0x042A, 0x4F5D, 0x4F5D, 0x0430,
+    0x4F5E, 0x4F5E, 0x041B, 0x4F5F, 0x4F5F, 0x182C, 0x4F60, 0x4F60, 0x042B,
+    0x4F61, 0x4F61, 0x1832, 0x4F62, 0x4F62, 0x1825, 0x4F63, 0x4F63, 0x0429,
+    0x4F64, 0x4F64, 0x1828, 0x4F67, 0x4F67, 0x182A, 0x4F69, 0x4F69, 0x053D,
+    0x4F6A, 0x4F6A, 0x1902, 0x4F6B, 0x4F6B, 0x190E, 0x4F6C, 0x4F6C, 0x0535,
+    0x4F6E, 0x4F6E, 0x190F, 0x4F6F, 0x4F6F, 0x0530, 0x4F70, 0x4F70, 0x053A,
+    0x4F72, 0x4F72, 0x3C72, 0x4F73, 0x4F73, 0x0533, 0x4F74, 0x4F74, 0x18FC,
+    0x4F75, 0x4F75, 0x053B, 0x4F76, 0x4F76, 0x18FB, 0x4F77, 0x4F77, 0x18FF,
+    0x4F78, 0x4F78, 0x1906, 0x4F79, 0x4F79, 0x1904, 0x4F7A, 0x4F7A, 0x0543,
+    0x4F7B, 0x4F7B, 0x053E, 0x4F7C, 0x4F7C, 0x18F6, 0x4F7D, 0x4F7D, 0x18F8,
+    0x4F7E, 0x4F7E, 0x0540, 0x4F7F, 0x4F7F, 0x0534, 0x4F80, 0x4F80, 0x18F9,
+    0x4F81, 0x4F81, 0x1905, 0x4F82, 0x4F82, 0x190C, 0x4F83, 0x4F83, 0x0539,
+    0x4F84, 0x4F84, 0x18FE, 0x4F85, 0x4F85, 0x18F7, 0x4F86, 0x4F86, 0x0538,
+    0x4F87, 0x4F87, 0x18FA, 0x4F88, 0x4F88, 0x053C, 0x4F89, 0x4F89, 0x18FD,
+    0x4F8A, 0x4F8A, 0x39B5, 0x4F8B, 0x4F8B, 0x0537, 0x4F8D, 0x4F8D, 0x0532,
+    0x4F8F, 0x4F8F, 0x0541, 0x4F90, 0x4F90, 0x1907, 0x4F91, 0x4F91, 0x0542,
+    0x4F92, 0x4F92, 0x190B, 0x4F94, 0x4F94, 0x1909, 0x4F95, 0x4F95, 0x190D,
+    0x4F96, 0x4F96, 0x053F, 0x4F97, 0x4F97, 0x1901, 0x4F98, 0x4F98, 0x18F5,
+    0x4F9A, 0x4F9A, 0x1903, 0x4F9B, 0x4F9B, 0x0536, 0x4F9C, 0x4F9C, 0x1908,
+    0x4F9D, 0x4F9D, 0x0531, 0x4F9E, 0x4F9E, 0x190A, 0x4FA2, 0x4FA2, 0x39C7,
+    0x4FA8, 0x4FA8, 0x453E, 0x4FAB, 0x4FAB, 0x4022, 0x4FAE, 0x4FAE, 0x06B4,
+    0x4FAF, 0x4FAF, 0x06A8, 0x4FB0, 0x4FB0, 0x3D4A, 0x4FB2, 0x4FB2, 0x1A5D,
+    0x4FB3, 0x4FB3, 0x1A65, 0x4FB5, 0x4FB5, 0x06A7, 0x4FB6, 0x4FB6, 0x06AF,
+    0x4FB7, 0x4FB7, 0x06BB, 0x4FB9, 0x4FB9, 0x1A6B, 0x4FBA, 0x4FBA, 0x1A69,
+    0x4FBB, 0x4FBB, 0x1A64, 0x4FBD, 0x4FBD, 0x4594, 0x4FBF, 0x4FBF, 0x06A9,
+    0x4FC0, 0x4FC0, 0x1A6A, 0x4FC1, 0x4FC1, 0x1A60, 0x4FC2, 0x4FC2, 0x06B7,
+    0x4FC3, 0x4FC3, 0x06AE, 0x4FC4, 0x4FC4, 0x06B6, 0x4FC5, 0x4FC5, 0x1A5B,
+    0x4FC7, 0x4FC7, 0x1A67, 0x4FC8, 0x4FC8, 0x46E8, 0x4FC9, 0x4FC9, 0x1A5E,
+    0x4FCA, 0x4FCA, 0x06B2, 0x4FCB, 0x4FCB, 0x1A5F, 0x4FCC, 0x4FCC, 0x39CF,
+    0x4FCD, 0x4FCD, 0x1A5A, 0x4FCE, 0x4FCE, 0x06B9, 0x4FCF, 0x4FCF, 0x06AC,
+    0x4FD0, 0x4FD0, 0x06B5, 0x4FD1, 0x4FD1, 0x06AB, 0x4FD3, 0x4FD3, 0x1A5C,
+    0x4FD4, 0x4FD4, 0x1A61, 0x4FD6, 0x4FD6, 0x1A68, 0x4FD7, 0x4FD7, 0x06B3,
+    0x4FD8, 0x4FD8, 0x06B0, 0x4FD9, 0x4FD9, 0x1A63, 0x4FDA, 0x4FDA, 0x06B8,
+    0x4FDB, 0x4FDB, 0x1A66, 0x4FDC, 0x4FDC, 0x1A62, 0x4FDD, 0x4FDD, 0x06AD,
+    0x4FDE, 0x4FDE, 0x06BA, 0x4FDF, 0x4FDF, 0x06B1, 0x4FE0, 0x4FE0, 0x06AA,
+    0x4FE1, 0x4FE1, 0x06A6, 0x4FE4, 0x4FE4, 0x3C66, 0x4FE5, 0x4FE5, 0x39D0,
+    0x4FEC, 0x4FEC, 0x1A6C, 0x4FEE, 0x4FEE, 0x084C, 0x4FEF, 0x4FEF, 0x0836,
+    0x4FF1, 0x4FF1, 0x0846, 0x4FF2, 0x4FF2, 0x3F28, 0x4FF3, 0x4FF3, 0x084B,
+    0x4FF4, 0x4FF4, 0x1C24, 0x4FF5, 0x4FF5, 0x1C23, 0x4FF6, 0x4FF7, 0x1C28,
+    0x4FF8, 0x4FF8, 0x0839, 0x4FF9, 0x4FF9, 0x37B3, 0x4FFA, 0x4FFA, 0x0842,
+    0x4FFD, 0x4FFD, 0x3F26, 0x4FFE, 0x4FFE, 0x084F, 0x5000, 0x5000, 0x0843,
+    0x5003, 0x5003, 0x4596, 0x5005, 0x5005, 0x1C1D, 0x5006, 0x5006, 0x083C,
+    0x5007, 0x5007, 0x1C1E, 0x5008, 0x5008, 0x4024, 0x5009, 0x5009, 0x0851,
+    0x500B, 0x500B, 0x0848, 0x500C, 0x500D, 0x0833, 0x500E, 0x500E, 0x1C31,
+    0x500F, 0x500F, 0x0A0C, 0x5011, 0x5011, 0x0841, 0x5012, 0x5012, 0x0840,
+    0x5013, 0x5013, 0x1C1F, 0x5014, 0x5014, 0x0844, 0x5015, 0x5015, 0x1E45,
+    0x5016, 0x5016, 0x083B, 0x5017, 0x5017, 0x1C2A, 0x5018, 0x5018, 0x084A,
+    0x5019, 0x5019, 0x0849, 0x501A, 0x501A, 0x083F, 0x501B, 0x501B, 0x1C22,
+    0x501C, 0x501C, 0x1C2B, 0x501E, 0x501E, 0x1C1C, 0x501F, 0x501F, 0x083E,
+    0x5020, 0x5020, 0x1C2C, 0x5021, 0x5021, 0x0847, 0x5022, 0x5022, 0x1C20,
+    0x5023, 0x5023, 0x0835, 0x5025, 0x5025, 0x0838, 0x5026, 0x5026, 0x0837,
+    0x5027, 0x5027, 0x1C2D, 0x5028, 0x5028, 0x0845, 0x5029, 0x5029, 0x083A,
+    0x502A, 0x502A, 0x084E, 0x502B, 0x502B, 0x0850, 0x502C, 0x502C, 0x1C27,
+    0x502D, 0x502D, 0x084D, 0x502E, 0x502E, 0x39CC, 0x502F, 0x502F, 0x1C2F,
+    0x5030, 0x5030, 0x1C21, 0x5031, 0x5031, 0x1C30, 0x5033, 0x5033, 0x1C25,
+    0x5034, 0x5034, 0x3910, 0x5035, 0x5035, 0x1C2E, 0x5037, 0x5037, 0x1C26,
+    0x503C, 0x503C, 0x083D, 0x5040, 0x5040, 0x1E4D, 0x5041, 0x5041, 0x1E41,
+    0x5043, 0x5043, 0x0A00, 0x5045, 0x5045, 0x1E46, 0x5046, 0x5046, 0x1E4C,
+    0x5047, 0x5047, 0x09FF, 0x5048, 0x5048, 0x1E3F, 0x5049, 0x5049, 0x0A03,
+    0x504A, 0x504A, 0x1E43, 0x504B, 0x504B, 0x1E3C, 0x504C, 0x504C, 0x0A01,
+    0x504D, 0x504D, 0x1E40, 0x504E, 0x504E, 0x0A06, 0x504F, 0x504F, 0x0A0B,
+    0x5051, 0x5051, 0x1E51, 0x5053, 0x5053, 0x1E3B, 0x5055, 0x5055, 0x0A07,
+    0x5056, 0x5056, 0x3F2C, 0x5057, 0x5057, 0x1E50, 0x5058, 0x5058, 0x39D1,
+    0x505A, 0x505A, 0x0A02, 0x505B, 0x505B, 0x1E42, 0x505C, 0x505C, 0x09FE,
+    0x505D, 0x505D, 0x1E3D, 0x505E, 0x505E, 0x1E39, 0x505F, 0x505F, 0x1E47,
+    0x5060, 0x5060, 0x1E3A, 0x5061, 0x5061, 0x1E38, 0x5062, 0x5062, 0x1E44,
+    0x5063, 0x5064, 0x1E4A, 0x5065, 0x5065, 0x0A04, 0x5066, 0x5066, 0x3DC9,
+    0x5068, 0x5068, 0x20B8, 0x5069, 0x5069, 0x1E48, 0x506A, 0x506A, 0x1E37,
+    0x506B, 0x506B, 0x1E49, 0x506C, 0x506C, 0x39CD, 0x506D, 0x506D, 0x0A0E,
+    0x506E, 0x506E, 0x1E4E, 0x506F, 0x506F, 0x0A0D, 0x5070, 0x5070, 0x1E36,
+    0x5072, 0x5072, 0x1E3E, 0x5073, 0x5073, 0x1E4F, 0x5074, 0x5074, 0x0A09,
+    0x5075, 0x5075, 0x0A08, 0x5076, 0x5076, 0x0A05, 0x5077, 0x5077, 0x0A0A,
+    0x507A, 0x507A, 0x09FC, 0x507D, 0x507D, 0x09FD, 0x5080, 0x5080, 0x0BEC,
+    0x5081, 0x5081, 0x39CE, 0x5082, 0x5082, 0x20BB, 0x5083, 0x5083, 0x20B4,
+    0x5085, 0x5085, 0x0BE9, 0x5087, 0x5087, 0x20BC, 0x5088, 0x5088, 0x439C,
+    0x508B, 0x508B, 0x20B2, 0x508C, 0x508C, 0x20B5, 0x508D, 0x508D, 0x0BE8,
+    0x508E, 0x508E, 0x20B6, 0x5090, 0x5090, 0x41EC, 0x5091, 0x5091, 0x0BEB,
+    0x5092, 0x5092, 0x20BA, 0x5094, 0x5094, 0x20B0, 0x5095, 0x5095, 0x20AF,
+    0x5096, 0x5096, 0x0BED, 0x5098, 0x5098, 0x0BEE, 0x5099, 0x5099, 0x0BEA,
+    0x509A, 0x509A, 0x0BEF, 0x509B, 0x509B, 0x20AE, 0x509C, 0x509C, 0x20B9,
+    0x509D, 0x509D, 0x20B7, 0x509E, 0x509E, 0x20B1, 0x50A2, 0x50A2, 0x0BE7,
+    0x50A3, 0x50A3, 0x20B3, 0x50A6, 0x50A6, 0x3F3F, 0x50AC, 0x50AC, 0x0DC5,
+    0x50AD, 0x50AD, 0x0DBF, 0x50AE, 0x50AE, 0x2367, 0x50AF, 0x50AF, 0x0DC8,
+    0x50B0, 0x50B0, 0x236D, 0x50B1, 0x50B1, 0x2370, 0x50B2, 0x50B3, 0x0DC1,
+    0x50B4, 0x50B4, 0x236A, 0x50B5, 0x50B5, 0x0DC0, 0x50B6, 0x50B6, 0x2373,
+    0x50B7, 0x50B7, 0x0DC6, 0x50B8, 0x50B8, 0x2374, 0x50BA, 0x50BA, 0x236F,
+    0x50BB, 0x50BB, 0x0DC7, 0x50BD, 0x50BD, 0x2364, 0x50BE, 0x50BE, 0x0DC4,
+    0x50BF, 0x50BF, 0x2365, 0x50C1, 0x50C1, 0x236E, 0x50C2, 0x50C2, 0x236C,
+    0x50C4, 0x50C4, 0x2368, 0x50C5, 0x50C5, 0x0DC3, 0x50C6, 0x50C6, 0x2366,
+    0x50C7, 0x50C7, 0x0DC9, 0x50C8, 0x50C8, 0x236B, 0x50C9, 0x50C9, 0x2372,
+    0x50CA, 0x50CA, 0x2369, 0x50CB, 0x50CB, 0x2371, 0x50CD, 0x50CD, 0x39C5,
+    0x50CE, 0x50CE, 0x0F88, 0x50CF, 0x50CF, 0x0F85, 0x50D0, 0x50D0, 0x38D1,
+    0x50D1, 0x50D1, 0x0F86, 0x50D3, 0x50D3, 0x261C, 0x50D4, 0x50D4, 0x2614,
+    0x50D5, 0x50D5, 0x0F84, 0x50D6, 0x50D6, 0x0F81, 0x50D7, 0x50D7, 0x2615,
+    0x50D9, 0x50D9, 0x3FCE, 0x50DA, 0x50DA, 0x0F83, 0x50DB, 0x50DB, 0x2618,
+    0x50DD, 0x50DD, 0x261A, 0x50DE, 0x50DE, 0x4031, 0x50DF, 0x50DF, 0x3AFD,
+    0x50E0, 0x50E0, 0x2621, 0x50E1, 0x50E1, 0x4171, 0x50E3, 0x50E3, 0x2620,
+    0x50E4, 0x50E4, 0x261B, 0x50E5, 0x50E5, 0x0F80, 0x50E6, 0x50E6, 0x2613,
+    0x50E7, 0x50E7, 0x0F7E, 0x50E8, 0x50E8, 0x2616, 0x50E9, 0x50E9, 0x0F89,
+    0x50EA, 0x50EA, 0x2619, 0x50EC, 0x50EC, 0x261D, 0x50ED, 0x50ED, 0x0F82,
+    0x50EE, 0x50EE, 0x0F7F, 0x50EF, 0x50EF, 0x261F, 0x50F0, 0x50F0, 0x261E,
+    0x50F1, 0x50F1, 0x0F87, 0x50F3, 0x50F3, 0x2617, 0x50F4, 0x50F4, 0x3CE9,
+    0x50F5, 0x50F5, 0x1105, 0x50F6, 0x50F6, 0x2883, 0x50F8, 0x50F8, 0x2880,
+    0x50F9, 0x50F9, 0x1106, 0x50FB, 0x50FB, 0x1104, 0x50FC, 0x50FC, 0x39D2,
+    0x50FD, 0x50FD, 0x2887, 0x50FE, 0x50FE, 0x2884, 0x50FF, 0x50FF, 0x287D,
+    0x5100, 0x5100, 0x1103, 0x5101, 0x5101, 0x4032, 0x5102, 0x5102, 0x1107,
+    0x5103, 0x5103, 0x287E, 0x5104, 0x5104, 0x1102, 0x5105, 0x5105, 0x110A,
+    0x5106, 0x5107, 0x2881, 0x5108, 0x5109, 0x1108, 0x510A, 0x510A, 0x2888,
+    0x510B, 0x510C, 0x2885, 0x510D, 0x510D, 0x39C6, 0x510E, 0x510E, 0x4034,
+    0x5110, 0x5110, 0x128D, 0x5111, 0x5111, 0x2B04, 0x5112, 0x5112, 0x128A,
+    0x5113, 0x5113, 0x2B01, 0x5114, 0x5114, 0x128C, 0x5115, 0x5115, 0x128E,
+    0x5117, 0x5117, 0x2B02, 0x5118, 0x5118, 0x128B, 0x511A, 0x511A, 0x2B03,
+    0x511C, 0x511C, 0x2B00, 0x511F, 0x511F, 0x13B5, 0x5120, 0x5120, 0x2D3E,
+    0x5121, 0x5121, 0x13B6, 0x5122, 0x5122, 0x2D3C, 0x5124, 0x5124, 0x2D3D,
+    0x5125, 0x5125, 0x2D3B, 0x5126, 0x5126, 0x2D3A, 0x5129, 0x5129, 0x2D3F,
+    0x512A, 0x512A, 0x13B4, 0x512B, 0x512B, 0x39AE, 0x512D, 0x512E, 0x2F0F,
+    0x5130, 0x5130, 0x287F, 0x5131, 0x5131, 0x2F0E, 0x5132, 0x5132, 0x13B7,
+    0x5133, 0x5133, 0x1575, 0x5134, 0x5135, 0x307A, 0x5137, 0x5138, 0x1668,
+    0x5139, 0x5139, 0x32C6, 0x513A, 0x513A, 0x32C5, 0x513B, 0x513B, 0x16BC,
+    0x513C, 0x513C, 0x16BB, 0x513D, 0x513D, 0x340E, 0x513F, 0x513F, 0x025C,
+    0x5140, 0x5140, 0x0274, 0x5141, 0x5141, 0x02AA, 0x5143, 0x5143, 0x02A9,
+    0x5144, 0x5144, 0x0303, 0x5145, 0x5145, 0x0302, 0x5146, 0x5146, 0x038A,
+    0x5147, 0x5147, 0x0389, 0x5148, 0x5148, 0x038B, 0x5149, 0x5149, 0x0388,
+    0x514B, 0x514B, 0x0434, 0x514C, 0x514C, 0x0433, 0x514D, 0x514D, 0x0435,
+    0x5152, 0x5152, 0x0545, 0x5154, 0x5154, 0x0544, 0x5155, 0x5155, 0x0546,
+    0x5156, 0x5156, 0x439A, 0x5157, 0x5157, 0x06BC, 0x5159, 0x5159, 0x0119,
+    0x515A, 0x515A, 0x1C32, 0x515B, 0x515B, 0x011A, 0x515C, 0x515C, 0x0A0F,
+    0x515D, 0x515D, 0x011C, 0x515E, 0x515E, 0x011B, 0x515F, 0x515F, 0x20BD,
+    0x5160, 0x5160, 0x403A, 0x5161, 0x5161, 0x011D, 0x5162, 0x5162, 0x0F8A,
+    0x5163, 0x5163, 0x011E, 0x5165, 0x5165, 0x025D, 0x5167, 0x5167, 0x02AB,
+    0x5168, 0x5168, 0x038C, 0x5169, 0x5169, 0x0547, 0x516A, 0x516A, 0x403C,
+    0x516B, 0x516B, 0x025E, 0x516C, 0x516C, 0x02AE, 0x516D, 0x516E, 0x02AC,
+    0x5171, 0x5171, 0x038D, 0x5174, 0x5174, 0x453F, 0x5175, 0x5175, 0x0436,
+    0x5176, 0x5176, 0x0549, 0x5177, 0x5177, 0x0548, 0x5178, 0x5178, 0x054A,
+    0x5179, 0x5179, 0x3ACE, 0x517C, 0x517C, 0x0852, 0x5180, 0x5180, 0x128F,
+    0x5182, 0x5182, 0x021D, 0x5186, 0x5186, 0x439F, 0x5187, 0x5187, 0x1779,
+    0x5188, 0x5188, 0x36B6, 0x5189, 0x518A, 0x0304, 0x518D, 0x518D, 0x038E,
+    0x518F, 0x518F, 0x1833, 0x5191, 0x5191, 0x06BE, 0x5192, 0x5192, 0x06BD,
+    0x5193, 0x5193, 0x1C34, 0x5194, 0x5194, 0x1C33, 0x5195, 0x5195, 0x0A10,
+    0x5196, 0x5196, 0x021E, 0x5197, 0x5197, 0x02AF, 0x5198, 0x5198, 0x1780,
+    0x519A, 0x519A, 0x3EA3, 0x519C, 0x519C, 0x4540, 0x519E, 0x519E, 0x1910,
+    0x51A0, 0x51A0, 0x06BF, 0x51A2, 0x51A2, 0x0855, 0x51A4, 0x51A5, 0x0853,
+    0x51A7, 0x51A7, 0x3EA6, 0x51A8, 0x51A8, 0x39DA, 0x51AA, 0x51AA, 0x1290,
+    0x51AB, 0x51AB, 0x021F, 0x51AC, 0x51AC, 0x0306, 0x51B0, 0x51B0, 0x038F,
+    0x51B1, 0x51B1, 0x17C6, 0x51B2, 0x51B2, 0x4048, 0x51B3, 0x51B3, 0x4051,
+    0x51B4, 0x51B4, 0x3D7C, 0x51B5, 0x51B5, 0x4012, 0x51B6, 0x51B7, 0x0437,
+    0x51B8, 0x51B8, 0x4049, 0x51B9, 0x51B9, 0x1834, 0x51BC, 0x51BC, 0x1911,
+    0x51BD, 0x51BD, 0x054B, 0x51BE, 0x51BE, 0x1912, 0x51C3, 0x51C3, 0x39DB,
+    0x51C4, 0x51C5, 0x1C36, 0x51C6, 0x51C6, 0x0858, 0x51C7, 0x51C7, 0x422A,
+    0x51C8, 0x51C8, 0x1C38, 0x51C9, 0x51C9, 0x404B, 0x51CA, 0x51CA, 0x1C35,
+    0x51CB, 0x51CB, 0x0859, 0x51CC, 0x51CC, 0x0857, 0x51CD, 0x51CD, 0x0856,
+    0x51CE, 0x51CE, 0x1C39, 0x51CF, 0x51CF, 0x404C, 0x51D0, 0x51D0, 0x1E52,
+    0x51D1, 0x51D1, 0x404D, 0x51D2, 0x51D2, 0x3DAD, 0x51D3, 0x51D3, 0x404F,
+    0x51D4, 0x51D4, 0x20BE, 0x51D7, 0x51D7, 0x2375, 0x51D8, 0x51D8, 0x2622,
+    0x51DB, 0x51DB, 0x459A, 0x51DC, 0x51DC, 0x110B, 0x51DD, 0x51DD, 0x1291,
+    0x51DE, 0x51DE, 0x2B05, 0x51DF, 0x51DF, 0x424F, 0x51E0, 0x51E0, 0x025F,
+    0x51E1, 0x51E1, 0x026D, 0x51E2, 0x51E2, 0x4052, 0x51E4, 0x51E4, 0x4541,
+    0x51ED, 0x51ED, 0x4054, 0x51F0, 0x51F0, 0x0A11, 0x51F1, 0x51F1, 0x0BF1,
+    0x51F3, 0x51F3, 0x0F8B, 0x51F4, 0x51F4, 0x4178, 0x51F5, 0x51F5, 0x176E,
+    0x51F6, 0x51F6, 0x02B0, 0x51F8, 0x51F8, 0x0309, 0x51F9, 0x51FA, 0x0307,
+    0x51FC, 0x51FC, 0x459B, 0x51FD, 0x51FD, 0x054C, 0x51FE, 0x51FE, 0x3F0A,
+    0x5200, 0x5201, 0x0260, 0x5202, 0x5202, 0x36B3, 0x5203, 0x5203, 0x0275,
+    0x5205, 0x5205, 0x43A1, 0x5206, 0x5208, 0x02B1, 0x5209, 0x5209, 0x1797,
+    0x520A, 0x520A, 0x030A, 0x520B, 0x520B, 0x4059, 0x520C, 0x520C, 0x1796,
+    0x520E, 0x520E, 0x0393, 0x5210, 0x5210, 0x17C8, 0x5211, 0x5212, 0x0391,
+    0x5213, 0x5213, 0x17C7, 0x5216, 0x5216, 0x0394, 0x5217, 0x5217, 0x0390,
+    0x521C, 0x521C, 0x1835, 0x521D, 0x521D, 0x068B, 0x521E, 0x521E, 0x1836,
+    0x521F, 0x521F, 0x3F60, 0x5220, 0x5220, 0x4930, 0x5221, 0x5221, 0x1837,
+    0x5224, 0x5224, 0x043A, 0x5225, 0x5225, 0x0439, 0x5226, 0x5226, 0x405A,
+    0x5227, 0x5227, 0x43A2, 0x5228, 0x5228, 0x043D, 0x5229, 0x522A, 0x043B,
+    0x522E, 0x522E, 0x0552, 0x5230, 0x5230, 0x0551, 0x5231, 0x5231, 0x1917,
+    0x5232, 0x5233, 0x1914, 0x5234, 0x5234, 0x3EFB, 0x5235, 0x5235, 0x1913,
+    0x5236, 0x5236, 0x0553, 0x5237, 0x5237, 0x054F, 0x5238, 0x5238, 0x054E,
+    0x523A, 0x523A, 0x0550, 0x523B, 0x523B, 0x054D, 0x523C, 0x523C, 0x405B,
+    0x5241, 0x5241, 0x0554, 0x5243, 0x5243, 0x06C1, 0x5244, 0x5244, 0x1A6D,
+    0x5246, 0x5246, 0x1916, 0x5247, 0x5247, 0x06C6, 0x5249, 0x5249, 0x1A6E,
+    0x524A, 0x524A, 0x06C2, 0x524B, 0x524B, 0x06C5, 0x524C, 0x524C, 0x06C4,
+    0x524D, 0x524D, 0x06C3, 0x524E, 0x524E, 0x06C0, 0x5252, 0x5252, 0x1C3C,
+    0x5254, 0x5254, 0x085C, 0x5255, 0x5255, 0x1C3F, 0x5256, 0x5256, 0x085A,
+    0x5257, 0x5257, 0x405D, 0x5259, 0x5259, 0x39E4, 0x525A, 0x525A, 0x1C3B,
+    0x525B, 0x525B, 0x085D, 0x525C, 0x525C, 0x085B, 0x525D, 0x525D, 0x085E,
+    0x525E, 0x525F, 0x1C3D, 0x5260, 0x5260, 0x3F29, 0x5261, 0x5261, 0x1C3A,
+    0x5262, 0x5262, 0x1C40, 0x5268, 0x5268, 0x4619, 0x5269, 0x5269, 0x0BF5,
+    0x526A, 0x526A, 0x0A12, 0x526B, 0x526B, 0x1E53, 0x526C, 0x526C, 0x1E55,
+    0x526D, 0x526D, 0x1E54, 0x526E, 0x526E, 0x1E56, 0x526F, 0x526F, 0x0A13,
+    0x5272, 0x5272, 0x0BF2, 0x5273, 0x5273, 0x3F43, 0x5274, 0x5275, 0x0BF3,
+    0x5277, 0x5277, 0x0DCB, 0x5278, 0x5278, 0x2377, 0x5279, 0x5279, 0x43A3,
+    0x527A, 0x527A, 0x2376, 0x527B, 0x527C, 0x2378, 0x527D, 0x527D, 0x0DCC,
+    0x527F, 0x527F, 0x0DCA, 0x5280, 0x5281, 0x2623, 0x5282, 0x5282, 0x0F8D,
+    0x5283, 0x5283, 0x0F8C, 0x5284, 0x5284, 0x2776, 0x5287, 0x5289, 0x110C,
+    0x528A, 0x528A, 0x1110, 0x528B, 0x528C, 0x2889, 0x528D, 0x528D, 0x110F,
+    0x528F, 0x528F, 0x3DBF, 0x5290, 0x5290, 0x459D, 0x5291, 0x5291, 0x1292,
+    0x5293, 0x5293, 0x1293, 0x5294, 0x5294, 0x405E, 0x5296, 0x5296, 0x307C,
+    0x5297, 0x5297, 0x32C8, 0x5298, 0x5298, 0x32C7, 0x5299, 0x5299, 0x340F,
+    0x529A, 0x529A, 0x3F68, 0x529B, 0x529B, 0x0262, 0x529F, 0x529F, 0x030C,
+    0x52A0, 0x52A0, 0x030B, 0x52A1, 0x52A1, 0x4542, 0x52A3, 0x52A3, 0x0395,
+    0x52A4, 0x52A4, 0x39E5, 0x52A6, 0x52A6, 0x17C9, 0x52A8, 0x52A8, 0x4543,
+    0x52A9, 0x52AA, 0x043F, 0x52AB, 0x52AB, 0x043E, 0x52AC, 0x52AC, 0x0441,
+    0x52AD, 0x52AE, 0x1838, 0x52B5, 0x52B5, 0x405C, 0x52B9, 0x52B9, 0x405F,
+    0x52BB, 0x52BB, 0x0556, 0x52BC, 0x52BC, 0x1918, 0x52BE, 0x52BE, 0x0555,
+    0x52C0, 0x52C0, 0x1A6F, 0x52C1, 0x52C1, 0x06CA, 0x52C2, 0x52C2, 0x1A70,
+    0x52C3, 0x52C3, 0x06C9, 0x52C5, 0x52C5, 0x4060, 0x52C7, 0x52C7, 0x06C7,
+    0x52C9, 0x52C9, 0x06C8, 0x52CC, 0x52CC, 0x3EE1, 0x52CD, 0x52CD, 0x1C41,
+    0x52D0, 0x52D0, 0x4109, 0x52D1, 0x52D1, 0x3F2A, 0x52D2, 0x52D2, 0x0A14,
+    0x52D3, 0x52D3, 0x1E58, 0x52D5, 0x52D5, 0x0A17, 0x52D6, 0x52D6, 0x1E57,
+    0x52D7, 0x52D7, 0x0ACF, 0x52D8, 0x52D8, 0x0A16, 0x52D9, 0x52D9, 0x0A15,
+    0x52DB, 0x52DB, 0x0BF8, 0x52DD, 0x52DD, 0x0BF7, 0x52DE, 0x52DE, 0x0BF6,
+    0x52DF, 0x52DF, 0x0DCD, 0x52E0, 0x52E0, 0x4063, 0x52E1, 0x52E1, 0x39E7,
+    0x52E2, 0x52E3, 0x0DD0, 0x52E4, 0x52E4, 0x0DCF, 0x52E6, 0x52E6, 0x0DCE,
+    0x52E9, 0x52E9, 0x2625, 0x52EB, 0x52EB, 0x2626, 0x52EF, 0x52EF, 0x288C,
+    0x52F0, 0x52F0, 0x1111, 0x52F1, 0x52F1, 0x288B, 0x52F3, 0x52F3, 0x1294,
+    0x52F4, 0x52F4, 0x2D40, 0x52F5, 0x52F5, 0x13B8, 0x52F7, 0x52F7, 0x307D,
+    0x52F8, 0x52F8, 0x1609, 0x52F9, 0x52F9, 0x0220, 0x52FA, 0x52FA, 0x0276,
+    0x52FB, 0x52FB, 0x02B4, 0x52FC, 0x52FC, 0x1781, 0x52FE, 0x52FF, 0x02B5,
+    0x5301, 0x5301, 0x3D79, 0x5305, 0x5306, 0x030D, 0x5308, 0x5308, 0x0396,
+    0x5309, 0x5309, 0x183A, 0x530A, 0x530B, 0x1919, 0x530D, 0x530D, 0x06CB,
+    0x530E, 0x530E, 0x1C42, 0x530F, 0x530F, 0x0A19, 0x5310, 0x5310, 0x0A18,
+    0x5311, 0x5311, 0x20C0, 0x5312, 0x5312, 0x20BF, 0x5315, 0x5315, 0x0263,
+    0x5316, 0x5316, 0x02B7, 0x5317, 0x5317, 0x030F, 0x5319, 0x5319, 0x0A1A,
+    0x531A, 0x531A, 0x176F, 0x531C, 0x531C, 0x1798, 0x531D, 0x531D, 0x0310,
+    0x531F, 0x531F, 0x17CB, 0x5320, 0x5320, 0x0398, 0x5321, 0x5321, 0x0397,
+    0x5322, 0x5322, 0x17CA, 0x5323, 0x5323, 0x0442, 0x5327, 0x5327, 0x459E,
+    0x532A, 0x532A, 0x085F, 0x532C, 0x532C, 0x3F36, 0x532D, 0x532D, 0x1E59,
+    0x532F, 0x532F, 0x0DD2, 0x5330, 0x5330, 0x2627, 0x5331, 0x5331, 0x0F8E,
+    0x5332, 0x5332, 0x3FD0, 0x5333, 0x5333, 0x406D, 0x5334, 0x5334, 0x2B06,
+    0x5337, 0x5337, 0x31C7, 0x5338, 0x5338, 0x0221, 0x5339, 0x5339, 0x02B8,
+    0x533B, 0x533B, 0x4544, 0x533C, 0x533C, 0x191B, 0x533D, 0x533D, 0x1A71,
+    0x533E, 0x533E, 0x0A1D, 0x533F, 0x5340, 0x0A1B, 0x5341, 0x5341, 0x0264,
+    0x5342, 0x5342, 0x4947, 0x5343, 0x5343, 0x0277, 0x5344, 0x5344, 0x016B,
+    0x5345, 0x5345, 0x02BB, 0x5347, 0x5347, 0x02BA, 0x5348, 0x5348, 0x02B9,
+    0x5349, 0x5349, 0x0313, 0x534A, 0x534A, 0x0312, 0x534C, 0x534C, 0x1799,
+    0x534D, 0x534D, 0x17CC, 0x534E, 0x534E, 0x4545, 0x5351, 0x5351, 0x055A,
+    0x5352, 0x5352, 0x0557, 0x5353, 0x5353, 0x0559, 0x5354, 0x5354, 0x0558,
+    0x5357, 0x5357, 0x06CC, 0x535A, 0x535A, 0x0BF9, 0x535C, 0x535C, 0x0265,
+    0x535D, 0x535D, 0x4501, 0x535E, 0x535E, 0x02BC, 0x535F, 0x535F, 0x43A7,
+    0x5360, 0x5360, 0x0315, 0x5361, 0x5361, 0x0314, 0x5363, 0x5363, 0x183B,
+    0x5364, 0x5364, 0x480A, 0x5366, 0x5366, 0x055B, 0x5367, 0x5367, 0x3ECD,
+    0x5369, 0x5369, 0x0222, 0x536C, 0x536C, 0x1782, 0x536D, 0x536D, 0x407A,
+    0x536E, 0x536E, 0x0317, 0x536F, 0x536F, 0x0316, 0x5370, 0x5371, 0x0399,
+    0x5372, 0x5372, 0x183C, 0x5373, 0x5373, 0x0443, 0x5374, 0x5374, 0x407B,
+    0x5375, 0x5375, 0x0444, 0x5377, 0x5379, 0x055C, 0x537B, 0x537B, 0x06CD,
+    0x537C, 0x537C, 0x1A72, 0x537D, 0x537D, 0x4901, 0x537E, 0x537E, 0x407D,
+    0x537F, 0x537F, 0x0860, 0x5382, 0x5382, 0x1770, 0x5384, 0x5384, 0x02BD,
+    0x538A, 0x538A, 0x17CD, 0x538E, 0x538F, 0x183D, 0x5392, 0x5392, 0x191C,
+    0x5393, 0x5393, 0x4082, 0x5394, 0x5394, 0x191D, 0x5396, 0x5396, 0x1A74,
+    0x5397, 0x5397, 0x1A73, 0x5398, 0x5398, 0x1A76, 0x5399, 0x5399, 0x1A75,
+    0x539A, 0x539A, 0x06CE, 0x539C, 0x539C, 0x1E5A, 0x539D, 0x539D, 0x0862,
+    0x539E, 0x539E, 0x1C43, 0x539F, 0x539F, 0x0861, 0x53A0, 0x53A0, 0x4084,
+    0x53A2, 0x53A2, 0x3E2B, 0x53A4, 0x53A4, 0x20C1, 0x53A5, 0x53A5, 0x0BFA,
+    0x53A6, 0x53A6, 0x413B, 0x53A7, 0x53A7, 0x20C2, 0x53A8, 0x53A8, 0x413E,
+    0x53A9, 0x53A9, 0x45A0, 0x53AA, 0x53AA, 0x3FC6, 0x53AB, 0x53AB, 0x4085,
+    0x53AC, 0x53AC, 0x2628, 0x53AD, 0x53AD, 0x0F8F, 0x53AE, 0x53AE, 0x4086,
+    0x53B0, 0x53B0, 0x45A2, 0x53B2, 0x53B2, 0x1112, 0x53B4, 0x53B4, 0x307E,
+    0x53B6, 0x53B6, 0x0223, 0x53B9, 0x53B9, 0x1783, 0x53BB, 0x53BB, 0x0318,
+    0x53C1, 0x53C1, 0x408B, 0x53C2, 0x53C2, 0x43A6, 0x53C3, 0x53C3, 0x0A1E,
+    0x53C5, 0x53C5, 0x408C, 0x53C8, 0x53C8, 0x0266, 0x53C9, 0x53C9, 0x0278,
+    0x53CA, 0x53CA, 0x02BF, 0x53CB, 0x53CB, 0x02BE, 0x53CC, 0x53CC, 0x38B6,
+    0x53CD, 0x53CD, 0x02C0, 0x53D0, 0x53D0, 0x39FA, 0x53D1, 0x53D1, 0x4546,
+    0x53D2, 0x53D2, 0x3E3D, 0x53D4, 0x53D4, 0x0560, 0x53D6, 0x53D6, 0x055F,
+    0x53D7, 0x53D7, 0x0561, 0x53D8, 0x53D8, 0x4547, 0x53D9, 0x53D9, 0x4090,
+    0x53DA, 0x53DA, 0x3F39, 0x53DB, 0x53DB, 0x06CF, 0x53DF, 0x53DF, 0x0863,
+    0x53E0, 0x53E0, 0x4093, 0x53E1, 0x53E1, 0x2B07, 0x53E2, 0x53E2, 0x14C9,
+    0x53E3, 0x53E3, 0x0279, 0x53E4, 0x53E4, 0x031A, 0x53E5, 0x53E5, 0x0329,
+    0x53E6, 0x53E6, 0x0324, 0x53E8, 0x53E8, 0x031F, 0x53E9, 0x53E9, 0x031E,
+    0x53EA, 0x53EA, 0x0325, 0x53EB, 0x53EB, 0x0323, 0x53EC, 0x53EC, 0x031C,
+    0x53ED, 0x53ED, 0x032A, 0x53EE, 0x53EE, 0x031D, 0x53EF, 0x53EF, 0x0319,
+    0x53F0, 0x53F0, 0x0328, 0x53F1, 0x53F1, 0x0327, 0x53F2, 0x53F2, 0x0326,
+    0x53F3, 0x53F3, 0x031B, 0x53F5, 0x53F5, 0x0322, 0x53F6, 0x53F6, 0x4096,
+    0x53F7, 0x53F7, 0x3808, 0x53F8, 0x53F8, 0x0321, 0x53FB, 0x53FB, 0x032B,
+    0x53FC, 0x53FC, 0x0320, 0x53FE, 0x53FE, 0x40C1, 0x5401, 0x5401, 0x03A0,
+    0x5403, 0x5403, 0x03A6, 0x5404, 0x5404, 0x03A2, 0x5406, 0x5406, 0x03A8,
+    0x5407, 0x5407, 0x17CE, 0x5408, 0x5408, 0x03A5, 0x5409, 0x5409, 0x039B,
+    0x540A, 0x540A, 0x039E, 0x540B, 0x540B, 0x03A1, 0x540C, 0x540C, 0x039D,
+    0x540D, 0x540D, 0x03A4, 0x540E, 0x540E, 0x03A7, 0x540F, 0x540F, 0x039C,
+    0x5410, 0x5410, 0x039F, 0x5411, 0x5411, 0x03A3, 0x5412, 0x5412, 0x03A9,
+    0x5413, 0x5413, 0x4098, 0x5414, 0x5414, 0x3C77, 0x5416, 0x5416, 0x3E7F,
+    0x5418, 0x5418, 0x1847, 0x5419, 0x5419, 0x1844, 0x541A, 0x541A, 0x3E64,
+    0x541B, 0x541B, 0x0451, 0x541C, 0x541C, 0x1845, 0x541D, 0x541D, 0x0445,
+    0x541E, 0x541E, 0x0447, 0x541F, 0x541F, 0x045F, 0x5420, 0x5420, 0x045A,
+    0x5421, 0x5421, 0x4203, 0x5423, 0x5423, 0x45A3, 0x5424, 0x5424, 0x184C,
+    0x5425, 0x5425, 0x1846, 0x5426, 0x5426, 0x0449, 0x5427, 0x5427, 0x044B,
+    0x5428, 0x5428, 0x184B, 0x5429, 0x5429, 0x0452, 0x542A, 0x542A, 0x1841,
+    0x542B, 0x542B, 0x045E, 0x542C, 0x542C, 0x0460, 0x542D, 0x542D, 0x0446,
+    0x542E, 0x542E, 0x0457, 0x542F, 0x542F, 0x40AC, 0x5430, 0x5430, 0x183F,
+    0x5431, 0x5431, 0x045D, 0x5432, 0x5432, 0x3E75, 0x5433, 0x5433, 0x044E,
+    0x5435, 0x5436, 0x0458, 0x5437, 0x5437, 0x1840, 0x5438, 0x5438, 0x0456,
+    0x5439, 0x5439, 0x0454, 0x543B, 0x543B, 0x0455, 0x543C, 0x543C, 0x045B,
+    0x543D, 0x543D, 0x1848, 0x543E, 0x543E, 0x0448, 0x5440, 0x5440, 0x045C,
+    0x5441, 0x5441, 0x184A, 0x5442, 0x5442, 0x0450, 0x5443, 0x5443, 0x044D,
+    0x5445, 0x5445, 0x1843, 0x5446, 0x5446, 0x044C, 0x5447, 0x5447, 0x184D,
+    0x5448, 0x5448, 0x044F, 0x544A, 0x544A, 0x0453, 0x544B, 0x544B, 0x3ED1,
+    0x544D, 0x544D, 0x3EA7, 0x544E, 0x544E, 0x044A, 0x544F, 0x544F, 0x1849,
+    0x5454, 0x5454, 0x1842, 0x5460, 0x5460, 0x192E, 0x5461, 0x5461, 0x192D,
+    0x5462, 0x5462, 0x0573, 0x5463, 0x5463, 0x1930, 0x5464, 0x5464, 0x1932,
+    0x5465, 0x5465, 0x1927, 0x5466, 0x5466, 0x192A, 0x5467, 0x5467, 0x1931,
+    0x5468, 0x5468, 0x0574, 0x5469, 0x5469, 0x3F32, 0x546A, 0x546A, 0x3D83,
+    0x546B, 0x546B, 0x1924, 0x546C, 0x546C, 0x1928, 0x546D, 0x546D, 0x409D,
+    0x546F, 0x546F, 0x192C, 0x5470, 0x5470, 0x1A85, 0x5471, 0x5471, 0x056F,
+    0x5472, 0x5472, 0x1A89, 0x5473, 0x5473, 0x0562, 0x5474, 0x5474, 0x1929,
+    0x5475, 0x5475, 0x0563, 0x5476, 0x5476, 0x0570, 0x5477, 0x5477, 0x0569,
+    0x5478, 0x5478, 0x0565, 0x547A, 0x547A, 0x1925, 0x547B, 0x547B, 0x0568,
+    0x547C, 0x547C, 0x056D, 0x547D, 0x547D, 0x0576, 0x547E, 0x547E, 0x1926,
+    0x547F, 0x547F, 0x191F, 0x5480, 0x5480, 0x0567, 0x5481, 0x5481, 0x1920,
+    0x5482, 0x5482, 0x1922, 0x5484, 0x5484, 0x056A, 0x5485, 0x5485, 0x46D9,
+    0x5486, 0x5486, 0x056C, 0x5487, 0x5487, 0x191E, 0x5488, 0x5488, 0x1923,
+    0x548B, 0x548B, 0x0575, 0x548C, 0x548C, 0x0571, 0x548D, 0x548D, 0x192B,
+    0x548E, 0x548E, 0x0577, 0x548F, 0x548F, 0x40A1, 0x5490, 0x5490, 0x056E,
+    0x5491, 0x5491, 0x1921, 0x5492, 0x5492, 0x056B, 0x5493, 0x5493, 0x45A7,
+    0x5494, 0x5494, 0x3E98, 0x5495, 0x5495, 0x0566, 0x5496, 0x5496, 0x0564,
+    0x5497, 0x5497, 0x3E8A, 0x5498, 0x5498, 0x192F, 0x549A, 0x549A, 0x0572,
+    0x549C, 0x549C, 0x3F66, 0x549E, 0x549E, 0x47ED, 0x54A0, 0x54A0, 0x1A84,
+    0x54A1, 0x54A1, 0x1A78, 0x54A2, 0x54A2, 0x1A87, 0x54A3, 0x54A3, 0x45A8,
+    0x54A4, 0x54A4, 0x40A2, 0x54A5, 0x54A5, 0x1A7A, 0x54A6, 0x54A6, 0x06D6,
+    0x54A7, 0x54A7, 0x06E4, 0x54A8, 0x54A8, 0x06D2, 0x54A9, 0x54A9, 0x06E3,
+    0x54AA, 0x54AA, 0x06DB, 0x54AB, 0x54AB, 0x06E0, 0x54AC, 0x54AC, 0x06D0,
+    0x54AD, 0x54AD, 0x1A79, 0x54AE, 0x54AE, 0x1A7F, 0x54AF, 0x54AF, 0x06DF,
+    0x54B0, 0x54B0, 0x1A8B, 0x54B1, 0x54B1, 0x06E1, 0x54B2, 0x54B2, 0x3744,
+    0x54B3, 0x54B3, 0x06D7, 0x54B4, 0x54B4, 0x45A9, 0x54B6, 0x54B6, 0x1A81,
+    0x54B7, 0x54B7, 0x1A7E, 0x54B8, 0x54B8, 0x06D5, 0x54B9, 0x54B9, 0x45AA,
+    0x54BA, 0x54BA, 0x1A77, 0x54BB, 0x54BB, 0x06E2, 0x54BC, 0x54BC, 0x1A86,
+    0x54BD, 0x54BD, 0x06DA, 0x54BE, 0x54BE, 0x1A88, 0x54BF, 0x54BF, 0x06E5,
+    0x54C0, 0x54C0, 0x06D1, 0x54C1, 0x54C1, 0x06DC, 0x54C2, 0x54C2, 0x06D9,
+    0x54C3, 0x54C3, 0x1A7C, 0x54C4, 0x54C4, 0x06DD, 0x54C5, 0x54C6, 0x1A82,
+    0x54C7, 0x54C7, 0x06D8, 0x54C8, 0x54C8, 0x06DE, 0x54C9, 0x54C9, 0x06D4,
+    0x54CB, 0x54CB, 0x39A3, 0x54CC, 0x54CC, 0x43A8, 0x54CD, 0x54CD, 0x3A00,
+    0x54CE, 0x54CE, 0x06D3, 0x54CF, 0x54CF, 0x1A7B, 0x54D0, 0x54D0, 0x45AB,
+    0x54D6, 0x54D6, 0x1A80, 0x54DA, 0x54DA, 0x4923, 0x54DE, 0x54DE, 0x1A8A,
+    0x54E0, 0x54E0, 0x1C57, 0x54E1, 0x54E1, 0x0870, 0x54E2, 0x54E2, 0x1C45,
+    0x54E3, 0x54E3, 0x4341, 0x54E4, 0x54E4, 0x1C4A, 0x54E5, 0x54E5, 0x0869,
+    0x54E6, 0x54E6, 0x0874, 0x54E7, 0x54E7, 0x1C48, 0x54E8, 0x54E8, 0x0864,
+    0x54E9, 0x54E9, 0x086E, 0x54EA, 0x54EA, 0x0873, 0x54EB, 0x54EB, 0x1C4F,
+    0x54ED, 0x54ED, 0x086F, 0x54EE, 0x54EE, 0x0872, 0x54EF, 0x54EF, 0x45AC,
+    0x54F1, 0x54F1, 0x1C52, 0x54F2, 0x54F2, 0x086A, 0x54F3, 0x54F3, 0x1C49,
+    0x54F7, 0x54F8, 0x1C55, 0x54FA, 0x54FA, 0x086C, 0x54FB, 0x54FB, 0x1C54,
+    0x54FC, 0x54FC, 0x0868, 0x54FD, 0x54FD, 0x0877, 0x54FF, 0x54FF, 0x1C4C,
+    0x5501, 0x5501, 0x0866, 0x5502, 0x5502, 0x3CCC, 0x5503, 0x5503, 0x1C59,
+    0x5504, 0x5504, 0x1C4D, 0x5505, 0x5505, 0x1C51, 0x5506, 0x5506, 0x086B,
+    0x5507, 0x5507, 0x0876, 0x5508, 0x5508, 0x1C4E, 0x5509, 0x5509, 0x0871,
+    0x550A, 0x550A, 0x1C53, 0x550B, 0x550B, 0x1C5A, 0x550C, 0x550C, 0x1E69,
+    0x550D, 0x550D, 0x3A73, 0x550E, 0x550E, 0x1C58, 0x550F, 0x550F, 0x0878,
+    0x5510, 0x5510, 0x0865, 0x5511, 0x5511, 0x1C50, 0x5512, 0x5512, 0x1C47,
+    0x5513, 0x5513, 0x3EA9, 0x5514, 0x5514, 0x086D, 0x5517, 0x5517, 0x1C46,
+    0x5518, 0x5518, 0x45AD, 0x551A, 0x551A, 0x1C4B, 0x551E, 0x551E, 0x3EA8,
+    0x5523, 0x5523, 0x45AE, 0x5525, 0x5525, 0x4309, 0x5526, 0x5526, 0x1C44,
+    0x5527, 0x5527, 0x0875, 0x5528, 0x5528, 0x45AF, 0x552A, 0x552A, 0x1E61,
+    0x552B, 0x552B, 0x409A, 0x552C, 0x552C, 0x0A31, 0x552D, 0x552D, 0x1E6F,
+    0x552E, 0x552E, 0x0A2F, 0x552F, 0x552F, 0x0A2C, 0x5530, 0x5530, 0x1E66,
+    0x5531, 0x5531, 0x0A28, 0x5532, 0x5532, 0x1E6A, 0x5533, 0x5533, 0x0A33,
+    0x5534, 0x5534, 0x1E60, 0x5535, 0x5535, 0x1E65, 0x5536, 0x5536, 0x1E64,
+    0x5537, 0x5537, 0x0867, 0x5538, 0x5538, 0x0A2E, 0x5539, 0x5539, 0x1E6D,
+    0x553B, 0x553B, 0x1E70, 0x553C, 0x553C, 0x1E5D, 0x553E, 0x553E, 0x0C0C,
+    0x553F, 0x553F, 0x43A9, 0x5540, 0x5540, 0x1E71, 0x5541, 0x5541, 0x0A34,
+    0x5543, 0x5543, 0x0A26, 0x5544, 0x5544, 0x0A23, 0x5545, 0x5545, 0x1E68,
+    0x5546, 0x5546, 0x0A20, 0x5547, 0x5547, 0x40AA, 0x5548, 0x5548, 0x1E6E,
+    0x5549, 0x5549, 0x4068, 0x554A, 0x554A, 0x0A27, 0x554B, 0x554B, 0x1E72,
+    0x554D, 0x554D, 0x1E5E, 0x554E, 0x554E, 0x1E6C, 0x554F, 0x554F, 0x0A2A,
+    0x5550, 0x5550, 0x1E5F, 0x5551, 0x5551, 0x1E62, 0x5552, 0x5552, 0x1E67,
+    0x5553, 0x5553, 0x43AE, 0x5555, 0x5555, 0x0A2B, 0x5556, 0x5556, 0x0A29,
+    0x5557, 0x5557, 0x0A35, 0x555C, 0x555C, 0x0A30, 0x555D, 0x555D, 0x40A0,
+    0x555E, 0x555E, 0x0A24, 0x555F, 0x555F, 0x0ABC, 0x5561, 0x5561, 0x0A25,
+    0x5562, 0x5562, 0x1E63, 0x5563, 0x5563, 0x0A32, 0x5564, 0x5564, 0x0A2D,
+    0x5565, 0x5565, 0x1E6B, 0x5566, 0x5566, 0x0A22, 0x5569, 0x5569, 0x3E9F,
+    0x556A, 0x556A, 0x0A21, 0x556B, 0x556B, 0x3B2E, 0x5571, 0x5571, 0x3BC6,
+    0x5572, 0x5572, 0x3E8B, 0x5573, 0x5573, 0x3F24, 0x5575, 0x5576, 0x1E5B,
+    0x5577, 0x5577, 0x20C7, 0x5579, 0x5579, 0x435D, 0x557B, 0x557B, 0x0BFB,
+    0x557C, 0x557C, 0x0BFE, 0x557D, 0x557D, 0x20D2, 0x557E, 0x557E, 0x0C12,
+    0x557F, 0x557F, 0x20D5, 0x5580, 0x5580, 0x0BFC, 0x5581, 0x5581, 0x20CE,
+    0x5582, 0x5582, 0x0C02, 0x5583, 0x5583, 0x0C08, 0x5584, 0x5584, 0x0D1B,
+    0x5586, 0x5586, 0x40AE, 0x5587, 0x5587, 0x0C06, 0x5588, 0x5588, 0x20CB,
+    0x5589, 0x5589, 0x0C13, 0x558A, 0x558A, 0x0BFF, 0x558B, 0x558B, 0x0C07,
+    0x558C, 0x558C, 0x20D3, 0x558D, 0x558D, 0x2387, 0x558E, 0x558E, 0x20D8,
+    0x558F, 0x558F, 0x20CC, 0x5590, 0x5590, 0x430E, 0x5591, 0x5591, 0x20C3,
+    0x5592, 0x5592, 0x20D0, 0x5593, 0x5593, 0x20CA, 0x5594, 0x5594, 0x0C05,
+    0x5595, 0x5595, 0x20D6, 0x5598, 0x5598, 0x0C01, 0x5599, 0x5599, 0x0C15,
+    0x559A, 0x559A, 0x0C0E, 0x559C, 0x559C, 0x0C03, 0x559D, 0x559D, 0x0C00,
+    0x559F, 0x559F, 0x0C0B, 0x55A1, 0x55A1, 0x20D7, 0x55A2, 0x55A2, 0x20C9,
+    0x55A3, 0x55A3, 0x20CF, 0x55A4, 0x55A4, 0x20D1, 0x55A5, 0x55A5, 0x20C5,
+    0x55A6, 0x55A6, 0x20D4, 0x55A7, 0x55A7, 0x0BFD, 0x55A8, 0x55A8, 0x20C4,
+    0x55A9, 0x55A9, 0x40AF, 0x55AA, 0x55AA, 0x0C04, 0x55AB, 0x55AB, 0x0C14,
+    0x55AC, 0x55AC, 0x0C10, 0x55AD, 0x55AD, 0x20C6, 0x55AE, 0x55AE, 0x0C0A,
+    0x55B0, 0x55B0, 0x38F5, 0x55B1, 0x55B1, 0x0C11, 0x55B2, 0x55B2, 0x0C0D,
+    0x55B3, 0x55B3, 0x0C09, 0x55B4, 0x55B4, 0x39FE, 0x55B5, 0x55B5, 0x20CD,
+    0x55B9, 0x55B9, 0x43AA, 0x55BA, 0x55BA, 0x3E89, 0x55BB, 0x55BB, 0x0C0F,
+    0x55BC, 0x55BC, 0x3DC3, 0x55BF, 0x55BF, 0x2385, 0x55C0, 0x55C0, 0x2381,
+    0x55C1, 0x55C1, 0x3E4F, 0x55C2, 0x55C2, 0x2390, 0x55C3, 0x55C3, 0x237A,
+    0x55C4, 0x55C4, 0x2383, 0x55C5, 0x55C6, 0x0DE0, 0x55C7, 0x55C7, 0x0DD9,
+    0x55C8, 0x55C8, 0x238C, 0x55C9, 0x55C9, 0x0DE3, 0x55CA, 0x55CA, 0x237F,
+    0x55CB, 0x55CB, 0x237E, 0x55CC, 0x55CC, 0x237C, 0x55CD, 0x55CD, 0x238E,
+    0x55CE, 0x55CE, 0x0DD7, 0x55CF, 0x55CF, 0x2388, 0x55D0, 0x55D0, 0x237D,
+    0x55D1, 0x55D1, 0x0DDA, 0x55D2, 0x55D2, 0x2386, 0x55D3, 0x55D3, 0x0DD5,
+    0x55D4, 0x55D4, 0x2382, 0x55D5, 0x55D5, 0x2389, 0x55D6, 0x55D6, 0x238B,
+    0x55D7, 0x55D7, 0x45B3, 0x55D8, 0x55D8, 0x43AB, 0x55D9, 0x55D9, 0x238F,
+    0x55DA, 0x55DA, 0x0DDE, 0x55DB, 0x55DB, 0x237B, 0x55DC, 0x55DC, 0x0DD8,
+    0x55DD, 0x55DD, 0x2380, 0x55DE, 0x55DE, 0x3E94, 0x55DF, 0x55DF, 0x0DD3,
+    0x55E1, 0x55E1, 0x0DDF, 0x55E2, 0x55E2, 0x238A, 0x55E3, 0x55E4, 0x0DDB,
+    0x55E5, 0x55E5, 0x0DE2, 0x55E6, 0x55E6, 0x0DD6, 0x55E7, 0x55E7, 0x011F,
+    0x55E8, 0x55E8, 0x0DD4, 0x55E9, 0x55E9, 0x2384, 0x55EA, 0x55EA, 0x3E7C,
+    0x55EC, 0x55EC, 0x37D2, 0x55EF, 0x55EF, 0x0DDD, 0x55F0, 0x55F0, 0x3E88,
+    0x55F1, 0x55F1, 0x3E83, 0x55F2, 0x55F2, 0x238D, 0x55F5, 0x55F5, 0x4786,
+    0x55F6, 0x55F6, 0x0F9F, 0x55F7, 0x55F7, 0x0F9A, 0x55F9, 0x55F9, 0x2637,
+    0x55FA, 0x55FA, 0x2633, 0x55FB, 0x55FB, 0x4626, 0x55FC, 0x55FC, 0x262D,
+    0x55FD, 0x55FD, 0x0F94, 0x55FE, 0x55FE, 0x0F90, 0x55FF, 0x55FF, 0x2636,
+    0x5600, 0x5600, 0x0F91, 0x5601, 0x5601, 0x2630, 0x5602, 0x5602, 0x2632,
+    0x5604, 0x5604, 0x2635, 0x5605, 0x5605, 0x3E82, 0x5606, 0x5606, 0x0F96,
+    0x5608, 0x5608, 0x0F9D, 0x5609, 0x5609, 0x0F97, 0x560C, 0x560C, 0x262B,
+    0x560D, 0x560E, 0x0F98, 0x560F, 0x560F, 0x262E, 0x5610, 0x5610, 0x0F9E,
+    0x5611, 0x5611, 0x3F4D, 0x5612, 0x5612, 0x262C, 0x5613, 0x5613, 0x2631,
+    0x5614, 0x5614, 0x0F95, 0x5615, 0x5615, 0x262A, 0x5616, 0x5616, 0x0F9B,
+    0x5617, 0x5617, 0x0F93, 0x561B, 0x561B, 0x0F92, 0x561C, 0x561C, 0x262F,
+    0x561D, 0x561D, 0x2634, 0x561E, 0x561E, 0x3E68, 0x561F, 0x561F, 0x0F9C,
+    0x5620, 0x5620, 0x3F7D, 0x5621, 0x5621, 0x43AD, 0x5622, 0x5622, 0x3E67,
+    0x5623, 0x5623, 0x4707, 0x5625, 0x5625, 0x3E78, 0x5627, 0x5627, 0x2629,
+    0x5629, 0x5629, 0x1119, 0x562A, 0x562A, 0x289D, 0x562C, 0x562C, 0x289A,
+    0x562D, 0x562D, 0x3E63, 0x562E, 0x562E, 0x1113, 0x562F, 0x5630, 0x111F,
+    0x5632, 0x5632, 0x1116, 0x5633, 0x5633, 0x2898, 0x5634, 0x5634, 0x1118,
+    0x5635, 0x5635, 0x2890, 0x5636, 0x5636, 0x111E, 0x5637, 0x5637, 0x40B7,
+    0x5638, 0x5638, 0x289C, 0x5639, 0x5639, 0x1115, 0x563A, 0x563A, 0x289E,
+    0x563B, 0x563B, 0x1114, 0x563D, 0x563D, 0x2899, 0x563E, 0x563E, 0x289B,
+    0x563F, 0x563F, 0x1117, 0x5640, 0x5640, 0x2897, 0x5641, 0x5641, 0x2891,
+    0x5642, 0x5642, 0x288E, 0x5643, 0x5643, 0x3E7E, 0x5645, 0x5645, 0x20C8,
+    0x5646, 0x5646, 0x2894, 0x5648, 0x5648, 0x288D, 0x5649, 0x5649, 0x2893,
+    0x564A, 0x564A, 0x2892, 0x564C, 0x564C, 0x288F, 0x564D, 0x564D, 0x40BC,
+    0x564E, 0x564E, 0x111B, 0x564F, 0x564F, 0x40BD, 0x5650, 0x5650, 0x47CF,
+    0x5652, 0x5652, 0x45C2, 0x5653, 0x5653, 0x111A, 0x5654, 0x5654, 0x43AF,
+    0x5657, 0x5657, 0x111C, 0x5658, 0x5658, 0x2895, 0x5659, 0x5659, 0x1295,
+    0x565A, 0x565A, 0x2896, 0x565D, 0x565D, 0x3EF9, 0x565E, 0x565E, 0x2B10,
+    0x5660, 0x5660, 0x2B09, 0x5661, 0x5661, 0x3812, 0x5662, 0x5662, 0x12A1,
+    0x5663, 0x5663, 0x2B0D, 0x5664, 0x5664, 0x1299, 0x5665, 0x5665, 0x129D,
+    0x5666, 0x5666, 0x2B0C, 0x5668, 0x5668, 0x129C, 0x5669, 0x5669, 0x1298,
+    0x566A, 0x566A, 0x129B, 0x566B, 0x566B, 0x1296, 0x566C, 0x566C, 0x12A0,
+    0x566D, 0x566D, 0x2B0E, 0x566E, 0x566E, 0x2B0A, 0x566F, 0x566F, 0x129F,
+    0x5670, 0x5670, 0x2B08, 0x5671, 0x5671, 0x129E, 0x5672, 0x5672, 0x2B0F,
+    0x5673, 0x5673, 0x2B0B, 0x5674, 0x5674, 0x111D, 0x5676, 0x5676, 0x12A2,
+    0x5677, 0x5677, 0x2B11, 0x5678, 0x5678, 0x129A, 0x5679, 0x5679, 0x1297,
+    0x567A, 0x567A, 0x3D85, 0x567B, 0x567B, 0x3EB7, 0x567C, 0x567C, 0x3EED,
+    0x567E, 0x567E, 0x2D47, 0x567F, 0x567F, 0x2D49, 0x5680, 0x5680, 0x13BA,
+    0x5681, 0x5681, 0x2D4A, 0x5682, 0x5682, 0x2D48, 0x5683, 0x5683, 0x2D46,
+    0x5684, 0x5684, 0x2D45, 0x5685, 0x5685, 0x13BC, 0x5686, 0x5686, 0x2D44,
+    0x5687, 0x5687, 0x13BD, 0x5689, 0x5689, 0x4628, 0x568A, 0x568A, 0x3949,
+    0x568B, 0x568B, 0x3E4C, 0x568C, 0x568D, 0x2D42, 0x568E, 0x568E, 0x13B9,
+    0x568F, 0x568F, 0x13BE, 0x5690, 0x5690, 0x13BB, 0x5692, 0x5692, 0x39A6,
+    0x5693, 0x5693, 0x2D41, 0x5695, 0x5695, 0x14CA, 0x5697, 0x5697, 0x2F13,
+    0x5698, 0x5698, 0x2F11, 0x5699, 0x5699, 0x2F16, 0x569A, 0x569A, 0x2F14,
+    0x569C, 0x569C, 0x2F12, 0x569D, 0x569D, 0x2F15, 0x569E, 0x569E, 0x39A4,
+    0x569F, 0x569F, 0x3948, 0x56A1, 0x56A1, 0x436B, 0x56A4, 0x56A4, 0x3CC8,
+    0x56A5, 0x56A5, 0x1576, 0x56A6, 0x56A7, 0x3081, 0x56A8, 0x56A8, 0x1577,
+    0x56AA, 0x56AA, 0x3083, 0x56AB, 0x56AB, 0x307F, 0x56AC, 0x56AC, 0x3084,
+    0x56AD, 0x56AD, 0x3080, 0x56AE, 0x56AE, 0x14CB, 0x56AF, 0x56AF, 0x45F7,
+    0x56B1, 0x56B1, 0x463F, 0x56B2, 0x56B2, 0x31C8, 0x56B3, 0x56B3, 0x31CA,
+    0x56B4, 0x56B4, 0x160C, 0x56B5, 0x56B5, 0x31C9, 0x56B6, 0x56B6, 0x160B,
+    0x56B7, 0x56B7, 0x160A, 0x56B9, 0x56B9, 0x486F, 0x56BC, 0x56BC, 0x160D,
+    0x56BD, 0x56BE, 0x32CA, 0x56BF, 0x56BF, 0x3E5D, 0x56C0, 0x56C0, 0x166B,
+    0x56C1, 0x56C1, 0x166A, 0x56C2, 0x56C2, 0x166C, 0x56C3, 0x56C3, 0x32C9,
+    0x56C5, 0x56C5, 0x3379, 0x56C6, 0x56C6, 0x3378, 0x56C8, 0x56C8, 0x16BD,
+    0x56C9, 0x56C9, 0x16BF, 0x56CA, 0x56CA, 0x16BE, 0x56CB, 0x56CB, 0x337A,
+    0x56CC, 0x56CC, 0x16F6, 0x56CD, 0x56CD, 0x3481, 0x56D1, 0x56D1, 0x171F,
+    0x56D3, 0x56D3, 0x3480, 0x56D4, 0x56D4, 0x34C9, 0x56D6, 0x56D6, 0x488A,
+    0x56D7, 0x56D7, 0x1775, 0x56DA, 0x56DA, 0x032D, 0x56DB, 0x56DB, 0x032C,
+    0x56DD, 0x56DD, 0x03AC, 0x56DE, 0x56DE, 0x03AB, 0x56DF, 0x56DF, 0x17D0,
+    0x56E0, 0x56E0, 0x03AA, 0x56E1, 0x56E1, 0x17CF, 0x56E2, 0x56E2, 0x4548,
+    0x56E4, 0x56E4, 0x0463, 0x56E5, 0x56E5, 0x1850, 0x56E7, 0x56E7, 0x184F,
+    0x56EA, 0x56EA, 0x0461, 0x56EB, 0x56EB, 0x0464, 0x56ED, 0x56ED, 0x40C4,
+    0x56EE, 0x56EE, 0x184E, 0x56EF, 0x56EF, 0x40C3, 0x56F0, 0x56F0, 0x0462,
+    0x56F1, 0x56F1, 0x40BF, 0x56F7, 0x56F7, 0x1933, 0x56F9, 0x56F9, 0x1934,
+    0x56FA, 0x56FA, 0x0578, 0x56FD, 0x56FD, 0x3D64, 0x56FF, 0x56FF, 0x06E6,
+    0x5700, 0x5700, 0x40C2, 0x5701, 0x5702, 0x1C5B, 0x5703, 0x5704, 0x0879,
+    0x5707, 0x5707, 0x1E74, 0x5708, 0x5708, 0x0A36, 0x5709, 0x5709, 0x0A38,
+    0x570A, 0x570A, 0x1E73, 0x570B, 0x570B, 0x0A37, 0x570C, 0x570C, 0x20D9,
+    0x570D, 0x570D, 0x0C16, 0x5712, 0x5713, 0x0DE4, 0x5714, 0x5714, 0x2391,
+    0x5715, 0x5715, 0x3E36, 0x5716, 0x5716, 0x0FA1, 0x5718, 0x5718, 0x0FA0,
+    0x571A, 0x571A, 0x289F, 0x571B, 0x571B, 0x2B13, 0x571C, 0x571C, 0x2B12,
+    0x571D, 0x571D, 0x3A02, 0x571E, 0x571E, 0x3505, 0x571F, 0x571F, 0x027A,
+    0x5720, 0x5720, 0x1784, 0x5722, 0x5723, 0x179A, 0x5728, 0x5728, 0x03AF,
+    0x5729, 0x5729, 0x03B3, 0x572A, 0x572A, 0x17D2, 0x572C, 0x572C, 0x03B1,
+    0x572D, 0x572D, 0x03B0, 0x572E, 0x572E, 0x17D1, 0x572F, 0x572F, 0x03B2,
+    0x5730, 0x5730, 0x03AE, 0x5732, 0x5732, 0x3AF9, 0x5733, 0x5733, 0x03AD,
+    0x5734, 0x5734, 0x17D3, 0x573B, 0x573B, 0x046E, 0x573E, 0x573E, 0x046B,
+    0x573F, 0x573F, 0x4855, 0x5740, 0x5740, 0x0467, 0x5741, 0x5741, 0x1851,
+    0x5742, 0x5742, 0x40CC, 0x5743, 0x5743, 0x40DE, 0x5745, 0x5745, 0x1852,
+    0x5746, 0x5746, 0x40C8, 0x5747, 0x5747, 0x0469, 0x5749, 0x5749, 0x1854,
+    0x574A, 0x574A, 0x0465, 0x574B, 0x574B, 0x1855, 0x574C, 0x574C, 0x1853,
+    0x574D, 0x574D, 0x0468, 0x574E, 0x574E, 0x046A, 0x574F, 0x574F, 0x046D,
+    0x5750, 0x5750, 0x046C, 0x5751, 0x5751, 0x0466, 0x5752, 0x5752, 0x1856,
+    0x5754, 0x5754, 0x4785, 0x5757, 0x5757, 0x47E6, 0x575B, 0x575B, 0x3982,
+    0x575F, 0x575F, 0x3FBF, 0x5761, 0x5761, 0x057D, 0x5762, 0x5762, 0x1941,
+    0x5764, 0x5764, 0x057F, 0x5766, 0x5766, 0x057E, 0x5767, 0x5767, 0x3F2B,
+    0x5768, 0x5768, 0x1942, 0x5769, 0x5769, 0x057C, 0x576A, 0x576A, 0x057B,
+    0x576B, 0x576B, 0x1938, 0x576D, 0x576D, 0x1937, 0x576F, 0x576F, 0x1935,
+    0x5770, 0x5770, 0x193A, 0x5771, 0x5771, 0x1939, 0x5772, 0x5772, 0x1936,
+    0x5773, 0x5774, 0x193F, 0x5775, 0x5775, 0x193D, 0x5776, 0x5776, 0x193B,
+    0x5777, 0x5777, 0x057A, 0x577A, 0x577A, 0x3F5F, 0x577B, 0x577B, 0x193E,
+    0x577C, 0x577C, 0x0580, 0x577D, 0x577D, 0x1943, 0x577E, 0x577E, 0x46DC,
+    0x577F, 0x577F, 0x3A07, 0x5780, 0x5780, 0x193C, 0x5782, 0x5782, 0x06E7,
+    0x5783, 0x5783, 0x0579, 0x5788, 0x5788, 0x484B, 0x578A, 0x578A, 0x3C7B,
+    0x578B, 0x578B, 0x06E8, 0x578C, 0x578C, 0x1A90, 0x578D, 0x578D, 0x3A06,
+    0x578F, 0x578F, 0x1A96, 0x5790, 0x5790, 0x4166, 0x5793, 0x5793, 0x06EE,
+    0x5794, 0x5794, 0x1A94, 0x5795, 0x5795, 0x1A9A, 0x5797, 0x5797, 0x1A91,
+    0x5798, 0x5798, 0x1A95, 0x5799, 0x5799, 0x1A97, 0x579A, 0x579A, 0x1A99,
+    0x579B, 0x579B, 0x1A93, 0x579C, 0x579C, 0x4608, 0x579D, 0x579D, 0x1A92,
+    0x579E, 0x579F, 0x1A8D, 0x57A0, 0x57A0, 0x06E9, 0x57A1, 0x57A1, 0x4864,
+    0x57A2, 0x57A2, 0x06EB, 0x57A3, 0x57A3, 0x06EA, 0x57A4, 0x57A4, 0x1A8F,
+    0x57A5, 0x57A5, 0x1A98, 0x57A7, 0x57A7, 0x4914, 0x57AA, 0x57AA, 0x4905,
+    0x57AE, 0x57AE, 0x06ED, 0x57B4, 0x57B4, 0x4741, 0x57B5, 0x57B5, 0x1A8C,
+    0x57B6, 0x57B6, 0x1C66, 0x57B8, 0x57B8, 0x1C65, 0x57B9, 0x57B9, 0x1C6A,
+    0x57BA, 0x57BA, 0x1C61, 0x57BB, 0x57BB, 0x3C79, 0x57BC, 0x57BC, 0x1C64,
+    0x57BD, 0x57BD, 0x1C63, 0x57BE, 0x57BE, 0x372C, 0x57BF, 0x57BF, 0x1C67,
+    0x57C1, 0x57C1, 0x1C6B, 0x57C2, 0x57C2, 0x087B, 0x57C3, 0x57C3, 0x087E,
+    0x57C4, 0x57C4, 0x3B5B, 0x57C6, 0x57C6, 0x1C62, 0x57C7, 0x57C7, 0x1C68,
+    0x57C8, 0x57C8, 0x3D0B, 0x57CB, 0x57CB, 0x087D, 0x57CC, 0x57CC, 0x1C5D,
+    0x57CE, 0x57CE, 0x06EC, 0x57CF, 0x57CF, 0x1E82, 0x57D0, 0x57D0, 0x1C69,
+    0x57D2, 0x57D2, 0x1C60, 0x57D4, 0x57D4, 0x087C, 0x57D5, 0x57D5, 0x1C5F,
+    0x57D7, 0x57D7, 0x3C7D, 0x57DC, 0x57DC, 0x1E79, 0x57DD, 0x57DD, 0x3A05,
+    0x57DE, 0x57DE, 0x3F01, 0x57DF, 0x57DF, 0x0A39, 0x57E0, 0x57E0, 0x0A3D,
+    0x57E1, 0x57E1, 0x1E89, 0x57E2, 0x57E2, 0x1E77, 0x57E3, 0x57E3, 0x1E85,
+    0x57E4, 0x57E4, 0x0A3E, 0x57E5, 0x57E5, 0x1E87, 0x57E6, 0x57E6, 0x40CF,
+    0x57E7, 0x57E7, 0x1E8D, 0x57E9, 0x57E9, 0x1E91, 0x57EC, 0x57EC, 0x1E88,
+    0x57ED, 0x57ED, 0x1E7C, 0x57EE, 0x57EE, 0x1E84, 0x57EF, 0x57EF, 0x4754,
+    0x57F0, 0x57F0, 0x1E92, 0x57F1, 0x57F1, 0x1E90, 0x57F2, 0x57F2, 0x1E86,
+    0x57F3, 0x57F3, 0x1E81, 0x57F4, 0x57F4, 0x1E7A, 0x57F5, 0x57F5, 0x20E1,
+    0x57F6, 0x57F6, 0x1E78, 0x57F7, 0x57F7, 0x0A42, 0x57F8, 0x57F8, 0x1E7F,
+    0x57F9, 0x57F9, 0x0A43, 0x57FA, 0x57FA, 0x0A3F, 0x57FB, 0x57FB, 0x1E75,
+    0x57FC, 0x57FC, 0x1E8B, 0x57FD, 0x57FD, 0x1E7D, 0x57FE, 0x57FE, 0x408F,
+    0x5800, 0x5800, 0x1E7B, 0x5801, 0x5801, 0x1E8E, 0x5802, 0x5802, 0x0A40,
+    0x5803, 0x5803, 0x40D1, 0x5804, 0x5804, 0x1E94, 0x5805, 0x5805, 0x0A3A,
+    0x5806, 0x5806, 0x0A3C, 0x5807, 0x5807, 0x1E83, 0x5808, 0x5808, 0x1E7E,
+    0x5809, 0x5809, 0x087F, 0x580A, 0x580A, 0x0A3B, 0x580B, 0x580B, 0x1E80,
+    0x580C, 0x580C, 0x1E8F, 0x580D, 0x580D, 0x1E93, 0x580E, 0x580E, 0x1E8A,
+    0x5810, 0x5810, 0x1E8C, 0x5812, 0x5812, 0x3D0A, 0x5814, 0x5814, 0x1E76,
+    0x5819, 0x5819, 0x20DC, 0x581B, 0x581B, 0x20E5, 0x581C, 0x581C, 0x20E4,
+    0x581D, 0x581D, 0x0C1E, 0x581E, 0x581E, 0x20DD, 0x5820, 0x5820, 0x0C1F,
+    0x5821, 0x5821, 0x0C1D, 0x5822, 0x5822, 0x3C28, 0x5823, 0x5823, 0x20DF,
+    0x5824, 0x5824, 0x0C1A, 0x5825, 0x5825, 0x20E3, 0x5826, 0x5826, 0x40D4,
+    0x5827, 0x5827, 0x20DE, 0x5828, 0x5828, 0x20E0, 0x5829, 0x5829, 0x20DA,
+    0x582A, 0x582A, 0x0C18, 0x582C, 0x582C, 0x20ED, 0x582D, 0x582D, 0x20EC,
+    0x582E, 0x582E, 0x20E9, 0x582F, 0x582F, 0x0C17, 0x5830, 0x5831, 0x0C1B,
+    0x5832, 0x5832, 0x1C5E, 0x5833, 0x5833, 0x20E6, 0x5834, 0x5834, 0x0C19,
+    0x5835, 0x5835, 0x0A41, 0x5836, 0x5836, 0x20E8, 0x5837, 0x5837, 0x20DB,
+    0x5838, 0x5838, 0x20EB, 0x5839, 0x5839, 0x20EA, 0x583A, 0x583A, 0x3D72,
+    0x583B, 0x583B, 0x20EE, 0x583D, 0x583D, 0x239F, 0x583F, 0x583F, 0x20E7,
+    0x5840, 0x5840, 0x3D82, 0x5844, 0x5844, 0x47BB, 0x5847, 0x5847, 0x3AC2,
+    0x5848, 0x5848, 0x20E2, 0x5849, 0x5849, 0x2397, 0x584A, 0x584A, 0x0DEF,
+    0x584B, 0x584B, 0x0DF2, 0x584C, 0x584C, 0x0DED, 0x584D, 0x584D, 0x2396,
+    0x584E, 0x584E, 0x239A, 0x584F, 0x584F, 0x2395, 0x5851, 0x5851, 0x0DE7,
+    0x5852, 0x5852, 0x0DF1, 0x5853, 0x5853, 0x2392, 0x5854, 0x5854, 0x0DEB,
+    0x5855, 0x5855, 0x2399, 0x5857, 0x5857, 0x0DE9, 0x5858, 0x5858, 0x0DE8,
+    0x5859, 0x5859, 0x239C, 0x585A, 0x585A, 0x0DEA, 0x585B, 0x585B, 0x239E,
+    0x585C, 0x585C, 0x4949, 0x585D, 0x585D, 0x239B, 0x585E, 0x585E, 0x0DE6,
+    0x585F, 0x585F, 0x43DF, 0x5862, 0x5862, 0x0DF0, 0x5863, 0x5863, 0x23A0,
+    0x5864, 0x5864, 0x2394, 0x5865, 0x5865, 0x239D, 0x5868, 0x5868, 0x2393,
+    0x5869, 0x5869, 0x3D65, 0x586B, 0x586B, 0x0DEC, 0x586C, 0x586C, 0x399A,
+    0x586D, 0x586D, 0x0DEE, 0x586F, 0x586F, 0x2398, 0x5871, 0x5871, 0x23A1,
+    0x5872, 0x5872, 0x3C26, 0x5873, 0x5873, 0x4355, 0x5874, 0x5874, 0x263F,
+    0x5875, 0x5875, 0x0FA2, 0x5876, 0x5876, 0x2645, 0x5879, 0x5879, 0x0FA7,
+    0x587A, 0x587A, 0x2641, 0x587B, 0x587B, 0x2648, 0x587C, 0x587C, 0x2639,
+    0x587D, 0x587D, 0x0FA9, 0x587E, 0x587E, 0x0FA3, 0x587F, 0x587F, 0x263E,
+    0x5880, 0x5880, 0x1121, 0x5881, 0x5881, 0x263D, 0x5882, 0x5882, 0x2646,
+    0x5883, 0x5883, 0x0FA4, 0x5885, 0x5885, 0x0FA8, 0x5886, 0x5886, 0x263C,
+    0x5887, 0x5887, 0x2642, 0x5888, 0x5888, 0x2647, 0x5889, 0x5889, 0x2638,
+    0x588A, 0x588A, 0x0FA6, 0x588B, 0x588B, 0x2640, 0x588E, 0x588E, 0x2644,
+    0x588F, 0x588F, 0x264A, 0x5890, 0x5890, 0x263A, 0x5891, 0x5891, 0x2643,
+    0x5893, 0x5893, 0x0FA5, 0x5894, 0x5894, 0x2649, 0x5898, 0x5898, 0x263B,
+    0x5899, 0x5899, 0x4618, 0x589A, 0x589A, 0x4903, 0x589C, 0x589C, 0x1125,
+    0x589D, 0x589D, 0x28A1, 0x589E, 0x589E, 0x1123, 0x589F, 0x589F, 0x1122,
+    0x58A0, 0x58A0, 0x28A3, 0x58A1, 0x58A1, 0x28A8, 0x58A3, 0x58A3, 0x28A4,
+    0x58A5, 0x58A5, 0x28A7, 0x58A6, 0x58A6, 0x1128, 0x58A7, 0x58A7, 0x3EEB,
+    0x58A8, 0x58A8, 0x1288, 0x58A9, 0x58A9, 0x1127, 0x58AA, 0x58AA, 0x40D7,
+    0x58AB, 0x58AB, 0x28A0, 0x58AC, 0x58AC, 0x28A6, 0x58AE, 0x58AE, 0x1126,
+    0x58AF, 0x58AF, 0x28A5, 0x58B0, 0x58B0, 0x37A4, 0x58B1, 0x58B1, 0x28A2,
+    0x58B3, 0x58B3, 0x1124, 0x58B5, 0x58B5, 0x4840, 0x58B6, 0x58B6, 0x3DFD,
+    0x58BA, 0x58BA, 0x2B18, 0x58BB, 0x58BB, 0x36EB, 0x58BC, 0x58BC, 0x2B1A,
+    0x58BD, 0x58BD, 0x2B15, 0x58BE, 0x58BE, 0x12A4, 0x58BF, 0x58BF, 0x2B17,
+    0x58C1, 0x58C1, 0x12A3, 0x58C2, 0x58C2, 0x2B19, 0x58C5, 0x58C5, 0x12A6,
+    0x58C6, 0x58C6, 0x2B1B, 0x58C7, 0x58C7, 0x12A5, 0x58C8, 0x58C8, 0x2B14,
+    0x58C9, 0x58C9, 0x2B16, 0x58CB, 0x58CB, 0x3A09, 0x58CE, 0x58CE, 0x13C2,
+    0x58CF, 0x58CF, 0x2D4D, 0x58D1, 0x58D1, 0x13C1, 0x58D2, 0x58D2, 0x2D4E,
+    0x58D3, 0x58D3, 0x13C0, 0x58D4, 0x58D4, 0x2D4C, 0x58D5, 0x58D5, 0x13BF,
+    0x58D6, 0x58D6, 0x2D4B, 0x58D8, 0x58D8, 0x14CD, 0x58D9, 0x58D9, 0x14CC,
+    0x58DA, 0x58DA, 0x3085, 0x58DB, 0x58DB, 0x3087, 0x58DC, 0x58DC, 0x40DA,
+    0x58DD, 0x58DD, 0x3086, 0x58DE, 0x58DF, 0x1578, 0x58E0, 0x58E0, 0x40D9,
+    0x58E2, 0x58E2, 0x157A, 0x58E3, 0x58E3, 0x31CB, 0x58E4, 0x58E4, 0x160E,
+    0x58E7, 0x58E7, 0x3411, 0x58E8, 0x58E8, 0x3410, 0x58E9, 0x58E9, 0x1720,
+    0x58EB, 0x58EB, 0x027B, 0x58EC, 0x58EC, 0x02C1, 0x58EF, 0x58EF, 0x046F,
+    0x58F0, 0x58F0, 0x4549, 0x58F2, 0x58F2, 0x3D68, 0x58F3, 0x58F3, 0x3C7A,
+    0x58F4, 0x58F4, 0x1A9B, 0x58F9, 0x58FA, 0x0C20, 0x58FB, 0x58FB, 0x40DC,
+    0x58FC, 0x58FC, 0x23A2, 0x58FD, 0x58FD, 0x0FAA, 0x58FE, 0x58FE, 0x264B,
+    0x58FF, 0x58FF, 0x28A9, 0x5902, 0x5902, 0x0224, 0x5903, 0x5903, 0x1785,
+    0x5904, 0x5904, 0x454A, 0x5905, 0x5905, 0x4599, 0x5906, 0x5906, 0x1857,
+    0x5907, 0x5907, 0x454B, 0x590A, 0x590A, 0x0224, 0x590C, 0x590C, 0x1944,
+    0x590D, 0x590D, 0x1A9C, 0x590E, 0x590E, 0x1C6C, 0x590F, 0x590F, 0x0880,
+    0x5911, 0x5911, 0x4274, 0x5912, 0x5912, 0x3088, 0x5914, 0x5914, 0x166D,
+    0x5915, 0x5915, 0x027C, 0x5916, 0x5916, 0x032E, 0x5917, 0x5917, 0x179C,
+    0x5919, 0x591A, 0x03B4, 0x591C, 0x591C, 0x0581, 0x591F, 0x591F, 0x40E3,
+    0x5920, 0x5920, 0x0A44, 0x5922, 0x5922, 0x0FAC, 0x5924, 0x5924, 0x0FAD,
+    0x5925, 0x5925, 0x0FAB, 0x5927, 0x5927, 0x027D, 0x5929, 0x5929, 0x02C2,
+    0x592A, 0x592A, 0x02C4, 0x592B, 0x592B, 0x02C3, 0x592C, 0x592C, 0x1786,
+    0x592D, 0x592D, 0x02C5, 0x592E, 0x592E, 0x032F, 0x592F, 0x592F, 0x179D,
+    0x5931, 0x5931, 0x0330, 0x5932, 0x5932, 0x454C, 0x5934, 0x5934, 0x454D,
+    0x5937, 0x5938, 0x03B6, 0x593C, 0x593C, 0x17D4, 0x593E, 0x593E, 0x0470,
+    0x5940, 0x5940, 0x1858, 0x5944, 0x5944, 0x0585, 0x5945, 0x5945, 0x1945,
+    0x5947, 0x5948, 0x0583, 0x5949, 0x5949, 0x0582, 0x594A, 0x594A, 0x1C6D,
+    0x594E, 0x594E, 0x06F2, 0x594F, 0x594F, 0x06F1, 0x5950, 0x5950, 0x06F3,
+    0x5951, 0x5951, 0x06F0, 0x5953, 0x5953, 0x1A9D, 0x5954, 0x5954, 0x0586,
+    0x5955, 0x5955, 0x06EF, 0x5957, 0x5958, 0x0881, 0x595A, 0x595A, 0x0883,
+    0x595C, 0x595C, 0x1E95, 0x5960, 0x5960, 0x0C22, 0x5961, 0x5961, 0x20EF,
+    0x5962, 0x5962, 0x0A45, 0x5965, 0x5965, 0x4852, 0x5967, 0x5967, 0x0DF3,
+    0x5969, 0x5969, 0x0FAF, 0x596A, 0x596A, 0x0FAE, 0x596B, 0x596B, 0x264C,
+    0x596D, 0x596D, 0x1129, 0x596E, 0x596E, 0x12A7, 0x5970, 0x5970, 0x2F17,
+    0x5971, 0x5971, 0x337B, 0x5972, 0x5972, 0x3412, 0x5973, 0x5973, 0x027E,
+    0x5974, 0x5974, 0x0331, 0x5975, 0x5975, 0x3E6A, 0x5976, 0x5976, 0x0332,
+    0x5977, 0x5977, 0x17DA, 0x5978, 0x5978, 0x03B9, 0x5979, 0x5979, 0x03BC,
+    0x597B, 0x597B, 0x17D8, 0x597C, 0x597C, 0x17D6, 0x597D, 0x597D, 0x03BB,
+    0x597E, 0x597E, 0x17D9, 0x597F, 0x597F, 0x17DB, 0x5980, 0x5980, 0x17D5,
+    0x5981, 0x5981, 0x03BE, 0x5982, 0x5982, 0x03BD, 0x5983, 0x5983, 0x03BA,
+    0x5984, 0x5984, 0x03B8, 0x5985, 0x5985, 0x17D7, 0x5989, 0x5989, 0x3D30,
+    0x598A, 0x598A, 0x047B, 0x598D, 0x598D, 0x0478, 0x598E, 0x598E, 0x185D,
+    0x598F, 0x598F, 0x1860, 0x5990, 0x5990, 0x185F, 0x5992, 0x5992, 0x0472,
+    0x5993, 0x5993, 0x047A, 0x5994, 0x5994, 0x3C99, 0x5996, 0x5996, 0x0477,
+    0x5997, 0x5997, 0x185C, 0x5998, 0x5998, 0x185A, 0x5999, 0x5999, 0x0476,
+    0x599A, 0x599A, 0x3BB0, 0x599D, 0x599D, 0x0471, 0x599E, 0x599E, 0x0474,
+    0x599F, 0x599F, 0x3DAF, 0x59A0, 0x59A0, 0x185B, 0x59A1, 0x59A1, 0x1862,
+    0x59A2, 0x59A2, 0x185E, 0x59A3, 0x59A3, 0x0475, 0x59A4, 0x59A4, 0x0479,
+    0x59A5, 0x59A5, 0x047C, 0x59A6, 0x59A6, 0x1859, 0x59A7, 0x59A7, 0x1861,
+    0x59A8, 0x59A8, 0x0473, 0x59AC, 0x59AC, 0x3D81, 0x59AE, 0x59AE, 0x058B,
+    0x59AF, 0x59AF, 0x0593, 0x59B0, 0x59B0, 0x3CD8, 0x59B1, 0x59B1, 0x1951,
+    0x59B2, 0x59B2, 0x194A, 0x59B3, 0x59B3, 0x0594, 0x59B4, 0x59B4, 0x1955,
+    0x59B5, 0x59B5, 0x1946, 0x59B6, 0x59B6, 0x194D, 0x59B7, 0x59B7, 0x3F2D,
+    0x59B8, 0x59B8, 0x3A10, 0x59B9, 0x59B9, 0x058A, 0x59BA, 0x59BA, 0x1947,
+    0x59BB, 0x59BB, 0x0588, 0x59BC, 0x59BC, 0x194E, 0x59BD, 0x59BD, 0x1952,
+    0x59BE, 0x59BE, 0x0587, 0x59C0, 0x59C0, 0x1953, 0x59C1, 0x59C1, 0x194C,
+    0x59C3, 0x59C3, 0x194F, 0x59C4, 0x59C4, 0x3D04, 0x59C5, 0x59C5, 0x0596,
+    0x59C6, 0x59C6, 0x058D, 0x59C7, 0x59C7, 0x1956, 0x59C8, 0x59C8, 0x1954,
+    0x59C9, 0x59C9, 0x40EC, 0x59CA, 0x59CA, 0x0592, 0x59CB, 0x59CB, 0x0590,
+    0x59CC, 0x59CC, 0x194B, 0x59CD, 0x59CD, 0x058F, 0x59CE, 0x59CE, 0x1949,
+    0x59CF, 0x59CF, 0x1948, 0x59D0, 0x59D0, 0x058E, 0x59D1, 0x59D1, 0x058C,
+    0x59D2, 0x59D2, 0x0595, 0x59D3, 0x59D3, 0x0591, 0x59D4, 0x59D4, 0x0589,
+    0x59D6, 0x59D6, 0x1950, 0x59D8, 0x59D8, 0x06F5, 0x59D9, 0x59D9, 0x40F1,
+    0x59DA, 0x59DA, 0x06FC, 0x59DB, 0x59DB, 0x1AAB, 0x59DC, 0x59DC, 0x06F4,
+    0x59DD, 0x59DD, 0x1AA3, 0x59DE, 0x59DE, 0x1A9F, 0x59E0, 0x59E0, 0x1AAF,
+    0x59E1, 0x59E1, 0x1A9E, 0x59E3, 0x59E3, 0x06F7, 0x59E4, 0x59E4, 0x1AA8,
+    0x59E5, 0x59E5, 0x06FA, 0x59E6, 0x59E6, 0x06FD, 0x59E8, 0x59E8, 0x06F8,
+    0x59E9, 0x59E9, 0x1AAC, 0x59EA, 0x59EA, 0x06FB, 0x59EB, 0x59EB, 0x3D59,
+    0x59EC, 0x59EC, 0x088A, 0x59ED, 0x59ED, 0x1AB2, 0x59EE, 0x59EE, 0x1AA0,
+    0x59EF, 0x59EF, 0x3D38, 0x59F0, 0x59F0, 0x3BB2, 0x59F1, 0x59F1, 0x1AA2,
+    0x59F2, 0x59F2, 0x1AA9, 0x59F3, 0x59F3, 0x1AAD, 0x59F4, 0x59F4, 0x1AB1,
+    0x59F5, 0x59F5, 0x1AAE, 0x59F6, 0x59F6, 0x1AA7, 0x59F7, 0x59F7, 0x1AAA,
+    0x59F8, 0x59F8, 0x3E4A, 0x59F9, 0x59F9, 0x40F8, 0x59FA, 0x59FA, 0x1AA4,
+    0x59FB, 0x59FB, 0x06FF, 0x59FC, 0x59FC, 0x1AA6, 0x59FD, 0x59FD, 0x1AA5,
+    0x59FE, 0x59FE, 0x1AB0, 0x59FF, 0x59FF, 0x06F6, 0x5A00, 0x5A00, 0x1AA1,
+    0x5A01, 0x5A01, 0x06FE, 0x5A02, 0x5A02, 0x3B8D, 0x5A03, 0x5A03, 0x06F9,
+    0x5A09, 0x5A09, 0x0890, 0x5A0A, 0x5A0A, 0x1C75, 0x5A0B, 0x5A0B, 0x3C89,
+    0x5A0C, 0x5A0C, 0x088F, 0x5A0D, 0x5A0D, 0x3B38, 0x5A0F, 0x5A0F, 0x1C73,
+    0x5A11, 0x5A11, 0x0884, 0x5A12, 0x5A12, 0x3A13, 0x5A13, 0x5A13, 0x0889,
+    0x5A15, 0x5A15, 0x1C72, 0x5A16, 0x5A16, 0x1C6F, 0x5A17, 0x5A17, 0x1C74,
+    0x5A18, 0x5A18, 0x0885, 0x5A19, 0x5A19, 0x1C6E, 0x5A1B, 0x5A1B, 0x0888,
+    0x5A1C, 0x5A1C, 0x0886, 0x5A1E, 0x5A1E, 0x1C76, 0x5A1F, 0x5A1F, 0x0887,
+    0x5A20, 0x5A20, 0x088B, 0x5A21, 0x5A21, 0x3A1B, 0x5A23, 0x5A23, 0x088C,
+    0x5A24, 0x5A24, 0x40E8, 0x5A25, 0x5A25, 0x088E, 0x5A27, 0x5A27, 0x3DE1,
+    0x5A29, 0x5A29, 0x088D, 0x5A2A, 0x5A2A, 0x3B3B, 0x5A2B, 0x5A2B, 0x3D40,
+    0x5A2C, 0x5A2C, 0x3A0F, 0x5A2D, 0x5A2E, 0x1C70, 0x5A33, 0x5A33, 0x1C77,
+    0x5A35, 0x5A35, 0x1E9C, 0x5A36, 0x5A36, 0x0A46, 0x5A37, 0x5A37, 0x20FD,
+    0x5A38, 0x5A38, 0x1E9B, 0x5A39, 0x5A39, 0x1EAE, 0x5A3C, 0x5A3C, 0x0A4C,
+    0x5A3D, 0x5A3D, 0x3AC0, 0x5A3E, 0x5A3E, 0x1EAC, 0x5A40, 0x5A40, 0x0A4B,
+    0x5A41, 0x5A41, 0x0A47, 0x5A42, 0x5A42, 0x1EB5, 0x5A43, 0x5A43, 0x1EA5,
+    0x5A44, 0x5A44, 0x1EA8, 0x5A45, 0x5A45, 0x3917, 0x5A46, 0x5A46, 0x0A4F,
+    0x5A47, 0x5A47, 0x1EB2, 0x5A48, 0x5A48, 0x1EAA, 0x5A49, 0x5A49, 0x0A48,
+    0x5A4A, 0x5A4A, 0x0A50, 0x5A4C, 0x5A4C, 0x1EAF, 0x5A4D, 0x5A4D, 0x1EAD,
+    0x5A50, 0x5A50, 0x1E9E, 0x5A51, 0x5A51, 0x1EB3, 0x5A52, 0x5A52, 0x1EA7,
+    0x5A53, 0x5A53, 0x1EA2, 0x5A54, 0x5A54, 0x4603, 0x5A55, 0x5A55, 0x1E98,
+    0x5A56, 0x5A56, 0x1EB4, 0x5A57, 0x5A57, 0x1EA4, 0x5A58, 0x5A58, 0x1E97,
+    0x5A59, 0x5A59, 0x3B34, 0x5A5A, 0x5A5A, 0x0A4E, 0x5A5B, 0x5A5B, 0x1EA9,
+    0x5A5C, 0x5A5C, 0x1EB6, 0x5A5D, 0x5A5D, 0x1EA6, 0x5A5E, 0x5A5E, 0x1E9A,
+    0x5A5F, 0x5A5F, 0x1E9F, 0x5A60, 0x5A60, 0x1E96, 0x5A61, 0x5A61, 0x3D33,
+    0x5A62, 0x5A62, 0x0A4D, 0x5A63, 0x5A63, 0x40FB, 0x5A64, 0x5A64, 0x1EA3,
+    0x5A65, 0x5A65, 0x1EA0, 0x5A66, 0x5A66, 0x0A49, 0x5A67, 0x5A67, 0x1E99,
+    0x5A68, 0x5A68, 0x39B7, 0x5A69, 0x5A69, 0x1EB1, 0x5A6A, 0x5A6A, 0x0A4A,
+    0x5A6B, 0x5A6B, 0x3A42, 0x5A6C, 0x5A6C, 0x1EA1, 0x5A6D, 0x5A6D, 0x1E9D,
+    0x5A6E, 0x5A6E, 0x3D3F, 0x5A70, 0x5A70, 0x1EB0, 0x5A71, 0x5A71, 0x3D34,
+    0x5A77, 0x5A77, 0x0C23, 0x5A78, 0x5A78, 0x20F6, 0x5A79, 0x5A79, 0x3CE1,
+    0x5A7A, 0x5A7A, 0x20F3, 0x5A7B, 0x5A7B, 0x2104, 0x5A7C, 0x5A7C, 0x20F8,
+    0x5A7D, 0x5A7D, 0x2105, 0x5A7E, 0x5A7E, 0x3A11, 0x5A7F, 0x5A7F, 0x0C25,
+    0x5A81, 0x5A81, 0x3A1D, 0x5A82, 0x5A82, 0x3D31, 0x5A83, 0x5A83, 0x2101,
+    0x5A84, 0x5A84, 0x20FE, 0x5A86, 0x5A86, 0x3B81, 0x5A88, 0x5A88, 0x4263,
+    0x5A8A, 0x5A8A, 0x20FF, 0x5A8B, 0x5A8B, 0x2102, 0x5A8C, 0x5A8C, 0x2106,
+    0x5A8E, 0x5A8E, 0x1EAB, 0x5A8F, 0x5A8F, 0x2108, 0x5A90, 0x5A90, 0x23B6,
+    0x5A91, 0x5A91, 0x4235, 0x5A92, 0x5A92, 0x0C26, 0x5A93, 0x5A93, 0x2109,
+    0x5A94, 0x5A94, 0x20F1, 0x5A95, 0x5A95, 0x20FB, 0x5A96, 0x5A96, 0x4100,
+    0x5A97, 0x5A97, 0x2100, 0x5A99, 0x5A99, 0x3A0A, 0x5A9A, 0x5A9A, 0x0C24,
+    0x5A9B, 0x5A9B, 0x0C27, 0x5A9C, 0x5A9C, 0x2107, 0x5A9D, 0x5A9D, 0x210A,
+    0x5A9E, 0x5A9E, 0x20F5, 0x5A9F, 0x5A9F, 0x20F2, 0x5AA0, 0x5AA0, 0x4172,
+    0x5AA1, 0x5AA1, 0x3CDC, 0x5AA2, 0x5AA2, 0x20F4, 0x5AA5, 0x5AA5, 0x20F9,
+    0x5AA6, 0x5AA6, 0x20F7, 0x5AA7, 0x5AA7, 0x0C28, 0x5AA9, 0x5AA9, 0x2103,
+    0x5AAB, 0x5AAB, 0x40FA, 0x5AAC, 0x5AAC, 0x20FA, 0x5AAE, 0x5AAE, 0x20FC,
+    0x5AAF, 0x5AAF, 0x20F0, 0x5AB0, 0x5AB0, 0x23AA, 0x5AB1, 0x5AB1, 0x23A8,
+    0x5AB2, 0x5AB2, 0x0DFC, 0x5AB3, 0x5AB3, 0x0DFA, 0x5AB4, 0x5AB4, 0x23B2,
+    0x5AB5, 0x5AB5, 0x23A9, 0x5AB6, 0x5AB6, 0x23B3, 0x5AB7, 0x5AB7, 0x23AF,
+    0x5AB8, 0x5AB8, 0x23A7, 0x5AB9, 0x5AB9, 0x23B5, 0x5ABA, 0x5ABA, 0x23A6,
+    0x5ABB, 0x5ABB, 0x23AD, 0x5ABC, 0x5ABC, 0x0DF9, 0x5ABD, 0x5ABD, 0x0DF8,
+    0x5ABE, 0x5ABE, 0x0DF7, 0x5ABF, 0x5ABF, 0x23AB, 0x5AC0, 0x5AC0, 0x23B0,
+    0x5AC1, 0x5AC1, 0x0DF4, 0x5AC2, 0x5AC2, 0x0DFB, 0x5AC3, 0x5AC3, 0x3896,
+    0x5AC4, 0x5AC4, 0x23A4, 0x5AC6, 0x5AC6, 0x23AE, 0x5AC7, 0x5AC7, 0x23A3,
+    0x5AC8, 0x5AC8, 0x23AC, 0x5AC9, 0x5AC9, 0x0DF5, 0x5ACA, 0x5ACA, 0x23B1,
+    0x5ACB, 0x5ACB, 0x23A5, 0x5ACC, 0x5ACC, 0x0DF6, 0x5ACD, 0x5ACD, 0x23B4,
+    0x5ACE, 0x5ACE, 0x3C88, 0x5ACF, 0x5ACF, 0x43B5, 0x5AD3, 0x5AD3, 0x4102,
+    0x5AD5, 0x5AD5, 0x2650, 0x5AD6, 0x5AD6, 0x0FB4, 0x5AD7, 0x5AD7, 0x0FB3,
+    0x5AD8, 0x5AD8, 0x0FB5, 0x5AD9, 0x5AD9, 0x265C, 0x5ADA, 0x5ADA, 0x2652,
+    0x5ADB, 0x5ADB, 0x2658, 0x5ADC, 0x5ADC, 0x264D, 0x5ADD, 0x5ADD, 0x265B,
+    0x5ADE, 0x5ADE, 0x265A, 0x5ADF, 0x5ADF, 0x265E, 0x5AE0, 0x5AE0, 0x2657,
+    0x5AE1, 0x5AE1, 0x0FB0, 0x5AE2, 0x5AE2, 0x2656, 0x5AE3, 0x5AE3, 0x0FB6,
+    0x5AE4, 0x5AE4, 0x3B86, 0x5AE5, 0x5AE5, 0x264F, 0x5AE6, 0x5AE6, 0x0FB1,
+    0x5AE8, 0x5AE8, 0x265D, 0x5AE9, 0x5AE9, 0x0FB2, 0x5AEA, 0x5AEA, 0x2651,
+    0x5AEB, 0x5AEB, 0x2654, 0x5AEC, 0x5AEC, 0x2659, 0x5AED, 0x5AED, 0x2653,
+    0x5AEE, 0x5AEE, 0x264E, 0x5AF0, 0x5AF0, 0x3EE7, 0x5AF2, 0x5AF2, 0x37F5,
+    0x5AF3, 0x5AF3, 0x2655, 0x5AF4, 0x5AF4, 0x28AB, 0x5AF5, 0x5AF5, 0x112D,
+    0x5AF6, 0x5AF6, 0x28AE, 0x5AF7, 0x5AF7, 0x28AD, 0x5AF8, 0x5AF8, 0x28B0,
+    0x5AF9, 0x5AF9, 0x28B2, 0x5AFA, 0x5AFA, 0x36EE, 0x5AFB, 0x5AFB, 0x112B,
+    0x5AFD, 0x5AFD, 0x28AC, 0x5AFE, 0x5AFE, 0x3C1D, 0x5AFF, 0x5AFF, 0x28AA,
+    0x5B01, 0x5B01, 0x28B3, 0x5B02, 0x5B02, 0x28B1, 0x5B03, 0x5B03, 0x28AF,
+    0x5B05, 0x5B05, 0x28B5, 0x5B07, 0x5B07, 0x28B4, 0x5B08, 0x5B08, 0x112F,
+    0x5B09, 0x5B09, 0x112A, 0x5B0B, 0x5B0B, 0x112C, 0x5B0C, 0x5B0C, 0x112E,
+    0x5B0D, 0x5B0D, 0x48FF, 0x5B0F, 0x5B0F, 0x28B6, 0x5B10, 0x5B10, 0x2B22,
+    0x5B11, 0x5B11, 0x3BF6, 0x5B13, 0x5B13, 0x2B21, 0x5B14, 0x5B14, 0x2B20,
+    0x5B16, 0x5B16, 0x2B23, 0x5B17, 0x5B17, 0x2B1C, 0x5B19, 0x5B19, 0x2B1D,
+    0x5B1A, 0x5B1A, 0x2B25, 0x5B1B, 0x5B1B, 0x2B1E, 0x5B1D, 0x5B1D, 0x12A8,
+    0x5B1E, 0x5B1E, 0x2B27, 0x5B1F, 0x5B1F, 0x4941, 0x5B20, 0x5B20, 0x2B26,
+    0x5B21, 0x5B21, 0x2B1F, 0x5B23, 0x5B23, 0x2D52, 0x5B24, 0x5B24, 0x13C5,
+    0x5B25, 0x5B25, 0x2D50, 0x5B26, 0x5B26, 0x2D55, 0x5B27, 0x5B27, 0x2D54,
+    0x5B28, 0x5B28, 0x2B24, 0x5B2A, 0x5B2A, 0x13C4, 0x5B2B, 0x5B2B, 0x3B84,
+    0x5B2C, 0x5B2C, 0x2D53, 0x5B2D, 0x5B2D, 0x2D4F, 0x5B2E, 0x5B2E, 0x2D57,
+    0x5B2F, 0x5B2F, 0x2D56, 0x5B30, 0x5B30, 0x13C3, 0x5B32, 0x5B32, 0x2D51,
+    0x5B34, 0x5B34, 0x12A9, 0x5B38, 0x5B38, 0x14CE, 0x5B3C, 0x5B3C, 0x2F18,
+    0x5B3D, 0x5B3F, 0x3089, 0x5B40, 0x5B40, 0x160F, 0x5B41, 0x5B41, 0x38C8,
+    0x5B43, 0x5B43, 0x1610, 0x5B44, 0x5B44, 0x3A44, 0x5B45, 0x5B45, 0x31CC,
+    0x5B46, 0x5B46, 0x42B2, 0x5B47, 0x5B47, 0x32CD, 0x5B48, 0x5B48, 0x32CC,
+    0x5B4A, 0x5B4A, 0x38CD, 0x5B4B, 0x5B4C, 0x337C, 0x5B4D, 0x5B4D, 0x3413,
+    0x5B4E, 0x5B4E, 0x3482, 0x5B4F, 0x5B4F, 0x3A31, 0x5B50, 0x5B51, 0x027F,
+    0x5B53, 0x5B53, 0x0281, 0x5B54, 0x5B54, 0x02C6, 0x5B55, 0x5B55, 0x0333,
+    0x5B56, 0x5B56, 0x17DC, 0x5B57, 0x5B58, 0x03BF, 0x5B5A, 0x5B5B, 0x047F,
+    0x5B5C, 0x5B5C, 0x047E, 0x5B5D, 0x5B5D, 0x047D, 0x5B5F, 0x5B5F, 0x0597,
+    0x5B62, 0x5B62, 0x1957, 0x5B63, 0x5B63, 0x0599, 0x5B64, 0x5B64, 0x0598,
+    0x5B65, 0x5B65, 0x1958, 0x5B66, 0x5B66, 0x454E, 0x5B68, 0x5B68, 0x461D,
+    0x5B69, 0x5B69, 0x0700, 0x5B6B, 0x5B6B, 0x0891, 0x5B6C, 0x5B6C, 0x1C78,
+    0x5B6D, 0x5B6D, 0x3E5F, 0x5B6E, 0x5B6E, 0x1EB8, 0x5B70, 0x5B70, 0x0A51,
+    0x5B71, 0x5B71, 0x0C2A, 0x5B72, 0x5B72, 0x1EB7, 0x5B73, 0x5B73, 0x0C29,
+    0x5B74, 0x5B74, 0x3732, 0x5B75, 0x5B75, 0x0FB7, 0x5B76, 0x5B76, 0x410A,
+    0x5B77, 0x5B77, 0x265F, 0x5B78, 0x5B78, 0x12AA, 0x5B7A, 0x5B7A, 0x13C6,
+    0x5B7B, 0x5B7B, 0x2D58, 0x5B7C, 0x5B7C, 0x410C, 0x5B7D, 0x5B7D, 0x1611,
+    0x5B7F, 0x5B7F, 0x16C0, 0x5B80, 0x5B80, 0x0225, 0x5B81, 0x5B81, 0x179E,
+    0x5B82, 0x5B82, 0x4044, 0x5B83, 0x5B83, 0x0334, 0x5B84, 0x5B84, 0x179F,
+    0x5B85, 0x5B85, 0x03C3, 0x5B87, 0x5B88, 0x03C1, 0x5B89, 0x5B89, 0x03C4,
+    0x5B8B, 0x5B8B, 0x0482, 0x5B8C, 0x5B8C, 0x0481, 0x5B8E, 0x5B8E, 0x1863,
+    0x5B8F, 0x5B8F, 0x0483, 0x5B90, 0x5B90, 0x48E9, 0x5B92, 0x5B92, 0x1864,
+    0x5B93, 0x5B93, 0x1959, 0x5B95, 0x5B95, 0x195A, 0x5B97, 0x5B97, 0x059A,
+    0x5B98, 0x5B98, 0x059C, 0x5B99, 0x5B99, 0x059E, 0x5B9A, 0x5B9A, 0x059B,
+    0x5B9B, 0x5B9B, 0x059F, 0x5B9C, 0x5B9C, 0x059D, 0x5B9D, 0x5B9D, 0x4116,
+    0x5B9E, 0x5B9F, 0x454F, 0x5BA2, 0x5BA2, 0x0704, 0x5BA3, 0x5BA3, 0x0701,
+    0x5BA4, 0x5BA4, 0x0703, 0x5BA5, 0x5BA5, 0x0705, 0x5BA6, 0x5BA6, 0x0702,
+    0x5BA7, 0x5BA7, 0x1C79, 0x5BA8, 0x5BA8, 0x1AB3, 0x5BAA, 0x5BAA, 0x417B,
+    0x5BAC, 0x5BAC, 0x1C7B, 0x5BAD, 0x5BAD, 0x1C7A, 0x5BAE, 0x5BAE, 0x0897,
+    0x5BB0, 0x5BB0, 0x0893, 0x5BB3, 0x5BB3, 0x0894, 0x5BB4, 0x5BB4, 0x0896,
+    0x5BB5, 0x5BB5, 0x0898, 0x5BB6, 0x5BB6, 0x0895, 0x5BB8, 0x5BB8, 0x089A,
+    0x5BB9, 0x5BB9, 0x0899, 0x5BBF, 0x5BBF, 0x0A56, 0x5BC0, 0x5BC0, 0x1EBA,
+    0x5BC1, 0x5BC1, 0x1EB9, 0x5BC2, 0x5BC2, 0x0A55, 0x5BC3, 0x5BC3, 0x3F25,
+    0x5BC4, 0x5BC4, 0x0A54, 0x5BC5, 0x5BC5, 0x0A53, 0x5BC6, 0x5BC6, 0x0A57,
+    0x5BC7, 0x5BC7, 0x0A52, 0x5BCA, 0x5BCA, 0x2110, 0x5BCB, 0x5BCB, 0x210D,
+    0x5BCC, 0x5BCC, 0x0C2C, 0x5BCD, 0x5BCD, 0x210C, 0x5BCE, 0x5BCE, 0x2111,
+    0x5BD0, 0x5BD0, 0x0C2E, 0x5BD1, 0x5BD1, 0x210F, 0x5BD2, 0x5BD2, 0x0C2B,
+    0x5BD3, 0x5BD3, 0x0C2D, 0x5BD4, 0x5BD4, 0x210E, 0x5BD5, 0x5BD5, 0x4111,
+    0x5BD6, 0x5BD6, 0x23B7, 0x5BD7, 0x5BD7, 0x42BB, 0x5BD8, 0x5BD9, 0x23B8,
+    0x5BDE, 0x5BDE, 0x0FB8, 0x5BDF, 0x5BDF, 0x0FC0, 0x5BE0, 0x5BE0, 0x2660,
+    0x5BE1, 0x5BE1, 0x0FBA, 0x5BE2, 0x5BE2, 0x0FBE, 0x5BE3, 0x5BE3, 0x2661,
+    0x5BE4, 0x5BE4, 0x0FBF, 0x5BE5, 0x5BE6, 0x0FBB, 0x5BE7, 0x5BE7, 0x0FB9,
+    0x5BE8, 0x5BE8, 0x0FBD, 0x5BE9, 0x5BE9, 0x1132, 0x5BEA, 0x5BEA, 0x210B,
+    0x5BEB, 0x5BEB, 0x1133, 0x5BEC, 0x5BEC, 0x1131, 0x5BEE, 0x5BEE, 0x1130,
+    0x5BEF, 0x5BEF, 0x2B28, 0x5BF0, 0x5BF0, 0x12AB, 0x5BF1, 0x5BF2, 0x2D59,
+    0x5BF3, 0x5BF3, 0x4115, 0x5BF5, 0x5BF5, 0x157B, 0x5BF6, 0x5BF6, 0x1612,
+    0x5BF8, 0x5BF8, 0x0282, 0x5BFA, 0x5BFA, 0x03C5, 0x5BFF, 0x5BFF, 0x40DD,
+    0x5C01, 0x5C01, 0x0706, 0x5C03, 0x5C03, 0x1C7C, 0x5C04, 0x5C04, 0x089B,
+    0x5C05, 0x5C05, 0x4118, 0x5C07, 0x5C07, 0x0A5A, 0x5C08, 0x5C08, 0x0A59,
+    0x5C09, 0x5C09, 0x0A58, 0x5C0A, 0x5C0B, 0x0C2F, 0x5C0C, 0x5C0C, 0x2112,
+    0x5C0D, 0x5C0D, 0x0FC1, 0x5C0E, 0x5C0E, 0x12AC, 0x5C0F, 0x5C0F, 0x0283,
+    0x5C10, 0x5C10, 0x1787, 0x5C11, 0x5C11, 0x02C7, 0x5C12, 0x5C12, 0x17A0,
+    0x5C13, 0x5C13, 0x411A, 0x5C14, 0x5C14, 0x411C, 0x5C15, 0x5C15, 0x17DD,
+    0x5C16, 0x5C16, 0x03C6, 0x5C1A, 0x5C1A, 0x05A0, 0x5C1C, 0x5C1C, 0x45EA,
+    0x5C1E, 0x5C1E, 0x3A29, 0x5C1F, 0x5C1F, 0x23BA, 0x5C20, 0x5C20, 0x3D89,
+    0x5C22, 0x5C22, 0x0284, 0x5C23, 0x5C23, 0x44E8, 0x5C24, 0x5C24, 0x02C8,
+    0x5C25, 0x5C25, 0x17DE, 0x5C28, 0x5C28, 0x1865, 0x5C2A, 0x5C2A, 0x1866,
+    0x5C2C, 0x5C2C, 0x0484, 0x5C30, 0x5C30, 0x2113, 0x5C31, 0x5C31, 0x0C31,
+    0x5C33, 0x5C33, 0x23BB, 0x5C37, 0x5C37, 0x13C7, 0x5C38, 0x5C38, 0x0285,
+    0x5C39, 0x5C39, 0x0299, 0x5C3A, 0x5C3A, 0x02C9, 0x5C3B, 0x5C3B, 0x17A1,
+    0x5C3C, 0x5C3C, 0x0335, 0x5C3E, 0x5C3E, 0x0488, 0x5C3F, 0x5C3F, 0x0487,
+    0x5C40, 0x5C41, 0x0485, 0x5C44, 0x5C44, 0x195B, 0x5C45, 0x5C46, 0x05A2,
+    0x5C47, 0x5C47, 0x195C, 0x5C48, 0x5C48, 0x05A1, 0x5C49, 0x5C49, 0x411F,
+    0x5C4A, 0x5C4A, 0x3F5C, 0x5C4B, 0x5C4B, 0x070A, 0x5C4C, 0x5C4C, 0x1AB4,
+    0x5C4D, 0x5C4D, 0x0709, 0x5C4E, 0x5C4F, 0x0707, 0x5C50, 0x5C50, 0x089E,
+    0x5C51, 0x5C51, 0x089C, 0x5C53, 0x5C53, 0x3F02, 0x5C54, 0x5C54, 0x1C7E,
+    0x5C55, 0x5C55, 0x089D, 0x5C56, 0x5C56, 0x1C7D, 0x5C58, 0x5C58, 0x0892,
+    0x5C59, 0x5C59, 0x1EBB, 0x5C5C, 0x5C5D, 0x0A5C, 0x5C5E, 0x5C5E, 0x3D67,
+    0x5C60, 0x5C60, 0x0A5B, 0x5C62, 0x5C62, 0x0FC2, 0x5C63, 0x5C63, 0x2662,
+    0x5C64, 0x5C65, 0x1134, 0x5C67, 0x5C67, 0x28B7, 0x5C68, 0x5C68, 0x13C8,
+    0x5C69, 0x5C6A, 0x2F19, 0x5C6C, 0x5C6C, 0x166E, 0x5C6D, 0x5C6D, 0x3483,
+    0x5C6E, 0x5C6E, 0x1776, 0x5C6F, 0x5C6F, 0x02CA, 0x5C71, 0x5C71, 0x0286,
+    0x5C73, 0x5C73, 0x17A3, 0x5C74, 0x5C74, 0x17A2, 0x5C79, 0x5C79, 0x03C7,
+    0x5C7A, 0x5C7B, 0x17E0, 0x5C7C, 0x5C7C, 0x17DF, 0x5C7E, 0x5C7E, 0x17E2,
+    0x5C85, 0x5C85, 0x4121, 0x5C86, 0x5C86, 0x186E, 0x5C88, 0x5C88, 0x1869,
+    0x5C89, 0x5C89, 0x186B, 0x5C8A, 0x5C8A, 0x186D, 0x5C8B, 0x5C8B, 0x186A,
+    0x5C8C, 0x5C8C, 0x048C, 0x5C8D, 0x5C8D, 0x1867, 0x5C8F, 0x5C8F, 0x1868,
+    0x5C90, 0x5C91, 0x0489, 0x5C92, 0x5C92, 0x186C, 0x5C93, 0x5C93, 0x186F,
+    0x5C94, 0x5C94, 0x048B, 0x5C95, 0x5C95, 0x1870, 0x5C99, 0x5C99, 0x468C,
+    0x5C9A, 0x5C9A, 0x4551, 0x5C9C, 0x5C9C, 0x495A, 0x5C9D, 0x5C9D, 0x196A,
+    0x5C9E, 0x5C9E, 0x3A2A, 0x5C9F, 0x5C9F, 0x1964, 0x5CA0, 0x5CA0, 0x195F,
+    0x5CA1, 0x5CA1, 0x05A5, 0x5CA2, 0x5CA2, 0x1967, 0x5CA3, 0x5CA3, 0x1965,
+    0x5CA4, 0x5CA4, 0x195E, 0x5CA5, 0x5CA5, 0x196B, 0x5CA6, 0x5CA6, 0x196E,
+    0x5CA7, 0x5CA7, 0x1969, 0x5CA8, 0x5CA8, 0x1962, 0x5CA9, 0x5CA9, 0x05A7,
+    0x5CAA, 0x5CAA, 0x1968, 0x5CAB, 0x5CAB, 0x05A8, 0x5CAC, 0x5CAC, 0x1963,
+    0x5CAD, 0x5CAD, 0x1966, 0x5CAE, 0x5CAE, 0x195D, 0x5CAF, 0x5CAF, 0x1961,
+    0x5CB0, 0x5CB0, 0x196D, 0x5CB1, 0x5CB1, 0x05A9, 0x5CB3, 0x5CB3, 0x05AA,
+    0x5CB5, 0x5CB5, 0x1960, 0x5CB6, 0x5CB6, 0x196C, 0x5CB7, 0x5CB7, 0x05A4,
+    0x5CB8, 0x5CB8, 0x05A6, 0x5CBA, 0x5CBA, 0x412B, 0x5CC1, 0x5CC1, 0x43B8,
+    0x5CC2, 0x5CC2, 0x3D4C, 0x5CC6, 0x5CC6, 0x1AC5, 0x5CC7, 0x5CC7, 0x1ABE,
+    0x5CC8, 0x5CC8, 0x1AC4, 0x5CC9, 0x5CC9, 0x1ABD, 0x5CCA, 0x5CCA, 0x1ABF,
+    0x5CCB, 0x5CCB, 0x1AB9, 0x5CCC, 0x5CCC, 0x1AB7, 0x5CCE, 0x5CCE, 0x1AC6,
+    0x5CCF, 0x5CCF, 0x1AC3, 0x5CD0, 0x5CD0, 0x1AB5, 0x5CD1, 0x5CD1, 0x3F13,
+    0x5CD2, 0x5CD2, 0x070C, 0x5CD3, 0x5CD4, 0x1AC1, 0x5CD6, 0x5CD6, 0x1AC0,
+    0x5CD7, 0x5CD7, 0x1AB8, 0x5CD8, 0x5CD8, 0x1AB6, 0x5CD9, 0x5CD9, 0x070B,
+    0x5CDA, 0x5CDA, 0x1ABC, 0x5CDB, 0x5CDB, 0x1ABA, 0x5CDE, 0x5CDE, 0x1ABB,
+    0x5CDF, 0x5CDF, 0x1AC7, 0x5CE5, 0x5CE5, 0x4637, 0x5CE8, 0x5CE8, 0x08A3,
+    0x5CE9, 0x5CE9, 0x4122, 0x5CEA, 0x5CEA, 0x08A2, 0x5CEC, 0x5CEC, 0x1C7F,
+    0x5CED, 0x5CED, 0x089F, 0x5CEE, 0x5CEE, 0x1C81, 0x5CEF, 0x5CEF, 0x4123,
+    0x5CF0, 0x5CF0, 0x08A4, 0x5CF1, 0x5CF1, 0x1C82, 0x5CF4, 0x5CF4, 0x08A7,
+    0x5CF6, 0x5CF6, 0x08A5, 0x5CF7, 0x5CF7, 0x1C83, 0x5CF8, 0x5CF8, 0x1AC8,
+    0x5CF9, 0x5CF9, 0x1C85, 0x5CFB, 0x5CFB, 0x08A1, 0x5CFD, 0x5CFD, 0x08A0,
+    0x5CFF, 0x5CFF, 0x1C80, 0x5D00, 0x5D00, 0x1C84, 0x5D01, 0x5D01, 0x08A6,
+    0x5D06, 0x5D06, 0x0A5F, 0x5D07, 0x5D07, 0x0A5E, 0x5D0B, 0x5D0B, 0x1EBD,
+    0x5D0C, 0x5D0C, 0x1EC1, 0x5D0D, 0x5D0D, 0x1EC3, 0x5D0E, 0x5D0E, 0x0A60,
+    0x5D0F, 0x5D0F, 0x1EC6, 0x5D10, 0x5D10, 0x4127, 0x5D11, 0x5D11, 0x0A64,
+    0x5D12, 0x5D12, 0x1EC8, 0x5D14, 0x5D14, 0x0A66, 0x5D15, 0x5D15, 0x43B9,
+    0x5D16, 0x5D16, 0x0A62, 0x5D17, 0x5D17, 0x0A6A, 0x5D18, 0x5D18, 0x4128,
+    0x5D19, 0x5D19, 0x0A67, 0x5D1A, 0x5D1A, 0x1EBF, 0x5D1B, 0x5D1B, 0x0A61,
+    0x5D1D, 0x5D1D, 0x1EBE, 0x5D1E, 0x5D1E, 0x1EBC, 0x5D1F, 0x5D1F, 0x1ECA,
+    0x5D20, 0x5D20, 0x1EC0, 0x5D22, 0x5D22, 0x0A63, 0x5D23, 0x5D23, 0x1EC9,
+    0x5D24, 0x5D24, 0x0A68, 0x5D25, 0x5D25, 0x1EC5, 0x5D26, 0x5D26, 0x1EC4,
+    0x5D27, 0x5D27, 0x0A69, 0x5D28, 0x5D28, 0x1EC2, 0x5D29, 0x5D29, 0x0A65,
+    0x5D2C, 0x5D2C, 0x3DF7, 0x5D2E, 0x5D2E, 0x1ECB, 0x5D2F, 0x5D2F, 0x46D3,
+    0x5D30, 0x5D30, 0x1EC7, 0x5D31, 0x5D31, 0x2122, 0x5D32, 0x5D32, 0x2129,
+    0x5D33, 0x5D33, 0x211E, 0x5D34, 0x5D34, 0x0C34, 0x5D35, 0x5D35, 0x211A,
+    0x5D36, 0x5D36, 0x212A, 0x5D37, 0x5D37, 0x2114, 0x5D38, 0x5D38, 0x2127,
+    0x5D39, 0x5D39, 0x2125, 0x5D3A, 0x5D3A, 0x211F, 0x5D3C, 0x5D3C, 0x2128,
+    0x5D3D, 0x5D3D, 0x2121, 0x5D3E, 0x5D3E, 0x4629, 0x5D3F, 0x5D3F, 0x2119,
+    0x5D40, 0x5D40, 0x212B, 0x5D41, 0x5D41, 0x2117, 0x5D42, 0x5D42, 0x2124,
+    0x5D43, 0x5D43, 0x2115, 0x5D45, 0x5D45, 0x212C, 0x5D46, 0x5D46, 0x4129,
+    0x5D47, 0x5D47, 0x0C35, 0x5D48, 0x5D48, 0x462A, 0x5D49, 0x5D49, 0x2126,
+    0x5D4A, 0x5D4A, 0x23BE, 0x5D4B, 0x5D4B, 0x2118, 0x5D4C, 0x5D4C, 0x0C32,
+    0x5D4E, 0x5D4E, 0x211C, 0x5D50, 0x5D50, 0x0C33, 0x5D51, 0x5D51, 0x211B,
+    0x5D52, 0x5D52, 0x2120, 0x5D55, 0x5D55, 0x211D, 0x5D56, 0x5D56, 0x43BA,
+    0x5D57, 0x5D57, 0x3FCA, 0x5D59, 0x5D59, 0x2123, 0x5D5B, 0x5D5B, 0x3DD5,
+    0x5D5E, 0x5D5E, 0x23C2, 0x5D62, 0x5D62, 0x23C5, 0x5D63, 0x5D63, 0x23BD,
+    0x5D65, 0x5D65, 0x23BF, 0x5D67, 0x5D67, 0x23C4, 0x5D68, 0x5D68, 0x23C3,
+    0x5D69, 0x5D69, 0x0DFD, 0x5D6B, 0x5D6B, 0x2116, 0x5D6C, 0x5D6C, 0x23C1,
+    0x5D6F, 0x5D6F, 0x0DFE, 0x5D70, 0x5D70, 0x46E4, 0x5D71, 0x5D71, 0x23BC,
+    0x5D72, 0x5D72, 0x23C0, 0x5D74, 0x5D74, 0x3EEF, 0x5D77, 0x5D77, 0x2669,
+    0x5D79, 0x5D79, 0x2670, 0x5D7A, 0x5D7A, 0x2667, 0x5D7C, 0x5D7C, 0x266E,
+    0x5D7D, 0x5D7D, 0x2665, 0x5D7E, 0x5D7E, 0x266D, 0x5D7F, 0x5D7F, 0x2671,
+    0x5D80, 0x5D80, 0x2664, 0x5D81, 0x5D81, 0x2668, 0x5D82, 0x5D82, 0x2663,
+    0x5D84, 0x5D84, 0x0FC3, 0x5D85, 0x5D85, 0x3E34, 0x5D86, 0x5D86, 0x2666,
+    0x5D87, 0x5D87, 0x0FC4, 0x5D88, 0x5D88, 0x266C, 0x5D89, 0x5D89, 0x266B,
+    0x5D8A, 0x5D8A, 0x266A, 0x5D8B, 0x5D8B, 0x4124, 0x5D8D, 0x5D8D, 0x266F,
+    0x5D8E, 0x5D8E, 0x3F0C, 0x5D92, 0x5D92, 0x28BB, 0x5D93, 0x5D93, 0x28BD,
+    0x5D94, 0x5D94, 0x1137, 0x5D95, 0x5D95, 0x28BE, 0x5D97, 0x5D97, 0x28B9,
+    0x5D99, 0x5D99, 0x28B8, 0x5D9A, 0x5D9A, 0x28C2, 0x5D9C, 0x5D9C, 0x28C0,
+    0x5D9D, 0x5D9D, 0x1136, 0x5D9E, 0x5D9E, 0x28C3, 0x5D9F, 0x5D9F, 0x28BA,
+    0x5DA0, 0x5DA0, 0x28BF, 0x5DA1, 0x5DA1, 0x28C1, 0x5DA2, 0x5DA2, 0x28BC,
+    0x5DA4, 0x5DA4, 0x462D, 0x5DA7, 0x5DA7, 0x2B2C, 0x5DA8, 0x5DA8, 0x2B31,
+    0x5DA9, 0x5DA9, 0x2B2B, 0x5DAA, 0x5DAA, 0x2B30, 0x5DAB, 0x5DAB, 0x3E39,
+    0x5DAC, 0x5DAC, 0x2B29, 0x5DAD, 0x5DAD, 0x2B33, 0x5DAE, 0x5DAE, 0x2B2F,
+    0x5DAF, 0x5DAF, 0x2B34, 0x5DB0, 0x5DB0, 0x2B2E, 0x5DB1, 0x5DB1, 0x2B2A,
+    0x5DB2, 0x5DB2, 0x2B32, 0x5DB4, 0x5DB4, 0x2B35, 0x5DB5, 0x5DB5, 0x2B2D,
+    0x5DB6, 0x5DB6, 0x4158, 0x5DB7, 0x5DB7, 0x2D5B, 0x5DB8, 0x5DB8, 0x13CC,
+    0x5DB9, 0x5DB9, 0x462E, 0x5DBA, 0x5DBA, 0x13CA, 0x5DBC, 0x5DBC, 0x13C9,
+    0x5DBD, 0x5DBD, 0x13CB, 0x5DC0, 0x5DC0, 0x2F1B, 0x5DC1, 0x5DC1, 0x3BFF,
+    0x5DC2, 0x5DC2, 0x3023, 0x5DC3, 0x5DC3, 0x308C, 0x5DC6, 0x5DC7, 0x31CD,
+    0x5DC9, 0x5DC9, 0x1613, 0x5DCB, 0x5DCB, 0x32CE, 0x5DCD, 0x5DCD, 0x166F,
+    0x5DCF, 0x5DCF, 0x32CF, 0x5DD1, 0x5DD1, 0x337F, 0x5DD2, 0x5DD2, 0x16C2,
+    0x5DD4, 0x5DD4, 0x16C1, 0x5DD5, 0x5DD5, 0x337E, 0x5DD6, 0x5DD6, 0x16F7,
+    0x5DD7, 0x5DD7, 0x412C, 0x5DD8, 0x5DD8, 0x3414, 0x5DDB, 0x5DDB, 0x0226,
+    0x5DDD, 0x5DDD, 0x0287, 0x5DDE, 0x5DDE, 0x03C8, 0x5DDF, 0x5DDF, 0x17E3,
+    0x5DE0, 0x5DE0, 0x1871, 0x5DE1, 0x5DE1, 0x051A, 0x5DE2, 0x5DE2, 0x0A6B,
+    0x5DE5, 0x5DE5, 0x0288, 0x5DE6, 0x5DE6, 0x0338, 0x5DE7, 0x5DE7, 0x0337,
+    0x5DE8, 0x5DE8, 0x0336, 0x5DEB, 0x5DEB, 0x048D, 0x5DEE, 0x5DEE, 0x08A8,
+    0x5DF0, 0x5DF0, 0x23C6, 0x5DF1, 0x5DF3, 0x0289, 0x5DF4, 0x5DF4, 0x02CB,
+    0x5DF5, 0x5DF5, 0x3F61, 0x5DF7, 0x5DF7, 0x070D, 0x5DF9, 0x5DF9, 0x1AC9,
+    0x5DFD, 0x5DFD, 0x0C36, 0x5DFE, 0x5DFE, 0x028C, 0x5DFF, 0x5DFF, 0x1788,
+    0x5E02, 0x5E03, 0x0339, 0x5E04, 0x5E04, 0x17A4, 0x5E06, 0x5E06, 0x03C9,
+    0x5E09, 0x5E09, 0x4140, 0x5E0A, 0x5E0A, 0x1872, 0x5E0B, 0x5E0B, 0x3D8A,
+    0x5E0C, 0x5E0C, 0x048E, 0x5E0E, 0x5E0E, 0x1873, 0x5E11, 0x5E11, 0x05B0,
+    0x5E12, 0x5E12, 0x3F2E, 0x5E14, 0x5E14, 0x1970, 0x5E15, 0x5E15, 0x05AE,
+    0x5E16, 0x5E16, 0x05AD, 0x5E17, 0x5E17, 0x196F, 0x5E18, 0x5E18, 0x05AB,
+    0x5E19, 0x5E19, 0x1971, 0x5E1A, 0x5E1A, 0x05AC, 0x5E1B, 0x5E1B, 0x05AF,
+    0x5E1D, 0x5E1D, 0x070E, 0x5E1F, 0x5E1F, 0x0710, 0x5E20, 0x5E20, 0x1ACD,
+    0x5E21, 0x5E23, 0x1ACA, 0x5E24, 0x5E24, 0x1ACE, 0x5E25, 0x5E25, 0x070F,
+    0x5E28, 0x5E28, 0x1C87, 0x5E29, 0x5E29, 0x1C86, 0x5E2B, 0x5E2B, 0x08AA,
+    0x5E2D, 0x5E2D, 0x08A9, 0x5E2E, 0x5E2E, 0x4135, 0x5E33, 0x5E33, 0x0A6E,
+    0x5E34, 0x5E34, 0x1ECD, 0x5E36, 0x5E36, 0x0A6D, 0x5E37, 0x5E37, 0x0A6F,
+    0x5E38, 0x5E38, 0x0A6C, 0x5E3D, 0x5E3D, 0x0C38, 0x5E3E, 0x5E3E, 0x1ECC,
+    0x5E40, 0x5E40, 0x0C39, 0x5E41, 0x5E41, 0x212E, 0x5E42, 0x5E42, 0x43A0,
+    0x5E43, 0x5E43, 0x0C3A, 0x5E44, 0x5E44, 0x212D, 0x5E45, 0x5E45, 0x0C37,
+    0x5E48, 0x5E48, 0x3A2C, 0x5E4A, 0x5E4A, 0x23C9, 0x5E4B, 0x5E4B, 0x23CB,
+    0x5E4C, 0x5E4C, 0x0DFF, 0x5E4D, 0x5E4D, 0x23CA, 0x5E4E, 0x5E4E, 0x23C8,
+    0x5E4F, 0x5E4F, 0x23C7, 0x5E53, 0x5E53, 0x2674, 0x5E54, 0x5E54, 0x0FC9,
+    0x5E55, 0x5E55, 0x0FC7, 0x5E57, 0x5E57, 0x0FC8, 0x5E58, 0x5E59, 0x2672,
+    0x5E5B, 0x5E5B, 0x0FC5, 0x5E5C, 0x5E5C, 0x28C7, 0x5E5D, 0x5E5D, 0x28C5,
+    0x5E5E, 0x5E5E, 0x3A2B, 0x5E5F, 0x5E5F, 0x1139, 0x5E60, 0x5E60, 0x28C6,
+    0x5E61, 0x5E61, 0x113A, 0x5E62, 0x5E62, 0x1138, 0x5E63, 0x5E63, 0x0FC6,
+    0x5E66, 0x5E66, 0x2B38, 0x5E67, 0x5E68, 0x2B36, 0x5E69, 0x5E69, 0x28C4,
+    0x5E6A, 0x5E6A, 0x2D5D, 0x5E6B, 0x5E6B, 0x13CD, 0x5E6C, 0x5E6C, 0x2D5C,
+    0x5E6D, 0x5E6E, 0x2F1C, 0x5E6F, 0x5E6F, 0x2B39, 0x5E70, 0x5E70, 0x308D,
+    0x5E72, 0x5E72, 0x028D, 0x5E73, 0x5E73, 0x033B, 0x5E74, 0x5E74, 0x03CB,
+    0x5E75, 0x5E75, 0x17E4, 0x5E76, 0x5E76, 0x03CA, 0x5E78, 0x5E78, 0x05B1,
+    0x5E79, 0x5E79, 0x0E00, 0x5E7A, 0x5E7A, 0x0227, 0x5E7B, 0x5E7B, 0x02CC,
+    0x5E7C, 0x5E7C, 0x033C, 0x5E7D, 0x5E7D, 0x0711, 0x5E7E, 0x5E7E, 0x0C3B,
+    0x5E7F, 0x5E7F, 0x0228, 0x5E80, 0x5E80, 0x17A5, 0x5E82, 0x5E82, 0x17A6,
+    0x5E83, 0x5E83, 0x4108, 0x5E84, 0x5E84, 0x17E5, 0x5E86, 0x5E86, 0x4552,
+    0x5E87, 0x5E87, 0x0490, 0x5E88, 0x5E88, 0x1877, 0x5E89, 0x5E89, 0x1875,
+    0x5E8A, 0x5E8A, 0x0491, 0x5E8B, 0x5E8B, 0x1874, 0x5E8C, 0x5E8C, 0x1876,
+    0x5E8D, 0x5E8D, 0x1878, 0x5E8F, 0x5E8F, 0x048F, 0x5E95, 0x5E96, 0x05B5,
+    0x5E97, 0x5E97, 0x05B3, 0x5E9A, 0x5E9A, 0x05B2, 0x5E9B, 0x5E9B, 0x1AD2,
+    0x5E9C, 0x5E9C, 0x05B4, 0x5EA0, 0x5EA0, 0x0712, 0x5EA2, 0x5EA2, 0x1AD1,
+    0x5EA3, 0x5EA3, 0x1AD3, 0x5EA4, 0x5EA4, 0x1AD0, 0x5EA5, 0x5EA5, 0x1AD4,
+    0x5EA6, 0x5EA6, 0x0713, 0x5EA7, 0x5EA7, 0x08AD, 0x5EA8, 0x5EA8, 0x1C88,
+    0x5EAA, 0x5EAA, 0x1C8A, 0x5EAB, 0x5EAB, 0x08AB, 0x5EAC, 0x5EAC, 0x1C8B,
+    0x5EAD, 0x5EAD, 0x08AC, 0x5EAE, 0x5EAE, 0x1C89, 0x5EB0, 0x5EB0, 0x1ACF,
+    0x5EB1, 0x5EB1, 0x1ECE, 0x5EB2, 0x5EB3, 0x1ED1, 0x5EB4, 0x5EB4, 0x1ECF,
+    0x5EB5, 0x5EB5, 0x0A73, 0x5EB6, 0x5EB6, 0x0A72, 0x5EB7, 0x5EB8, 0x0A70,
+    0x5EB9, 0x5EB9, 0x1ED0, 0x5EBD, 0x5EBD, 0x43BD, 0x5EBE, 0x5EBE, 0x0A74,
+    0x5EC1, 0x5EC2, 0x0C3D, 0x5EC4, 0x5EC4, 0x0C3F, 0x5EC5, 0x5EC5, 0x23CC,
+    0x5EC6, 0x5EC6, 0x23CE, 0x5EC7, 0x5EC7, 0x23D0, 0x5EC8, 0x5EC8, 0x0E02,
+    0x5EC9, 0x5EC9, 0x0E01, 0x5ECA, 0x5ECA, 0x0C3C, 0x5ECB, 0x5ECB, 0x23CF,
+    0x5ECC, 0x5ECC, 0x23CD, 0x5ECD, 0x5ECD, 0x3A30, 0x5ECE, 0x5ECE, 0x2678,
+    0x5ED0, 0x5ED0, 0x413D, 0x5ED1, 0x5ED1, 0x2676, 0x5ED2, 0x5ED2, 0x267C,
+    0x5ED3, 0x5ED3, 0x0FCA, 0x5ED4, 0x5ED4, 0x267D, 0x5ED5, 0x5ED5, 0x267A,
+    0x5ED6, 0x5ED6, 0x0FCB, 0x5ED7, 0x5ED7, 0x2677, 0x5ED8, 0x5ED8, 0x2675,
+    0x5ED9, 0x5ED9, 0x267B, 0x5EDA, 0x5EDA, 0x113C, 0x5EDB, 0x5EDB, 0x28C9,
+    0x5EDC, 0x5EDC, 0x2679, 0x5EDD, 0x5EDD, 0x113E, 0x5EDE, 0x5EDE, 0x28CA,
+    0x5EDF, 0x5EDF, 0x113D, 0x5EE0, 0x5EE0, 0x1140, 0x5EE1, 0x5EE1, 0x28CB,
+    0x5EE2, 0x5EE2, 0x113B, 0x5EE3, 0x5EE3, 0x113F, 0x5EE5, 0x5EE5, 0x2B3E,
+    0x5EE6, 0x5EE6, 0x2B3C, 0x5EE7, 0x5EE7, 0x2B3B, 0x5EE8, 0x5EE8, 0x2B3D,
+    0x5EE9, 0x5EE9, 0x2B3A, 0x5EEC, 0x5EEC, 0x157D, 0x5EEE, 0x5EEF, 0x31CF,
+    0x5EF1, 0x5EF1, 0x32D0, 0x5EF2, 0x5EF2, 0x3380, 0x5EF3, 0x5EF3, 0x1742,
+    0x5EF4, 0x5EF4, 0x0229, 0x5EF6, 0x5EF6, 0x05B7, 0x5EF7, 0x5EF7, 0x0492,
+    0x5EF8, 0x5EF8, 0x386F, 0x5EF9, 0x5EF9, 0x4143, 0x5EFA, 0x5EFA, 0x0714,
+    0x5EFB, 0x5EFB, 0x4144, 0x5EFC, 0x5EFC, 0x4146, 0x5EFE, 0x5EFE, 0x028E,
+    0x5EFF, 0x5EFF, 0x02CD, 0x5F01, 0x5F01, 0x033D, 0x5F02, 0x5F02, 0x17E6,
+    0x5F04, 0x5F04, 0x0493, 0x5F05, 0x5F05, 0x1879, 0x5F07, 0x5F07, 0x1AD5,
+    0x5F08, 0x5F08, 0x0715, 0x5F0A, 0x5F0A, 0x0FCC, 0x5F0B, 0x5F0B, 0x028F,
+    0x5F0C, 0x5F0C, 0x3A3E, 0x5F0D, 0x5F0D, 0x4149, 0x5F0E, 0x5F0E, 0x3A3F,
+    0x5F0F, 0x5F0F, 0x03CC, 0x5F12, 0x5F12, 0x0E03, 0x5F13, 0x5F13, 0x0290,
+    0x5F14, 0x5F15, 0x02CE, 0x5F17, 0x5F17, 0x033F, 0x5F18, 0x5F18, 0x033E,
+    0x5F1A, 0x5F1A, 0x17E7, 0x5F1B, 0x5F1B, 0x03CD, 0x5F1D, 0x5F1D, 0x187A,
+    0x5F1F, 0x5F1F, 0x0494, 0x5F22, 0x5F24, 0x1973, 0x5F25, 0x5F25, 0x4630,
+    0x5F26, 0x5F27, 0x05B8, 0x5F28, 0x5F28, 0x1972, 0x5F29, 0x5F29, 0x05BA,
+    0x5F2D, 0x5F2D, 0x0716, 0x5F2E, 0x5F2E, 0x1AD6, 0x5F30, 0x5F30, 0x1C8D,
+    0x5F31, 0x5F31, 0x08AE, 0x5F33, 0x5F33, 0x1C8C, 0x5F35, 0x5F35, 0x0A75,
+    0x5F36, 0x5F36, 0x1ED3, 0x5F37, 0x5F37, 0x0A76, 0x5F38, 0x5F38, 0x1ED4,
+    0x5F3A, 0x5F3A, 0x414E, 0x5F3C, 0x5F3C, 0x0C40, 0x5F40, 0x5F40, 0x23D1,
+    0x5F43, 0x5F43, 0x267F, 0x5F44, 0x5F44, 0x267E, 0x5F46, 0x5F46, 0x0FCD,
+    0x5F48, 0x5F48, 0x1141, 0x5F49, 0x5F49, 0x28CC, 0x5F4A, 0x5F4A, 0x12AD,
+    0x5F4B, 0x5F4B, 0x2B3F, 0x5F4C, 0x5F4C, 0x13CE, 0x5F4D, 0x5F4D, 0x3BA5,
+    0x5F4E, 0x5F4E, 0x16C3, 0x5F4F, 0x5F4F, 0x3416, 0x5F50, 0x5F50, 0x022A,
+    0x5F51, 0x5F51, 0x44E9, 0x5F54, 0x5F54, 0x1976, 0x5F56, 0x5F56, 0x1AD7,
+    0x5F57, 0x5F57, 0x0A77, 0x5F58, 0x5F58, 0x212F, 0x5F59, 0x5F59, 0x0E04,
+    0x5F5C, 0x5F5C, 0x3D5A, 0x5F5D, 0x5F5D, 0x14CF, 0x5F61, 0x5F61, 0x022B,
+    0x5F62, 0x5F62, 0x0496, 0x5F63, 0x5F63, 0x4152, 0x5F64, 0x5F64, 0x0495,
+    0x5F65, 0x5F65, 0x0717, 0x5F67, 0x5F67, 0x1C8E, 0x5F69, 0x5F69, 0x0A79,
+    0x5F6A, 0x5F6A, 0x0B89, 0x5F6B, 0x5F6B, 0x0A7A, 0x5F6C, 0x5F6C, 0x0A78,
+    0x5F6D, 0x5F6D, 0x0C41, 0x5F6F, 0x5F6F, 0x2680, 0x5F70, 0x5F70, 0x0FCE,
+    0x5F71, 0x5F71, 0x1142, 0x5F72, 0x5F72, 0x4154, 0x5F73, 0x5F73, 0x1777,
+    0x5F74, 0x5F74, 0x17E8, 0x5F76, 0x5F76, 0x187C, 0x5F77, 0x5F77, 0x0497,
+    0x5F78, 0x5F78, 0x187B, 0x5F79, 0x5F79, 0x0498, 0x5F7B, 0x5F7B, 0x4058,
+    0x5F7C, 0x5F7C, 0x05BE, 0x5F7D, 0x5F7D, 0x1979, 0x5F7E, 0x5F7E, 0x1978,
+    0x5F7F, 0x5F7F, 0x05BD, 0x5F80, 0x5F81, 0x05BB, 0x5F82, 0x5F82, 0x1977,
+    0x5F83, 0x5F83, 0x4631, 0x5F85, 0x5F85, 0x0719, 0x5F86, 0x5F86, 0x1AD8,
+    0x5F87, 0x5F87, 0x071C, 0x5F88, 0x5F88, 0x0718, 0x5F89, 0x5F89, 0x071E,
+    0x5F8A, 0x5F8B, 0x071A, 0x5F8C, 0x5F8C, 0x071D, 0x5F90, 0x5F90, 0x08B1,
+    0x5F91, 0x5F91, 0x08B0, 0x5F92, 0x5F92, 0x08AF, 0x5F96, 0x5F96, 0x1ED6,
+    0x5F97, 0x5F97, 0x0A7B, 0x5F98, 0x5F98, 0x0A7E, 0x5F99, 0x5F99, 0x0A7C,
+    0x5F9B, 0x5F9B, 0x1ED5, 0x5F9C, 0x5F9C, 0x0A81, 0x5F9E, 0x5F9E, 0x0A7D,
+    0x5F9F, 0x5F9F, 0x1ED7, 0x5FA0, 0x5FA0, 0x0A80, 0x5FA1, 0x5FA1, 0x0A7F,
+    0x5FA4, 0x5FA4, 0x402C, 0x5FA5, 0x5FA5, 0x2131, 0x5FA6, 0x5FA6, 0x2130,
+    0x5FA7, 0x5FA7, 0x4157, 0x5FA8, 0x5FA8, 0x0C44, 0x5FA9, 0x5FAA, 0x0C42,
+    0x5FAB, 0x5FAB, 0x2132, 0x5FAC, 0x5FAC, 0x0E05, 0x5FAD, 0x5FAD, 0x23D3,
+    0x5FAE, 0x5FAE, 0x0E06, 0x5FAF, 0x5FAF, 0x23D2, 0x5FB1, 0x5FB1, 0x3D98,
+    0x5FB2, 0x5FB2, 0x28CD, 0x5FB5, 0x5FB5, 0x1144, 0x5FB6, 0x5FB6, 0x2681,
+    0x5FB7, 0x5FB7, 0x1143, 0x5FB9, 0x5FB9, 0x0FCF, 0x5FBA, 0x5FBA, 0x3F9F,
+    0x5FBB, 0x5FBB, 0x2B41, 0x5FBC, 0x5FBC, 0x2B40, 0x5FBD, 0x5FBD, 0x13CF,
+    0x5FBE, 0x5FBE, 0x2D5E, 0x5FBF, 0x5FBF, 0x308E, 0x5FC0, 0x5FC1, 0x31D1,
+    0x5FC3, 0x5FC3, 0x02D0, 0x5FC4, 0x5FC4, 0x44EA, 0x5FC5, 0x5FC5, 0x0340,
+    0x5FC9, 0x5FC9, 0x17A7, 0x5FCC, 0x5FCC, 0x049A, 0x5FCD, 0x5FCD, 0x049C,
+    0x5FCF, 0x5FCF, 0x17EB, 0x5FD0, 0x5FD0, 0x187F, 0x5FD1, 0x5FD1, 0x187E,
+    0x5FD2, 0x5FD2, 0x187D, 0x5FD4, 0x5FD4, 0x17EA, 0x5FD5, 0x5FD5, 0x17E9,
+    0x5FD6, 0x5FD6, 0x03CF, 0x5FD7, 0x5FD7, 0x049B, 0x5FD8, 0x5FD8, 0x0499,
+    0x5FD9, 0x5FD9, 0x03CE, 0x5FDB, 0x5FDB, 0x3A4A, 0x5FDD, 0x5FDD, 0x05BF,
+    0x5FDE, 0x5FDE, 0x197A, 0x5FDF, 0x5FDF, 0x41AF, 0x5FE0, 0x5FE0, 0x05C0,
+    0x5FE1, 0x5FE1, 0x1884, 0x5FE3, 0x5FE3, 0x1886, 0x5FE4, 0x5FE4, 0x1885,
+    0x5FE5, 0x5FE5, 0x197B, 0x5FE8, 0x5FE8, 0x1881, 0x5FEA, 0x5FEA, 0x04A0,
+    0x5FEB, 0x5FEB, 0x049E, 0x5FED, 0x5FED, 0x1880, 0x5FEE, 0x5FEE, 0x1882,
+    0x5FEF, 0x5FEF, 0x1888, 0x5FF1, 0x5FF1, 0x049D, 0x5FF3, 0x5FF3, 0x1883,
+    0x5FF4, 0x5FF4, 0x188C, 0x5FF5, 0x5FF5, 0x05C2, 0x5FF7, 0x5FF7, 0x1889,
+    0x5FF8, 0x5FF8, 0x049F, 0x5FFA, 0x5FFA, 0x1887, 0x5FFB, 0x5FFB, 0x188A,
+    0x5FFD, 0x5FFD, 0x05C1, 0x5FFF, 0x5FFF, 0x05C3, 0x6000, 0x6000, 0x188B,
+    0x6009, 0x6009, 0x198F, 0x600A, 0x600A, 0x1982, 0x600B, 0x600B, 0x1980,
+    0x600C, 0x600C, 0x198E, 0x600D, 0x600D, 0x1989, 0x600E, 0x600E, 0x0723,
+    0x600F, 0x600F, 0x05C4, 0x6010, 0x6010, 0x198A, 0x6011, 0x6011, 0x198D,
+    0x6012, 0x6012, 0x071F, 0x6013, 0x6013, 0x198C, 0x6014, 0x6014, 0x05C5,
+    0x6015, 0x6015, 0x05CA, 0x6016, 0x6016, 0x05C8, 0x6017, 0x6017, 0x1983,
+    0x6019, 0x6019, 0x197E, 0x601A, 0x601A, 0x1985, 0x601B, 0x601B, 0x05CF,
+    0x601C, 0x601C, 0x1990, 0x601D, 0x601D, 0x0720, 0x601E, 0x601E, 0x1986,
+    0x6020, 0x6020, 0x0721, 0x6021, 0x6021, 0x05CB, 0x6022, 0x6022, 0x1988,
+    0x6023, 0x6023, 0x4185, 0x6024, 0x6024, 0x1AE7, 0x6025, 0x6025, 0x0722,
+    0x6026, 0x6026, 0x197D, 0x6027, 0x6027, 0x05CC, 0x6028, 0x6028, 0x0724,
+    0x6029, 0x6029, 0x05CD, 0x602A, 0x602A, 0x05C9, 0x602B, 0x602B, 0x05CE,
+    0x602C, 0x602C, 0x1987, 0x602D, 0x602D, 0x197C, 0x602E, 0x602E, 0x198B,
+    0x602F, 0x602F, 0x05C6, 0x6031, 0x6031, 0x4161, 0x6032, 0x6032, 0x197F,
+    0x6033, 0x6033, 0x1984, 0x6034, 0x6034, 0x1981, 0x6035, 0x6035, 0x05C7,
+    0x6037, 0x6037, 0x1AD9, 0x6039, 0x6039, 0x1ADA, 0x603B, 0x603B, 0x4553,
+    0x6040, 0x6040, 0x1AE4, 0x6041, 0x6041, 0x1C92, 0x6042, 0x6042, 0x1AE5,
+    0x6043, 0x6043, 0x072A, 0x6044, 0x6044, 0x1AE8, 0x6045, 0x6045, 0x1ADE,
+    0x6046, 0x6046, 0x0729, 0x6047, 0x6047, 0x1AE0, 0x6049, 0x6049, 0x1AE1,
+    0x604A, 0x604A, 0x4074, 0x604C, 0x604C, 0x1AE3, 0x604D, 0x604D, 0x0725,
+    0x6050, 0x6050, 0x08B5, 0x6052, 0x6052, 0x36EC, 0x6053, 0x6053, 0x1ADF,
+    0x6054, 0x6054, 0x1ADB, 0x6055, 0x6055, 0x08B6, 0x6058, 0x6058, 0x1AE9,
+    0x6059, 0x6059, 0x08B2, 0x605A, 0x605A, 0x1C90, 0x605B, 0x605B, 0x1AE2,
+    0x605D, 0x605D, 0x1C8F, 0x605E, 0x605E, 0x1ADD, 0x605F, 0x605F, 0x1AE6,
+    0x6062, 0x6062, 0x0728, 0x6063, 0x6063, 0x08B3, 0x6064, 0x6064, 0x072E,
+    0x6065, 0x6065, 0x08B4, 0x6066, 0x6066, 0x1AEA, 0x6067, 0x6067, 0x1C91,
+    0x6068, 0x6068, 0x0727, 0x6069, 0x6069, 0x08B8, 0x606A, 0x606A, 0x072D,
+    0x606B, 0x606B, 0x072C, 0x606C, 0x606C, 0x072B, 0x606D, 0x606D, 0x08B7,
+    0x606E, 0x606E, 0x1AEB, 0x606F, 0x606F, 0x08B9, 0x6070, 0x6070, 0x0726,
+    0x6072, 0x6072, 0x1ADC, 0x6075, 0x6075, 0x3A56, 0x6077, 0x6077, 0x4005,
+    0x607E, 0x607E, 0x3A47, 0x607F, 0x607F, 0x0A82, 0x6080, 0x6080, 0x1C95,
+    0x6081, 0x6081, 0x1C97, 0x6083, 0x6083, 0x1C99, 0x6084, 0x6084, 0x08BA,
+    0x6085, 0x6085, 0x08C0, 0x6086, 0x6086, 0x1EDA, 0x6087, 0x6087, 0x1C9D,
+    0x6088, 0x6088, 0x1C94, 0x6089, 0x6089, 0x0A84, 0x608A, 0x608A, 0x1ED8,
+    0x608C, 0x608C, 0x08BF, 0x608D, 0x608D, 0x08BD, 0x608E, 0x608E, 0x1C9F,
+    0x6090, 0x6090, 0x1ED9, 0x6092, 0x6092, 0x1C96, 0x6094, 0x6094, 0x08BE,
+    0x6095, 0x6095, 0x1C9A, 0x6096, 0x6096, 0x08C1, 0x6097, 0x6097, 0x1C9C,
+    0x609A, 0x609A, 0x08BC, 0x609B, 0x609B, 0x1C9B, 0x609C, 0x609C, 0x1C9E,
+    0x609D, 0x609D, 0x1C98, 0x609E, 0x609E, 0x416A, 0x609F, 0x609F, 0x08BB,
+    0x60A0, 0x60A0, 0x0A85, 0x60A2, 0x60A2, 0x1C93, 0x60A3, 0x60A3, 0x0A83,
+    0x60A4, 0x60A4, 0x4001, 0x60A7, 0x60A7, 0x3ADC, 0x60A8, 0x60A8, 0x0A86,
+    0x60B0, 0x60B0, 0x1EDC, 0x60B1, 0x60B1, 0x1EE5, 0x60B2, 0x60B2, 0x0C47,
+    0x60B3, 0x60B3, 0x416C, 0x60B4, 0x60B4, 0x0A88, 0x60B5, 0x60B5, 0x0A8D,
+    0x60B6, 0x60B6, 0x0C48, 0x60B7, 0x60B7, 0x1EE7, 0x60B8, 0x60B8, 0x0A94,
+    0x60B9, 0x60B9, 0x2134, 0x60BA, 0x60BA, 0x1EDD, 0x60BB, 0x60BB, 0x0A8C,
+    0x60BC, 0x60BC, 0x0A8F, 0x60BD, 0x60BD, 0x0A8A, 0x60BE, 0x60BE, 0x1EDB,
+    0x60BF, 0x60BF, 0x1EE9, 0x60C0, 0x60C0, 0x1EEC, 0x60C1, 0x60C1, 0x2143,
+    0x60C3, 0x60C3, 0x1EEA, 0x60C4, 0x60C4, 0x2138, 0x60C5, 0x60C5, 0x0A8B,
+    0x60C6, 0x60C6, 0x0A92, 0x60C7, 0x60C7, 0x0A96, 0x60C8, 0x60C8, 0x1EE4,
+    0x60C9, 0x60C9, 0x2133, 0x60CA, 0x60CA, 0x1EE8, 0x60CB, 0x60CB, 0x0A87,
+    0x60CC, 0x60CC, 0x2135, 0x60CD, 0x60CD, 0x1EEB, 0x60CE, 0x60CE, 0x2137,
+    0x60CF, 0x60CF, 0x1EE0, 0x60D1, 0x60D1, 0x0C45, 0x60D3, 0x60D4, 0x1EDE,
+    0x60D5, 0x60D5, 0x0A91, 0x60D7, 0x60D7, 0x4635, 0x60D8, 0x60D8, 0x0A90,
+    0x60D9, 0x60D9, 0x1EE2, 0x60DA, 0x60DA, 0x0A95, 0x60DB, 0x60DB, 0x1EE6,
+    0x60DC, 0x60DC, 0x0A8E, 0x60DD, 0x60DD, 0x1EE3, 0x60DE, 0x60DE, 0x3DCC,
+    0x60DF, 0x60DF, 0x0A93, 0x60E0, 0x60E0, 0x0C49, 0x60E1, 0x60E1, 0x0C46,
+    0x60E2, 0x60E2, 0x2136, 0x60E3, 0x60E3, 0x3D75, 0x60E4, 0x60E4, 0x1EE1,
+    0x60E6, 0x60E6, 0x0A89, 0x60E7, 0x60E7, 0x3D84, 0x60E8, 0x60E8, 0x3D7B,
+    0x60E9, 0x60E9, 0x4009, 0x60F0, 0x60F0, 0x0C4E, 0x60F1, 0x60F1, 0x0C52,
+    0x60F2, 0x60F2, 0x213A, 0x60F3, 0x60F3, 0x0E0B, 0x60F4, 0x60F4, 0x0C50,
+    0x60F5, 0x60F5, 0x213E, 0x60F6, 0x60F6, 0x0C54, 0x60F7, 0x60F7, 0x23D4,
+    0x60F8, 0x60F8, 0x2140, 0x60F9, 0x60F9, 0x0E0D, 0x60FA, 0x60FA, 0x0C4C,
+    0x60FB, 0x60FB, 0x0C4F, 0x60FC, 0x60FC, 0x2141, 0x60FD, 0x60FD, 0x3FA8,
+    0x60FE, 0x60FE, 0x2142, 0x60FF, 0x60FF, 0x2148, 0x6100, 0x6100, 0x0C56,
+    0x6101, 0x6101, 0x0E0E, 0x6103, 0x6103, 0x2144, 0x6104, 0x6104, 0x2149,
+    0x6105, 0x6105, 0x213D, 0x6106, 0x6106, 0x0E18, 0x6107, 0x6107, 0x3C35,
+    0x6108, 0x6108, 0x0E0F, 0x6109, 0x6109, 0x0C55, 0x610A, 0x610A, 0x213B,
+    0x610B, 0x610B, 0x214A, 0x610C, 0x610C, 0x3C87, 0x610D, 0x610D, 0x0E17,
+    0x610E, 0x610E, 0x0C53, 0x610F, 0x610F, 0x0E08, 0x6110, 0x6110, 0x2147,
+    0x6112, 0x6112, 0x0C57, 0x6113, 0x6113, 0x213F, 0x6114, 0x6114, 0x2139,
+    0x6115, 0x6115, 0x0C4D, 0x6116, 0x6116, 0x213C, 0x6118, 0x6118, 0x2145,
+    0x6119, 0x6119, 0x3EF6, 0x611A, 0x611A, 0x0E07, 0x611B, 0x611B, 0x0E0C,
+    0x611C, 0x611C, 0x0C4A, 0x611D, 0x611D, 0x2146, 0x611F, 0x611F, 0x0E0A,
+    0x6123, 0x6123, 0x0C4B, 0x6127, 0x6127, 0x0E16, 0x6128, 0x6128, 0x2683,
+    0x6129, 0x6129, 0x23DF, 0x612B, 0x612B, 0x23D7, 0x612C, 0x612C, 0x2682,
+    0x612E, 0x612E, 0x23DB, 0x612F, 0x612F, 0x23DD, 0x6130, 0x6130, 0x3F37,
+    0x6132, 0x6132, 0x23DA, 0x6134, 0x6134, 0x0E15, 0x6136, 0x6136, 0x23D9,
+    0x6137, 0x6137, 0x0E19, 0x613B, 0x613B, 0x2692, 0x613D, 0x613D, 0x4636,
+    0x613E, 0x613E, 0x0E14, 0x613F, 0x613F, 0x0FD1, 0x6140, 0x6140, 0x23E0,
+    0x6141, 0x6141, 0x2684, 0x6142, 0x6142, 0x4174, 0x6144, 0x6144, 0x0E12,
+    0x6145, 0x6145, 0x23D8, 0x6146, 0x6146, 0x23DC, 0x6147, 0x6147, 0x0FD0,
+    0x6148, 0x6148, 0x0E09, 0x6149, 0x614A, 0x23D5, 0x614B, 0x614B, 0x0FD2,
+    0x614C, 0x614C, 0x0E11, 0x614D, 0x614D, 0x0E13, 0x614E, 0x614E, 0x0E10,
+    0x614F, 0x614F, 0x23DE, 0x6150, 0x6150, 0x3C32, 0x6152, 0x6153, 0x2688,
+    0x6154, 0x6154, 0x268E, 0x6155, 0x6155, 0x1149, 0x6156, 0x6156, 0x2695,
+    0x6158, 0x6158, 0x0FD8, 0x6159, 0x6159, 0x3FBA, 0x615A, 0x615A, 0x0FD7,
+    0x615B, 0x615B, 0x2690, 0x615C, 0x615C, 0x4186, 0x615D, 0x615D, 0x1148,
+    0x615E, 0x615E, 0x2685, 0x615F, 0x615F, 0x0FD6, 0x6160, 0x6160, 0x494C,
+    0x6161, 0x6161, 0x2694, 0x6162, 0x6163, 0x0FD4, 0x6164, 0x6164, 0x4173,
+    0x6165, 0x6165, 0x2691, 0x6166, 0x6166, 0x28DE, 0x6167, 0x6167, 0x1146,
+    0x6168, 0x6168, 0x0C51, 0x616A, 0x616A, 0x2693, 0x616B, 0x616B, 0x114D,
+    0x616C, 0x616C, 0x268B, 0x616E, 0x616E, 0x1147, 0x616F, 0x616F, 0x3FC0,
+    0x6170, 0x6170, 0x114C, 0x6171, 0x6171, 0x2686, 0x6172, 0x6172, 0x268A,
+    0x6173, 0x6173, 0x2687, 0x6174, 0x6174, 0x268D, 0x6175, 0x6175, 0x0FD9,
+    0x6176, 0x6176, 0x1145, 0x6177, 0x6177, 0x0FD3, 0x6179, 0x6179, 0x28D0,
+    0x617A, 0x617A, 0x268F, 0x617C, 0x617C, 0x114B, 0x617D, 0x617D, 0x3FBD,
+    0x617E, 0x617E, 0x114E, 0x6180, 0x6180, 0x268C, 0x6181, 0x6181, 0x4177,
+    0x6182, 0x6182, 0x114A, 0x6183, 0x6183, 0x28CF, 0x6187, 0x6187, 0x417A,
+    0x6189, 0x6189, 0x28D4, 0x618A, 0x618A, 0x12B1, 0x618B, 0x618B, 0x28CE,
+    0x618C, 0x618C, 0x2B4D, 0x618D, 0x618D, 0x28DD, 0x618E, 0x618E, 0x1152,
+    0x6190, 0x6190, 0x1150, 0x6191, 0x6191, 0x12AF, 0x6192, 0x6192, 0x28DA,
+    0x6193, 0x6193, 0x28D6, 0x6194, 0x6194, 0x1156, 0x6195, 0x6195, 0x3DE0,
+    0x6196, 0x6196, 0x2B44, 0x6198, 0x6198, 0x3A55, 0x6199, 0x6199, 0x3A54,
+    0x619A, 0x619A, 0x1154, 0x619B, 0x619B, 0x28D5, 0x619C, 0x619C, 0x4002,
+    0x619D, 0x619D, 0x2B42, 0x619F, 0x619F, 0x28D9, 0x61A1, 0x61A1, 0x28DC,
+    0x61A2, 0x61A2, 0x28D3, 0x61A4, 0x61A4, 0x1155, 0x61A7, 0x61A7, 0x114F,
+    0x61A8, 0x61A8, 0x2B43, 0x61A9, 0x61A9, 0x12B0, 0x61AA, 0x61AA, 0x28DB,
+    0x61AB, 0x61AB, 0x1151, 0x61AC, 0x61AC, 0x1153, 0x61AD, 0x61AD, 0x28D8,
+    0x61AE, 0x61AE, 0x1157, 0x61AF, 0x61AF, 0x28D7, 0x61B0, 0x61B0, 0x28D2,
+    0x61B1, 0x61B1, 0x28D1, 0x61B2, 0x61B2, 0x12AE, 0x61B3, 0x61B3, 0x28DF,
+    0x61B4, 0x61B4, 0x2B46, 0x61B5, 0x61B5, 0x2D60, 0x61B6, 0x61B6, 0x12B3,
+    0x61B7, 0x61B7, 0x4639, 0x61B8, 0x61B8, 0x2B4C, 0x61B9, 0x61B9, 0x43BF,
+    0x61BA, 0x61BA, 0x2B4A, 0x61BC, 0x61BC, 0x2D61, 0x61BE, 0x61BE, 0x12B4,
+    0x61BF, 0x61BF, 0x2B4B, 0x61C0, 0x61C0, 0x3A50, 0x61C1, 0x61C1, 0x2B48,
+    0x61C2, 0x61C2, 0x13D1, 0x61C3, 0x61C3, 0x2D5F, 0x61C5, 0x61C5, 0x2B45,
+    0x61C6, 0x61C6, 0x2B47, 0x61C7, 0x61C7, 0x13D2, 0x61C8, 0x61C8, 0x12B6,
+    0x61C9, 0x61C9, 0x13D0, 0x61CA, 0x61CA, 0x12B5, 0x61CB, 0x61CB, 0x13D4,
+    0x61CC, 0x61CC, 0x2B49, 0x61CD, 0x61CD, 0x12B2, 0x61CF, 0x61CF, 0x463A,
+    0x61D0, 0x61D0, 0x4181, 0x61D3, 0x61D3, 0x417E, 0x61D6, 0x61D6, 0x2F26,
+    0x61D8, 0x61D8, 0x2F1E, 0x61DA, 0x61DA, 0x38B1, 0x61DE, 0x61DE, 0x2D67,
+    0x61DF, 0x61DF, 0x2F1F, 0x61E0, 0x61E0, 0x2D63, 0x61E2, 0x61E2, 0x3FC5,
+    0x61E3, 0x61E3, 0x14D0, 0x61E4, 0x61E4, 0x2D65, 0x61E5, 0x61E5, 0x2D64,
+    0x61E6, 0x61E6, 0x13D3, 0x61E7, 0x61E7, 0x2D62, 0x61E8, 0x61E8, 0x2D66,
+    0x61E9, 0x61E9, 0x2F27, 0x61EA, 0x61EA, 0x2F23, 0x61EB, 0x61EB, 0x2F25,
+    0x61ED, 0x61EE, 0x2F20, 0x61F0, 0x61F0, 0x2F24, 0x61F1, 0x61F1, 0x2F22,
+    0x61F2, 0x61F2, 0x157E, 0x61F5, 0x61F5, 0x1581, 0x61F6, 0x61F6, 0x1580,
+    0x61F7, 0x61F7, 0x157F, 0x61F8, 0x61F8, 0x1614, 0x61F9, 0x61F9, 0x31D3,
+    0x61FA, 0x61FA, 0x1615, 0x61FB, 0x61FB, 0x308F, 0x61FC, 0x61FC, 0x1670,
+    0x61FD, 0x61FD, 0x32D1, 0x61FE, 0x61FE, 0x1671, 0x61FF, 0x61FF, 0x16C4,
+    0x6200, 0x6200, 0x16F8, 0x6201, 0x6201, 0x3417, 0x6203, 0x6204, 0x3418,
+    0x6207, 0x6207, 0x3533, 0x6208, 0x6208, 0x02D1, 0x6209, 0x6209, 0x17A8,
+    0x620A, 0x620A, 0x0341, 0x620C, 0x620D, 0x03D1, 0x620E, 0x620E, 0x03D0,
+    0x6210, 0x6210, 0x03D3, 0x6211, 0x6211, 0x04A2, 0x6212, 0x6212, 0x04A1,
+    0x6214, 0x6214, 0x1991, 0x6215, 0x6215, 0x05D1, 0x6216, 0x6216, 0x05D0,
+    0x6219, 0x6219, 0x1CA0, 0x621A, 0x621B, 0x0A97, 0x621F, 0x621F, 0x0C58,
+    0x6220, 0x6220, 0x23E1, 0x6221, 0x6222, 0x0E1A, 0x6223, 0x6223, 0x23E3,
+    0x6224, 0x6224, 0x23E5, 0x6225, 0x6225, 0x23E4, 0x6227, 0x6227, 0x2697,
+    0x6229, 0x6229, 0x2696, 0x622A, 0x622A, 0x0FDA, 0x622B, 0x622B, 0x2698,
+    0x622C, 0x622C, 0x463C, 0x622D, 0x622D, 0x28E0, 0x622E, 0x622E, 0x1158,
+    0x6230, 0x6230, 0x12B7, 0x6232, 0x6232, 0x13D5, 0x6233, 0x6233, 0x14D1,
+    0x6234, 0x6234, 0x13D6, 0x6236, 0x6236, 0x02D2, 0x6237, 0x6237, 0x451A,
+    0x6239, 0x6239, 0x3FC2, 0x623A, 0x623A, 0x188D, 0x623D, 0x623D, 0x1992,
+    0x623E, 0x623E, 0x05D3, 0x623F, 0x623F, 0x05D2, 0x6240, 0x6240, 0x05D4,
+    0x6241, 0x6241, 0x072F, 0x6242, 0x6243, 0x1AEC, 0x6246, 0x6246, 0x1CA1,
+    0x6247, 0x6247, 0x08C2, 0x6248, 0x6248, 0x0A99, 0x6249, 0x6249, 0x0C59,
+    0x624A, 0x624A, 0x214B, 0x624B, 0x624B, 0x02D3, 0x624C, 0x624C, 0x44EC,
+    0x624D, 0x624D, 0x0291, 0x624E, 0x624E, 0x02D4, 0x6250, 0x6250, 0x17A9,
+    0x6251, 0x6251, 0x0345, 0x6252, 0x6252, 0x0344, 0x6253, 0x6254, 0x0342,
+    0x6258, 0x6258, 0x03D6, 0x6259, 0x6259, 0x17F2, 0x625A, 0x625A, 0x17F4,
+    0x625B, 0x625B, 0x03D5, 0x625C, 0x625C, 0x17EC, 0x625E, 0x625E, 0x17ED,
+    0x6260, 0x6260, 0x17F3, 0x6261, 0x6261, 0x17EF, 0x6262, 0x6262, 0x17F1,
+    0x6263, 0x6263, 0x03D4, 0x6264, 0x6264, 0x17EE, 0x6265, 0x6265, 0x17F5,
+    0x6266, 0x6266, 0x17F0, 0x6268, 0x6268, 0x3F15, 0x626D, 0x626D, 0x04A9,
+    0x626E, 0x626E, 0x04B2, 0x626F, 0x626F, 0x04B0, 0x6270, 0x6270, 0x1897,
+    0x6271, 0x6271, 0x1894, 0x6272, 0x6272, 0x189C, 0x6273, 0x6273, 0x04AE,
+    0x6274, 0x6274, 0x189D, 0x6276, 0x6276, 0x04A7, 0x6277, 0x6277, 0x189A,
+    0x6279, 0x6279, 0x04AD, 0x627A, 0x627A, 0x1896, 0x627B, 0x627B, 0x1895,
+    0x627C, 0x627C, 0x04AB, 0x627D, 0x627D, 0x189B, 0x627E, 0x627E, 0x04AC,
+    0x627F, 0x627F, 0x05D5, 0x6280, 0x6280, 0x04A6, 0x6281, 0x6281, 0x1898,
+    0x6282, 0x6282, 0x3F86, 0x6283, 0x6283, 0x188E, 0x6284, 0x6284, 0x04A3,
+    0x6285, 0x6285, 0x3F50, 0x6286, 0x6286, 0x04B6, 0x6287, 0x6287, 0x1893,
+    0x6288, 0x6288, 0x1899, 0x6289, 0x6289, 0x04A8, 0x628A, 0x628A, 0x04AA,
+    0x628C, 0x628C, 0x188F, 0x628E, 0x628F, 0x1890, 0x6290, 0x6290, 0x43C0,
+    0x6291, 0x6291, 0x04B5, 0x6292, 0x6292, 0x04AF, 0x6293, 0x6293, 0x04B4,
+    0x6294, 0x6294, 0x1892, 0x6295, 0x6295, 0x04B3, 0x6296, 0x6296, 0x04A5,
+    0x6297, 0x6297, 0x04A4, 0x6298, 0x6298, 0x04B1, 0x629D, 0x629D, 0x3E96,
+    0x62A4, 0x62A4, 0x3A69, 0x62A6, 0x62A6, 0x3FC1, 0x62A8, 0x62A8, 0x05E3,
+    0x62A9, 0x62A9, 0x199E, 0x62AA, 0x62AA, 0x1997, 0x62AB, 0x62AB, 0x05DE,
+    0x62AC, 0x62AC, 0x05F1, 0x62AD, 0x62AD, 0x1993, 0x62AE, 0x62AE, 0x199A,
+    0x62AF, 0x62AF, 0x199C, 0x62B0, 0x62B0, 0x199F, 0x62B1, 0x62B1, 0x05EC,
+    0x62B3, 0x62B3, 0x199B, 0x62B4, 0x62B4, 0x1994, 0x62B5, 0x62B5, 0x05EA,
+    0x62B6, 0x62B6, 0x1998, 0x62B8, 0x62B8, 0x19A0, 0x62B9, 0x62B9, 0x05DB,
+    0x62BB, 0x62BB, 0x199D, 0x62BC, 0x62BC, 0x05E5, 0x62BD, 0x62BD, 0x05E4,
+    0x62BE, 0x62BE, 0x1996, 0x62BF, 0x62BF, 0x05D9, 0x62C2, 0x62C2, 0x05DA,
+    0x62C3, 0x62C3, 0x3D8F, 0x62C4, 0x62C4, 0x05D8, 0x62C5, 0x62C5, 0x418A,
+    0x62C6, 0x62C6, 0x05F0, 0x62C7, 0x62C7, 0x05E8, 0x62C8, 0x62C8, 0x05E2,
+    0x62C9, 0x62C9, 0x05D6, 0x62CA, 0x62CA, 0x1999, 0x62CB, 0x62CB, 0x05E1,
+    0x62CC, 0x62CC, 0x05D7, 0x62CD, 0x62CD, 0x05E9, 0x62CE, 0x62CE, 0x05F2,
+    0x62CF, 0x62CF, 0x1AEE, 0x62D0, 0x62D0, 0x05E6, 0x62D1, 0x62D1, 0x1995,
+    0x62D2, 0x62D2, 0x05DC, 0x62D3, 0x62D4, 0x05DF, 0x62D5, 0x62D5, 0x418C,
+    0x62D6, 0x62D7, 0x05EE, 0x62D8, 0x62D8, 0x05ED, 0x62D9, 0x62D9, 0x05E7,
+    0x62DA, 0x62DA, 0x05EB, 0x62DB, 0x62DB, 0x05DD, 0x62DC, 0x62DC, 0x0730,
+    0x62DF, 0x62DF, 0x401C, 0x62E5, 0x62E5, 0x463D, 0x62EB, 0x62EB, 0x1AF4,
+    0x62EC, 0x62EC, 0x073C, 0x62ED, 0x62ED, 0x0734, 0x62EE, 0x62EE, 0x0736,
+    0x62EF, 0x62EF, 0x073B, 0x62F0, 0x62F0, 0x1B00, 0x62F1, 0x62F1, 0x0739,
+    0x62F2, 0x62F2, 0x1CA2, 0x62F3, 0x62F3, 0x08C3, 0x62F4, 0x62F4, 0x073E,
+    0x62F5, 0x62F5, 0x1AF1, 0x62F6, 0x62F6, 0x1AF9, 0x62F7, 0x62F7, 0x073A,
+    0x62F8, 0x62F8, 0x1AF8, 0x62F9, 0x62F9, 0x1AF5, 0x62FA, 0x62FA, 0x1AFD,
+    0x62FB, 0x62FB, 0x1AFF, 0x62FC, 0x62FC, 0x0733, 0x62FD, 0x62FD, 0x0737,
+    0x62FE, 0x62FE, 0x073D, 0x62FF, 0x62FF, 0x08C5, 0x6300, 0x6300, 0x1AFA,
+    0x6301, 0x6301, 0x0735, 0x6302, 0x6302, 0x0740, 0x6303, 0x6303, 0x1AF3,
+    0x6307, 0x6307, 0x0738, 0x6308, 0x6308, 0x08C4, 0x6309, 0x6309, 0x0732,
+    0x630B, 0x630B, 0x1AF0, 0x630C, 0x630C, 0x1AF7, 0x630D, 0x630D, 0x1AEF,
+    0x630E, 0x630E, 0x1AF2, 0x630F, 0x630F, 0x1AF6, 0x6310, 0x6310, 0x1CA3,
+    0x6311, 0x6311, 0x073F, 0x6313, 0x6314, 0x1AFB, 0x6315, 0x6315, 0x1AFE,
+    0x6316, 0x6316, 0x0731, 0x6318, 0x6318, 0x43C1, 0x6328, 0x6328, 0x08D3,
+    0x6329, 0x6329, 0x1CAF, 0x632A, 0x632B, 0x08D1, 0x632C, 0x632C, 0x1CA5,
+    0x632D, 0x632D, 0x1CB5, 0x632E, 0x632E, 0x3EDD, 0x632F, 0x632F, 0x08C8,
+    0x6331, 0x6331, 0x3A65, 0x6332, 0x6332, 0x1EED, 0x6333, 0x6333, 0x1CB7,
+    0x6334, 0x6334, 0x1CB1, 0x6335, 0x6335, 0x3F16, 0x6336, 0x6336, 0x1CA8,
+    0x6337, 0x6337, 0x3A63, 0x6338, 0x6338, 0x1CBA, 0x6339, 0x6339, 0x1CAB,
+    0x633A, 0x633A, 0x08CE, 0x633B, 0x633B, 0x1F04, 0x633C, 0x633C, 0x1CAE,
+    0x633D, 0x633D, 0x08D0, 0x633E, 0x633E, 0x08C7, 0x6340, 0x6340, 0x1CBC,
+    0x6341, 0x6341, 0x1CB0, 0x6342, 0x6342, 0x08CA, 0x6343, 0x6343, 0x1CA9,
+    0x6344, 0x6345, 0x1CA6, 0x6346, 0x6346, 0x08CB, 0x6347, 0x6347, 0x1CB6,
+    0x6348, 0x6348, 0x1CBD, 0x6349, 0x6349, 0x08CD, 0x634A, 0x634A, 0x1CAD,
+    0x634B, 0x634B, 0x1CAC, 0x634C, 0x634C, 0x08D5, 0x634D, 0x634D, 0x08D4,
+    0x634E, 0x634E, 0x08C6, 0x634F, 0x634F, 0x08CC, 0x6350, 0x6350, 0x08CF,
+    0x6351, 0x6351, 0x1CB9, 0x6354, 0x6354, 0x1CB3, 0x6355, 0x6355, 0x08C9,
+    0x6356, 0x6356, 0x1CA4, 0x6357, 0x6357, 0x1CBB, 0x6358, 0x6358, 0x1CB2,
+    0x6359, 0x6359, 0x1CB4, 0x635A, 0x635A, 0x1CB8, 0x6364, 0x6364, 0x3FC7,
+    0x6365, 0x6365, 0x1EEE, 0x6367, 0x6367, 0x0AA1, 0x6368, 0x6368, 0x0AB5,
+    0x6369, 0x6369, 0x0AB4, 0x636B, 0x636B, 0x0AA9, 0x636C, 0x636C, 0x418E,
+    0x636D, 0x636D, 0x1F00, 0x636E, 0x636E, 0x1EFC, 0x636F, 0x636F, 0x1EF9,
+    0x6370, 0x6370, 0x1F0B, 0x6371, 0x6371, 0x0AA4, 0x6372, 0x6372, 0x0A9C,
+    0x6375, 0x6375, 0x1EFE, 0x6376, 0x6376, 0x0C69, 0x6377, 0x6377, 0x0AA0,
+    0x6378, 0x6378, 0x1F06, 0x6379, 0x6379, 0x4367, 0x637A, 0x637A, 0x0AB6,
+    0x637B, 0x637B, 0x0AB3, 0x637C, 0x637C, 0x1F02, 0x637D, 0x637D, 0x1EF1,
+    0x637F, 0x637F, 0x3F4B, 0x6380, 0x6380, 0x0AB2, 0x6381, 0x6381, 0x1F08,
+    0x6382, 0x6382, 0x1EF0, 0x6383, 0x6383, 0x0AA7, 0x6384, 0x6384, 0x0AAB,
+    0x6385, 0x6385, 0x1F07, 0x6387, 0x6387, 0x1EFA, 0x6388, 0x6388, 0x0AAC,
+    0x6389, 0x6389, 0x0AA6, 0x638A, 0x638A, 0x1EEF, 0x638B, 0x638B, 0x4188,
+    0x638C, 0x638C, 0x0C5B, 0x638D, 0x638D, 0x1F0A, 0x638E, 0x638E, 0x1EF8,
+    0x638F, 0x638F, 0x0AB1, 0x6390, 0x6390, 0x1EFB, 0x6391, 0x6391, 0x1F09,
+    0x6392, 0x6392, 0x0AB0, 0x6394, 0x6394, 0x214C, 0x6396, 0x6396, 0x0A9D,
+    0x6397, 0x6397, 0x1EF6, 0x6398, 0x6398, 0x0AA2, 0x6399, 0x6399, 0x0AAD,
+    0x639B, 0x639B, 0x0AA8, 0x639C, 0x639C, 0x1EFF, 0x639D, 0x639D, 0x1EF5,
+    0x639E, 0x639E, 0x1EF3, 0x639F, 0x639F, 0x1F05, 0x63A0, 0x63A0, 0x0A9A,
+    0x63A1, 0x63A1, 0x0AAE, 0x63A2, 0x63A2, 0x0A9E, 0x63A3, 0x63A3, 0x0C5A,
+    0x63A4, 0x63A4, 0x1F03, 0x63A5, 0x63A5, 0x0A9F, 0x63A7, 0x63A7, 0x0A9B,
+    0x63A8, 0x63A8, 0x0AAA, 0x63A9, 0x63A9, 0x0AA5, 0x63AA, 0x63AA, 0x0AA3,
+    0x63AB, 0x63AB, 0x1EF7, 0x63AC, 0x63AC, 0x0AAF, 0x63AD, 0x63AD, 0x1EF4,
+    0x63AE, 0x63AE, 0x1F01, 0x63AF, 0x63AF, 0x1EFD, 0x63B0, 0x63B0, 0x214E,
+    0x63B1, 0x63B1, 0x214D, 0x63B9, 0x63B9, 0x3E9D, 0x63BD, 0x63BD, 0x1EF2,
+    0x63BE, 0x63BE, 0x215E, 0x63C0, 0x63C0, 0x0C5D, 0x63C1, 0x63C1, 0x46A8,
+    0x63C2, 0x63C2, 0x2164, 0x63C3, 0x63C3, 0x2153, 0x63C4, 0x63C4, 0x2161,
+    0x63C5, 0x63C5, 0x23E6, 0x63C6, 0x63C6, 0x0C60, 0x63C7, 0x63C7, 0x2165,
+    0x63C8, 0x63C8, 0x2168, 0x63C9, 0x63C9, 0x0C5F, 0x63CA, 0x63CA, 0x2156,
+    0x63CB, 0x63CB, 0x2167, 0x63CC, 0x63CC, 0x2166, 0x63CD, 0x63CD, 0x0C61,
+    0x63CE, 0x63CE, 0x214F, 0x63CF, 0x63CF, 0x0C5C, 0x63D0, 0x63D0, 0x0C64,
+    0x63D1, 0x63D1, 0x3A66, 0x63D2, 0x63D2, 0x0C62, 0x63D3, 0x63D3, 0x2163,
+    0x63D5, 0x63D5, 0x2159, 0x63D6, 0x63D6, 0x0C66, 0x63D7, 0x63D7, 0x216A,
+    0x63D8, 0x63D8, 0x2162, 0x63D9, 0x63D9, 0x216B, 0x63DA, 0x63DA, 0x0C6E,
+    0x63DB, 0x63DB, 0x0C6C, 0x63DC, 0x63DC, 0x2160, 0x63DD, 0x63DD, 0x215F,
+    0x63DE, 0x63DE, 0x3E60, 0x63DF, 0x63DF, 0x215D, 0x63E0, 0x63E0, 0x2157,
+    0x63E1, 0x63E1, 0x0C65, 0x63E2, 0x63E2, 0x4641, 0x63E3, 0x63E3, 0x0C63,
+    0x63E4, 0x63E4, 0x1CAA, 0x63E5, 0x63E5, 0x2150, 0x63E6, 0x63E6, 0x489F,
+    0x63E7, 0x63E7, 0x2404, 0x63E8, 0x63E8, 0x2151, 0x63E9, 0x63E9, 0x0C5E,
+    0x63EA, 0x63EA, 0x0C6B, 0x63EB, 0x63EB, 0x23E8, 0x63ED, 0x63EE, 0x0C67,
+    0x63EF, 0x63EF, 0x2152, 0x63F0, 0x63F0, 0x2169, 0x63F1, 0x63F1, 0x23E7,
+    0x63F2, 0x63F2, 0x215A, 0x63F3, 0x63F3, 0x2155, 0x63F4, 0x63F4, 0x0C6A,
+    0x63F5, 0x63F5, 0x215B, 0x63F6, 0x63F6, 0x2158, 0x63F8, 0x63F8, 0x4192,
+    0x63F9, 0x63F9, 0x0C6F, 0x63FB, 0x63FB, 0x4642, 0x63FC, 0x63FC, 0x3E9C,
+    0x63FE, 0x63FE, 0x3E9E, 0x6406, 0x6406, 0x0E2A, 0x6407, 0x6407, 0x4643,
+    0x6409, 0x6409, 0x23EB, 0x640A, 0x640A, 0x23FE, 0x640B, 0x640B, 0x2403,
+    0x640C, 0x640C, 0x23F7, 0x640D, 0x640D, 0x0E26, 0x640E, 0x640E, 0x2408,
+    0x640F, 0x640F, 0x0E23, 0x6410, 0x6410, 0x23E9, 0x6412, 0x6412, 0x23EA,
+    0x6413, 0x6413, 0x0E1C, 0x6414, 0x6414, 0x0E25, 0x6415, 0x6415, 0x23F1,
+    0x6416, 0x6417, 0x0E28, 0x6418, 0x6418, 0x23F2, 0x641A, 0x641A, 0x23FF,
+    0x641B, 0x641B, 0x2405, 0x641C, 0x641C, 0x0E24, 0x641E, 0x641E, 0x0E1E,
+    0x641F, 0x641F, 0x23F0, 0x6420, 0x6420, 0x23EC, 0x6421, 0x6421, 0x2407,
+    0x6422, 0x6423, 0x23F5, 0x6424, 0x6424, 0x23ED, 0x6425, 0x6425, 0x2401,
+    0x6426, 0x6426, 0x23F8, 0x6427, 0x6427, 0x2402, 0x6428, 0x6428, 0x23FA,
+    0x642A, 0x642A, 0x0E1F, 0x642B, 0x642B, 0x2699, 0x642C, 0x642C, 0x0E22,
+    0x642D, 0x642D, 0x0E20, 0x642E, 0x642E, 0x2406, 0x642F, 0x642F, 0x23FD,
+    0x6430, 0x6430, 0x23F9, 0x6432, 0x6432, 0x45D9, 0x6433, 0x6433, 0x23EE,
+    0x6434, 0x6434, 0x0FE4, 0x6435, 0x6435, 0x23FC, 0x6436, 0x6436, 0x0E27,
+    0x6437, 0x6437, 0x23F4, 0x6438, 0x6438, 0x4191, 0x6439, 0x6439, 0x23F3,
+    0x643A, 0x643A, 0x419D, 0x643B, 0x643B, 0x3A6B, 0x643D, 0x643D, 0x0E21,
+    0x643E, 0x643E, 0x0E1D, 0x643F, 0x643F, 0x26AE, 0x6440, 0x6440, 0x2400,
+    0x6441, 0x6441, 0x23FB, 0x6443, 0x6443, 0x23EF, 0x644B, 0x644B, 0x26A9,
+    0x644D, 0x644D, 0x269A, 0x644E, 0x644E, 0x26A5, 0x6450, 0x6450, 0x26AC,
+    0x6451, 0x6451, 0x0FE2, 0x6452, 0x6452, 0x0C6D, 0x6453, 0x6453, 0x26AA,
+    0x6454, 0x6454, 0x0FDD, 0x6458, 0x6458, 0x0FDC, 0x6459, 0x6459, 0x26B1,
+    0x645A, 0x645A, 0x43C2, 0x645B, 0x645B, 0x269B, 0x645C, 0x645C, 0x26A8,
+    0x645D, 0x645D, 0x269C, 0x645E, 0x645E, 0x26A7, 0x645F, 0x645F, 0x0FE0,
+    0x6460, 0x6460, 0x26AB, 0x6461, 0x6461, 0x215C, 0x6465, 0x6465, 0x26B2,
+    0x6466, 0x6466, 0x26A3, 0x6467, 0x6467, 0x0FE3, 0x6468, 0x6468, 0x28EE,
+    0x6469, 0x6469, 0x1159, 0x646B, 0x646B, 0x26B0, 0x646C, 0x646C, 0x26AF,
+    0x646D, 0x646D, 0x0FE5, 0x646E, 0x646E, 0x28E1, 0x646F, 0x646F, 0x115A,
+    0x6470, 0x6470, 0x28E2, 0x6471, 0x6471, 0x3A5B, 0x6472, 0x6473, 0x269F,
+    0x6474, 0x6474, 0x269D, 0x6475, 0x6475, 0x26A2, 0x6476, 0x6476, 0x269E,
+    0x6477, 0x6477, 0x26B3, 0x6478, 0x6478, 0x0FDF, 0x6479, 0x6479, 0x115B,
+    0x647A, 0x647A, 0x0FE1, 0x647B, 0x647B, 0x0FE6, 0x647C, 0x647C, 0x436C,
+    0x647D, 0x647D, 0x26A1, 0x647F, 0x647F, 0x26AD, 0x6482, 0x6482, 0x26A6,
+    0x6485, 0x6485, 0x28E5, 0x6487, 0x6487, 0x0FDB, 0x6488, 0x6488, 0x115E,
+    0x6489, 0x6489, 0x2B54, 0x648A, 0x648A, 0x28EA, 0x648B, 0x648B, 0x28E9,
+    0x648C, 0x648C, 0x28EB, 0x648D, 0x648D, 0x4323, 0x648F, 0x648F, 0x28E8,
+    0x6490, 0x6490, 0x115F, 0x6491, 0x6491, 0x43C3, 0x6492, 0x6492, 0x1165,
+    0x6493, 0x6493, 0x1162, 0x6495, 0x6495, 0x1163, 0x6496, 0x6496, 0x28E3,
+    0x6497, 0x6497, 0x28E6, 0x6498, 0x6498, 0x28F0, 0x6499, 0x6499, 0x116B,
+    0x649A, 0x649A, 0x1169, 0x649C, 0x649C, 0x28E7, 0x649D, 0x649D, 0x2154,
+    0x649E, 0x649E, 0x115C, 0x649F, 0x649F, 0x28ED, 0x64A0, 0x64A0, 0x28E4,
+    0x64A2, 0x64A2, 0x116C, 0x64A3, 0x64A3, 0x28EC, 0x64A4, 0x64A4, 0x0FDE,
+    0x64A5, 0x64A5, 0x1161, 0x64A6, 0x64A6, 0x26A4, 0x64A9, 0x64A9, 0x1164,
+    0x64AB, 0x64AB, 0x1168, 0x64AC, 0x64AC, 0x116A, 0x64AD, 0x64AD, 0x1167,
+    0x64AE, 0x64AE, 0x1166, 0x64AF, 0x64AF, 0x42E1, 0x64B0, 0x64B0, 0x1160,
+    0x64B1, 0x64B1, 0x28EF, 0x64B2, 0x64B2, 0x115D, 0x64B3, 0x64B3, 0x116D,
+    0x64B4, 0x64B4, 0x4340, 0x64B6, 0x64B6, 0x3A64, 0x64BB, 0x64BC, 0x12BB,
+    0x64BD, 0x64BD, 0x2B53, 0x64BE, 0x64BE, 0x12C5, 0x64BF, 0x64BF, 0x12C2,
+    0x64C0, 0x64C0, 0x4645, 0x64C1, 0x64C1, 0x12B9, 0x64C2, 0x64C2, 0x12C0,
+    0x64C3, 0x64C3, 0x2B55, 0x64C4, 0x64C4, 0x12BE, 0x64C5, 0x64C5, 0x12B8,
+    0x64C7, 0x64C7, 0x12BF, 0x64C9, 0x64C9, 0x2B52, 0x64CA, 0x64CA, 0x13D8,
+    0x64CB, 0x64CB, 0x12BA, 0x64CD, 0x64CD, 0x12C1, 0x64CE, 0x64CE, 0x13D7,
+    0x64CF, 0x64CF, 0x2B51, 0x64D0, 0x64D0, 0x2B50, 0x64D2, 0x64D2, 0x12C3,
+    0x64D3, 0x64D3, 0x3F03, 0x64D4, 0x64D4, 0x12C4, 0x64D6, 0x64D6, 0x2B4F,
+    0x64D7, 0x64D7, 0x2B4E, 0x64D8, 0x64D8, 0x13D9, 0x64D9, 0x64D9, 0x2B58,
+    0x64DA, 0x64DA, 0x12BD, 0x64DB, 0x64DB, 0x2B56, 0x64DD, 0x64DD, 0x431E,
+    0x64E0, 0x64E0, 0x13DA, 0x64E1, 0x64E1, 0x4199, 0x64E2, 0x64E2, 0x13DF,
+    0x64E3, 0x64E3, 0x2D6A, 0x64E4, 0x64E4, 0x2D6C, 0x64E5, 0x64E5, 0x419A,
+    0x64E6, 0x64E6, 0x13DC, 0x64E7, 0x64E7, 0x37A8, 0x64E8, 0x64E8, 0x2D6D,
+    0x64E9, 0x64E9, 0x2D69, 0x64EA, 0x64EA, 0x434A, 0x64EB, 0x64EB, 0x2D6B,
+    0x64EC, 0x64EC, 0x13DD, 0x64ED, 0x64ED, 0x13E0, 0x64EF, 0x64EF, 0x2D68,
+    0x64F0, 0x64F0, 0x13DB, 0x64F1, 0x64F1, 0x13DE, 0x64F2, 0x64F2, 0x14D3,
+    0x64F3, 0x64F3, 0x2B57, 0x64F4, 0x64F4, 0x14D2, 0x64F7, 0x64F7, 0x14D8,
+    0x64F8, 0x64F8, 0x2F2B, 0x64FA, 0x64FB, 0x14D6, 0x64FC, 0x64FC, 0x2F2E,
+    0x64FD, 0x64FD, 0x2F2A, 0x64FE, 0x64FE, 0x14D4, 0x64FF, 0x64FF, 0x2F28,
+    0x6500, 0x6500, 0x1582, 0x6501, 0x6501, 0x2F2C, 0x6503, 0x6503, 0x2F2D,
+    0x6504, 0x6504, 0x2F29, 0x6506, 0x6506, 0x14D5, 0x6507, 0x6507, 0x3090,
+    0x6509, 0x6509, 0x3093, 0x650A, 0x650A, 0x4536, 0x650C, 0x650C, 0x3094,
+    0x650D, 0x650D, 0x3092, 0x650E, 0x650E, 0x3095, 0x650F, 0x650F, 0x1583,
+    0x6510, 0x6510, 0x3091, 0x6511, 0x6511, 0x3AA9, 0x6513, 0x6513, 0x31D7,
+    0x6514, 0x6514, 0x1617, 0x6515, 0x6515, 0x31D6, 0x6516, 0x6516, 0x31D5,
+    0x6517, 0x6517, 0x31D4, 0x6518, 0x6518, 0x1616, 0x6519, 0x6519, 0x1618,
+    0x651B, 0x651B, 0x32D2, 0x651C, 0x651C, 0x1673, 0x651D, 0x651D, 0x1672,
+    0x651E, 0x651E, 0x4187, 0x651F, 0x651F, 0x3EC0, 0x6520, 0x6520, 0x3382,
+    0x6521, 0x6521, 0x3381, 0x6522, 0x6522, 0x3384, 0x6523, 0x6523, 0x16F9,
+    0x6524, 0x6524, 0x16C5, 0x6525, 0x6525, 0x341B, 0x6526, 0x6526, 0x3383,
+    0x6529, 0x6529, 0x341A, 0x652A, 0x652A, 0x16FB, 0x652B, 0x652B, 0x16FA,
+    0x652C, 0x652C, 0x1721, 0x652D, 0x652D, 0x3484, 0x652E, 0x652E, 0x34CA,
+    0x652F, 0x652F, 0x02D5, 0x6530, 0x6530, 0x3E62, 0x6532, 0x6532, 0x216C,
+    0x6533, 0x6533, 0x2B59, 0x6534, 0x6534, 0x022C, 0x6535, 0x6535, 0x44ED,
+    0x6536, 0x6536, 0x03D7, 0x6537, 0x6537, 0x17F6, 0x6538, 0x6538, 0x04B9,
+    0x6539, 0x6539, 0x04B7, 0x653B, 0x653B, 0x04B8, 0x653D, 0x653D, 0x19A1,
+    0x653E, 0x653E, 0x05F3, 0x653F, 0x653F, 0x0741, 0x6541, 0x6541, 0x1B01,
+    0x6543, 0x6543, 0x1B02, 0x6545, 0x6545, 0x0742, 0x6546, 0x6546, 0x1CBF,
+    0x6548, 0x6549, 0x08D6, 0x654A, 0x654A, 0x1CBE, 0x654D, 0x654D, 0x419F,
+    0x654F, 0x654F, 0x0ABD, 0x6551, 0x6551, 0x0AB9, 0x6553, 0x6553, 0x1F0C,
+    0x6554, 0x6554, 0x0AC0, 0x6555, 0x6555, 0x0ABF, 0x6556, 0x6556, 0x0AB8,
+    0x6557, 0x6557, 0x0ABB, 0x6558, 0x6558, 0x0ABE, 0x6559, 0x6559, 0x0ABA,
+    0x655C, 0x655C, 0x2170, 0x655D, 0x655D, 0x0AB7, 0x655E, 0x655E, 0x0C70,
+    0x655F, 0x655F, 0x41A5, 0x6562, 0x6563, 0x0C72, 0x6564, 0x6564, 0x216F,
+    0x6565, 0x6565, 0x2172, 0x6566, 0x6566, 0x0C71, 0x6567, 0x6567, 0x216D,
+    0x6568, 0x6568, 0x2171, 0x656A, 0x656A, 0x216E, 0x656B, 0x656B, 0x3A6C,
+    0x656C, 0x656C, 0x0E2B, 0x656D, 0x656D, 0x41A4, 0x656F, 0x656F, 0x2409,
+    0x6572, 0x6572, 0x0FE7, 0x6573, 0x6573, 0x26B4, 0x6574, 0x6574, 0x12C6,
+    0x6575, 0x6575, 0x116E, 0x6576, 0x6576, 0x28F1, 0x6577, 0x6578, 0x116F,
+    0x6579, 0x6579, 0x28F3, 0x657A, 0x657A, 0x28F2, 0x657B, 0x657B, 0x28F4,
+    0x657C, 0x657C, 0x2B5B, 0x657F, 0x657F, 0x2B5A, 0x6580, 0x6580, 0x2D6F,
+    0x6581, 0x6581, 0x2D6E, 0x6582, 0x6583, 0x13E1, 0x6584, 0x6584, 0x3096,
+    0x6585, 0x6585, 0x41A3, 0x6586, 0x6586, 0x4648, 0x6587, 0x6587, 0x02D6,
+    0x6588, 0x6588, 0x410B, 0x6589, 0x6589, 0x4554, 0x658C, 0x658C, 0x2173,
+    0x6590, 0x6590, 0x0C75, 0x6591, 0x6591, 0x0C74, 0x6592, 0x6592, 0x240A,
+    0x6594, 0x6594, 0x2F2F, 0x6595, 0x6595, 0x1674, 0x6596, 0x6596, 0x341C,
+    0x6597, 0x6597, 0x02D7, 0x6599, 0x6599, 0x08D8, 0x659B, 0x659B, 0x0AC2,
+    0x659C, 0x659C, 0x0AC1, 0x659D, 0x659E, 0x2174, 0x659F, 0x659F, 0x0E2C,
+    0x65A0, 0x65A0, 0x26B5, 0x65A1, 0x65A1, 0x0FE8, 0x65A2, 0x65A2, 0x2B5C,
+    0x65A4, 0x65A4, 0x02D8, 0x65A5, 0x65A5, 0x0346, 0x65A7, 0x65A7, 0x05F4,
+    0x65A8, 0x65A8, 0x19A2, 0x65AA, 0x65AA, 0x1B03, 0x65AB, 0x65AB, 0x0743,
+    0x65AC, 0x65AC, 0x0AC3, 0x65AE, 0x65AE, 0x2176, 0x65AF, 0x65AF, 0x0C76,
+    0x65B0, 0x65B0, 0x0E2D, 0x65B2, 0x65B3, 0x28F5, 0x65B5, 0x65B5, 0x41A7,
+    0x65B6, 0x65B6, 0x2D70, 0x65B7, 0x65B7, 0x14D9, 0x65B8, 0x65B8, 0x34CB,
+    0x65B9, 0x65B9, 0x02D9, 0x65BB, 0x65BB, 0x19A3, 0x65BC, 0x65BC, 0x05F5,
+    0x65BD, 0x65BD, 0x0744, 0x65BE, 0x65BE, 0x3E3B, 0x65BF, 0x65BF, 0x1B04,
+    0x65C1, 0x65C1, 0x08D9, 0x65C2, 0x65C2, 0x1CC3, 0x65C3, 0x65C4, 0x1CC1,
+    0x65C5, 0x65C5, 0x08DA, 0x65C6, 0x65C6, 0x1CC0, 0x65CB, 0x65CC, 0x0AC5,
+    0x65CD, 0x65CD, 0x1F0D, 0x65CE, 0x65CE, 0x0AC7, 0x65CF, 0x65CF, 0x0AC4,
+    0x65D0, 0x65D0, 0x2177, 0x65D1, 0x65D1, 0x41AA, 0x65D2, 0x65D2, 0x2178,
+    0x65D3, 0x65D3, 0x240B, 0x65D4, 0x65D4, 0x3BA8, 0x65D6, 0x65D6, 0x0FEA,
+    0x65D7, 0x65D7, 0x0FE9, 0x65DA, 0x65DA, 0x2D71, 0x65DB, 0x65DB, 0x2F30,
+    0x65DD, 0x65DD, 0x3098, 0x65DE, 0x65DE, 0x3097, 0x65DF, 0x65DF, 0x31D8,
+    0x65E0, 0x65E0, 0x022D, 0x65E1, 0x65E1, 0x1789, 0x65E2, 0x65E2, 0x0745,
+    0x65E3, 0x65E3, 0x41AE, 0x65E5, 0x65E5, 0x02DA, 0x65E6, 0x65E6, 0x0347,
+    0x65E8, 0x65E8, 0x03D9, 0x65E9, 0x65E9, 0x03D8, 0x65EC, 0x65ED, 0x03DA,
+    0x65EE, 0x65EE, 0x17F8, 0x65EF, 0x65EF, 0x17F7, 0x65F0, 0x65F0, 0x189E,
+    0x65F1, 0x65F1, 0x04BA, 0x65F2, 0x65F2, 0x18A1, 0x65F3, 0x65F3, 0x18A0,
+    0x65F4, 0x65F4, 0x189F, 0x65F5, 0x65F5, 0x18A2, 0x65FA, 0x65FA, 0x05F6,
+    0x65FB, 0x65FB, 0x19A9, 0x65FC, 0x65FC, 0x19A5, 0x65FD, 0x65FD, 0x19AE,
+    0x65FF, 0x65FF, 0x464A, 0x6600, 0x6600, 0x05FD, 0x6602, 0x6602, 0x05FB,
+    0x6603, 0x6603, 0x19AA, 0x6604, 0x6604, 0x19A6, 0x6605, 0x6605, 0x19AD,
+    0x6606, 0x6606, 0x05FA, 0x6607, 0x6607, 0x0601, 0x6608, 0x6608, 0x19A8,
+    0x6609, 0x6609, 0x19A4, 0x660A, 0x660A, 0x0600, 0x660B, 0x660B, 0x19AB,
+    0x660C, 0x660C, 0x05F9, 0x660D, 0x660D, 0x19AC, 0x660E, 0x660E, 0x05FC,
+    0x660F, 0x660F, 0x05FE, 0x6610, 0x6610, 0x19B0, 0x6611, 0x6611, 0x19AF,
+    0x6612, 0x6612, 0x19A7, 0x6613, 0x6613, 0x05F8, 0x6614, 0x6614, 0x05F7,
+    0x6615, 0x6615, 0x05FF, 0x6618, 0x6618, 0x41B1, 0x661C, 0x661C, 0x1B09,
+    0x661D, 0x661D, 0x1B0F, 0x661E, 0x661E, 0x3A93, 0x661F, 0x661F, 0x074B,
+    0x6620, 0x6620, 0x0748, 0x6621, 0x6621, 0x1B06, 0x6622, 0x6622, 0x1B0B,
+    0x6623, 0x6623, 0x4295, 0x6624, 0x6624, 0x074E, 0x6625, 0x6625, 0x0746,
+    0x6626, 0x6626, 0x1B0A, 0x6627, 0x6627, 0x0749, 0x6628, 0x6628, 0x074C,
+    0x662B, 0x662B, 0x1B0D, 0x662D, 0x662D, 0x0747, 0x662E, 0x662E, 0x1B12,
+    0x662F, 0x662F, 0x074A, 0x6630, 0x6630, 0x3A8D, 0x6631, 0x6631, 0x074D,
+    0x6632, 0x6632, 0x1B07, 0x6633, 0x6633, 0x1B0C, 0x6634, 0x6634, 0x1B10,
+    0x6635, 0x6635, 0x1B08, 0x6636, 0x6636, 0x1B05, 0x6639, 0x6639, 0x1B11,
+    0x663A, 0x663A, 0x1B0E, 0x6641, 0x6641, 0x08E2, 0x6642, 0x6642, 0x08DB,
+    0x6643, 0x6643, 0x08DE, 0x6644, 0x6644, 0x41B4, 0x6645, 0x6645, 0x08E1,
+    0x6647, 0x6647, 0x1CC6, 0x6648, 0x6648, 0x3D99, 0x6649, 0x6649, 0x08DC,
+    0x664A, 0x664A, 0x1CC4, 0x664B, 0x664B, 0x41B7, 0x664C, 0x664C, 0x08E0,
+    0x664F, 0x664F, 0x08DD, 0x6651, 0x6651, 0x1CC7, 0x6652, 0x6652, 0x08DF,
+    0x6653, 0x6653, 0x464B, 0x6657, 0x6657, 0x409B, 0x6659, 0x6659, 0x1F11,
+    0x665A, 0x665A, 0x0AC9, 0x665B, 0x665B, 0x1F10, 0x665C, 0x665C, 0x1F12,
+    0x665D, 0x665D, 0x0AC8, 0x665E, 0x665E, 0x0ACD, 0x665F, 0x665F, 0x1CC5,
+    0x6661, 0x6661, 0x1F0F, 0x6662, 0x6662, 0x1F13, 0x6663, 0x6663, 0x3A90,
+    0x6664, 0x6664, 0x0ACA, 0x6665, 0x6665, 0x1F0E, 0x6666, 0x6666, 0x0ACC,
+    0x6667, 0x6667, 0x41B9, 0x6668, 0x6668, 0x0ACB, 0x666A, 0x666A, 0x217F,
+    0x666B, 0x666B, 0x3A8B, 0x666C, 0x666C, 0x217A, 0x666E, 0x666E, 0x0C77,
+    0x666F, 0x666F, 0x0C7B, 0x6670, 0x6670, 0x0C78, 0x6671, 0x6671, 0x217D,
+    0x6672, 0x6672, 0x2180, 0x6673, 0x6673, 0x41BB, 0x6674, 0x6674, 0x0C79,
+    0x6676, 0x6676, 0x0C7A, 0x6677, 0x6677, 0x0C7F, 0x6678, 0x6678, 0x2414,
+    0x6679, 0x6679, 0x217E, 0x667A, 0x667A, 0x0C7D, 0x667B, 0x667B, 0x217B,
+    0x667C, 0x667C, 0x2179, 0x667D, 0x667D, 0x469B, 0x667E, 0x667E, 0x0C7E,
+    0x6680, 0x6680, 0x217C, 0x6684, 0x6684, 0x0E33, 0x6685, 0x6685, 0x4162,
+    0x6686, 0x6686, 0x240C, 0x6687, 0x6688, 0x0E30, 0x6689, 0x6689, 0x0E2F,
+    0x668A, 0x668A, 0x2411, 0x668B, 0x668B, 0x2410, 0x668C, 0x668C, 0x240D,
+    0x668D, 0x668D, 0x0E35, 0x668E, 0x668E, 0x3A89, 0x6690, 0x6690, 0x240F,
+    0x6691, 0x6691, 0x0C7C, 0x6692, 0x6692, 0x464D, 0x6694, 0x6694, 0x2413,
+    0x6695, 0x6695, 0x240E, 0x6696, 0x6696, 0x0E32, 0x6697, 0x6697, 0x0E2E,
+    0x6698, 0x6698, 0x0E34, 0x6699, 0x6699, 0x2412, 0x669A, 0x669A, 0x3D3D,
+    0x669D, 0x669D, 0x0FED, 0x669F, 0x669F, 0x26B8, 0x66A0, 0x66A0, 0x26B7,
+    0x66A1, 0x66A1, 0x26B6, 0x66A2, 0x66A2, 0x0FEB, 0x66A4, 0x66A4, 0x40BA,
+    0x66A8, 0x66A8, 0x0FEC, 0x66A9, 0x66A9, 0x28F9, 0x66AA, 0x66AA, 0x28FC,
+    0x66AB, 0x66AB, 0x1172, 0x66AD, 0x66AD, 0x4948, 0x66AE, 0x66AE, 0x1171,
+    0x66AF, 0x66AF, 0x28FD, 0x66B0, 0x66B0, 0x28F8, 0x66B1, 0x66B1, 0x1174,
+    0x66B2, 0x66B2, 0x28FA, 0x66B3, 0x66B3, 0x40B5, 0x66B4, 0x66B4, 0x1173,
+    0x66B5, 0x66B5, 0x28F7, 0x66B6, 0x66B6, 0x3E13, 0x66B7, 0x66B7, 0x28FB,
+    0x66B8, 0x66B8, 0x12CC, 0x66B9, 0x66B9, 0x12C9, 0x66BA, 0x66BA, 0x2B65,
+    0x66BB, 0x66BB, 0x2B64, 0x66BD, 0x66BD, 0x2B63, 0x66BE, 0x66BE, 0x2B5E,
+    0x66BF, 0x66BF, 0x3D9A, 0x66C0, 0x66C0, 0x2B5F, 0x66C4, 0x66C4, 0x12CA,
+    0x66C6, 0x66C6, 0x12C7, 0x66C7, 0x66C7, 0x12CB, 0x66C8, 0x66C8, 0x2B5D,
+    0x66C9, 0x66C9, 0x12C8, 0x66CA, 0x66CB, 0x2B60, 0x66CC, 0x66CC, 0x2B66,
+    0x66CD, 0x66CD, 0x40B8, 0x66CE, 0x66CE, 0x3A77, 0x66CF, 0x66CF, 0x2B62,
+    0x66D2, 0x66D2, 0x2D72, 0x66D6, 0x66D6, 0x13E4, 0x66D8, 0x66D8, 0x2F33,
+    0x66D9, 0x66D9, 0x13E3, 0x66DA, 0x66DB, 0x2F31, 0x66DC, 0x66DC, 0x14DA,
+    0x66DD, 0x66DD, 0x1585, 0x66DE, 0x66DE, 0x3099, 0x66E0, 0x66E0, 0x1584,
+    0x66E3, 0x66E4, 0x31DA, 0x66E6, 0x66E6, 0x1619, 0x66E8, 0x66E8, 0x31D9,
+    0x66E9, 0x66E9, 0x1675, 0x66EB, 0x66EB, 0x341D, 0x66EC, 0x66EC, 0x16FC,
+    0x66ED, 0x66EE, 0x3485, 0x66F0, 0x66F0, 0x02DB, 0x66F1, 0x66F1, 0x3E84,
+    0x66F2, 0x66F3, 0x03DC, 0x66F4, 0x66F4, 0x04BB, 0x66F6, 0x66F6, 0x19B1,
+    0x66F7, 0x66F7, 0x074F, 0x66F8, 0x66F8, 0x08E3, 0x66F9, 0x66F9, 0x0ACE,
+    0x66FC, 0x66FC, 0x0A1F, 0x66FE, 0x66FF, 0x0C80, 0x6700, 0x6700, 0x0BF0,
+    0x6701, 0x6701, 0x2181, 0x6702, 0x6702, 0x41C4, 0x6703, 0x6703, 0x0E36,
+    0x6704, 0x6704, 0x26BA, 0x6705, 0x6705, 0x26B9, 0x6708, 0x6708, 0x02DC,
+    0x6709, 0x6709, 0x03DE, 0x670A, 0x670A, 0x19B2, 0x670B, 0x670B, 0x0603,
+    0x670C, 0x670C, 0x3FE2, 0x670D, 0x670D, 0x0602, 0x670E, 0x670E, 0x3DA1,
+    0x670F, 0x6710, 0x1B13, 0x6712, 0x6713, 0x1CC8, 0x6714, 0x6715, 0x08E4,
+    0x6716, 0x6716, 0x464F, 0x6717, 0x6717, 0x08E6, 0x6718, 0x6718, 0x1F14,
+    0x671B, 0x671B, 0x0AD0, 0x671D, 0x671D, 0x0C83, 0x671E, 0x671E, 0x3D8B,
+    0x671F, 0x671F, 0x0C82, 0x6720, 0x6720, 0x2415, 0x6721, 0x6721, 0x2522,
+    0x6722, 0x6722, 0x26BB, 0x6723, 0x6723, 0x2B67, 0x6725, 0x6725, 0x379F,
+    0x6726, 0x6726, 0x14DB, 0x6727, 0x6727, 0x161A, 0x6728, 0x6728, 0x02DD,
+    0x672A, 0x672B, 0x034A, 0x672C, 0x672C, 0x0349, 0x672D, 0x672D, 0x034C,
+    0x672E, 0x672E, 0x0348, 0x6731, 0x6731, 0x03E1, 0x6733, 0x6733, 0x1800,
+    0x6734, 0x6734, 0x03E0, 0x6735, 0x6735, 0x03E2, 0x6736, 0x6736, 0x3E41,
+    0x6738, 0x6738, 0x17FB, 0x6739, 0x6739, 0x17FA, 0x673A, 0x673A, 0x17FD,
+    0x673B, 0x673B, 0x17FC, 0x673C, 0x673C, 0x17FF, 0x673D, 0x673D, 0x03DF,
+    0x673E, 0x673E, 0x17F9, 0x673F, 0x673F, 0x17FE, 0x6744, 0x6744, 0x401B,
+    0x6745, 0x6745, 0x18A3, 0x6746, 0x6746, 0x04C5, 0x6747, 0x6747, 0x18A4,
+    0x6748, 0x6748, 0x18A8, 0x6749, 0x6749, 0x04C4, 0x674B, 0x674B, 0x18AC,
+    0x674C, 0x674C, 0x18A7, 0x674D, 0x674D, 0x18AA, 0x674E, 0x6751, 0x04BD,
+    0x6753, 0x6753, 0x04C7, 0x6755, 0x6755, 0x18A6, 0x6756, 0x6756, 0x04C2,
+    0x6757, 0x6757, 0x04C8, 0x6759, 0x6759, 0x18A5, 0x675A, 0x675A, 0x18AB,
+    0x675C, 0x675C, 0x04C1, 0x675D, 0x675D, 0x18A9, 0x675E, 0x675E, 0x04C3,
+    0x675F, 0x675F, 0x04BC, 0x6760, 0x6760, 0x04C6, 0x6761, 0x6761, 0x3D66,
+    0x6762, 0x6762, 0x41CB, 0x6767, 0x6767, 0x41CA, 0x676A, 0x676A, 0x0618,
+    0x676C, 0x676C, 0x19B4, 0x676D, 0x676D, 0x0604, 0x676F, 0x6770, 0x060E,
+    0x6771, 0x6771, 0x0607, 0x6772, 0x6772, 0x0619, 0x6773, 0x6773, 0x0609,
+    0x6774, 0x6774, 0x19BC, 0x6775, 0x6775, 0x0614, 0x6776, 0x6776, 0x19B7,
+    0x6777, 0x6777, 0x060A, 0x6778, 0x6779, 0x19C6, 0x677A, 0x677A, 0x19BF,
+    0x677B, 0x677B, 0x19B8, 0x677C, 0x677C, 0x0617, 0x677D, 0x677D, 0x19C4,
+    0x677E, 0x677E, 0x0612, 0x677F, 0x677F, 0x0610, 0x6781, 0x6781, 0x19C5,
+    0x6783, 0x6783, 0x19C3, 0x6784, 0x6784, 0x19BB, 0x6785, 0x6785, 0x19B3,
+    0x6786, 0x6786, 0x19BA, 0x6787, 0x6787, 0x060B, 0x6789, 0x6789, 0x0611,
+    0x678B, 0x678B, 0x0605, 0x678C, 0x678C, 0x19BE, 0x678D, 0x678D, 0x19BD,
+    0x678E, 0x678E, 0x19B5, 0x678F, 0x678F, 0x46C1, 0x6790, 0x6790, 0x0613,
+    0x6791, 0x6791, 0x19C1, 0x6792, 0x6792, 0x19B6, 0x6793, 0x6793, 0x0616,
+    0x6794, 0x6794, 0x19C8, 0x6795, 0x6795, 0x0606, 0x6797, 0x6797, 0x060D,
+    0x6798, 0x6798, 0x19B9, 0x6799, 0x6799, 0x19C2, 0x679A, 0x679A, 0x0615,
+    0x679C, 0x679C, 0x0608, 0x679D, 0x679D, 0x060C, 0x679F, 0x679F, 0x19C0,
+    0x67A0, 0x67A0, 0x3D7A, 0x67A4, 0x67A4, 0x4651, 0x67AC, 0x67AC, 0x41E3,
+    0x67AE, 0x67AE, 0x1B34, 0x67AF, 0x67AF, 0x0757, 0x67B0, 0x67B0, 0x0764,
+    0x67B1, 0x67B1, 0x41F4, 0x67B2, 0x67B2, 0x1B2F, 0x67B3, 0x67B3, 0x1B25,
+    0x67B4, 0x67B4, 0x075D, 0x67B5, 0x67B5, 0x1B23, 0x67B6, 0x67B6, 0x0756,
+    0x67B7, 0x67B7, 0x1B1E, 0x67B8, 0x67B8, 0x0760, 0x67B9, 0x67B9, 0x1B2B,
+    0x67BA, 0x67BA, 0x1B18, 0x67BB, 0x67BB, 0x1B1A, 0x67BF, 0x67BF, 0x37FA,
+    0x67C0, 0x67C0, 0x1B1D, 0x67C1, 0x67C1, 0x1B15, 0x67C2, 0x67C2, 0x1B2A,
+    0x67C3, 0x67C3, 0x1B3A, 0x67C4, 0x67C4, 0x075B, 0x67C5, 0x67C5, 0x1B1F,
+    0x67C6, 0x67C6, 0x1B31, 0x67C8, 0x67C8, 0x1B17, 0x67C9, 0x67CA, 0x1B38,
+    0x67CB, 0x67CB, 0x1B3C, 0x67CC, 0x67CC, 0x1B33, 0x67CD, 0x67CD, 0x1B24,
+    0x67CE, 0x67CE, 0x1B2C, 0x67CF, 0x67CF, 0x0761, 0x67D0, 0x67D0, 0x0754,
+    0x67D1, 0x67D1, 0x075C, 0x67D2, 0x67D2, 0x0768, 0x67D3, 0x67D3, 0x0751,
+    0x67D4, 0x67D4, 0x0753, 0x67D6, 0x67D6, 0x3B58, 0x67D7, 0x67D7, 0x41CE,
+    0x67D8, 0x67D8, 0x1B1C, 0x67D9, 0x67D9, 0x0765, 0x67DA, 0x67DA, 0x075E,
+    0x67DB, 0x67DB, 0x1B36, 0x67DC, 0x67DC, 0x1B19, 0x67DD, 0x67DD, 0x0767,
+    0x67DE, 0x67DE, 0x0762, 0x67DF, 0x67DF, 0x1B22, 0x67E2, 0x67E2, 0x0766,
+    0x67E3, 0x67E3, 0x1B29, 0x67E4, 0x67E4, 0x1B21, 0x67E5, 0x67E5, 0x075F,
+    0x67E6, 0x67E6, 0x1B35, 0x67E7, 0x67E7, 0x1B2D, 0x67E9, 0x67E9, 0x0759,
+    0x67EA, 0x67EA, 0x1B3B, 0x67EB, 0x67EB, 0x1B20, 0x67EC, 0x67EC, 0x0755,
+    0x67ED, 0x67ED, 0x1B32, 0x67EE, 0x67EE, 0x1B28, 0x67EF, 0x67EF, 0x075A,
+    0x67F0, 0x67F0, 0x1B2E, 0x67F1, 0x67F1, 0x0752, 0x67F2, 0x67F2, 0x1B16,
+    0x67F3, 0x67F3, 0x0763, 0x67F4, 0x67F4, 0x08F5, 0x67F5, 0x67F5, 0x0758,
+    0x67F6, 0x67F6, 0x1B27, 0x67F7, 0x67F7, 0x1B26, 0x67F8, 0x67F8, 0x1B1B,
+    0x67F9, 0x67F9, 0x3996, 0x67FA, 0x67FA, 0x1B37, 0x67FC, 0x67FC, 0x1B30,
+    0x67FE, 0x67FE, 0x4555, 0x67FF, 0x67FF, 0x0750, 0x6800, 0x6800, 0x43C7,
+    0x6801, 0x6801, 0x41D3, 0x6802, 0x6802, 0x3FC8, 0x6803, 0x6803, 0x3D6A,
+    0x6804, 0x6804, 0x4556, 0x680D, 0x680D, 0x4281, 0x6810, 0x6810, 0x399C,
+    0x6812, 0x6812, 0x1CDD, 0x6813, 0x6813, 0x08FC, 0x6814, 0x6814, 0x1CDE,
+    0x6816, 0x6816, 0x1CD2, 0x6817, 0x6817, 0x08F1, 0x6818, 0x6818, 0x08FD,
+    0x681A, 0x681A, 0x1CCB, 0x681B, 0x681B, 0x4072, 0x681C, 0x681C, 0x1CD4,
+    0x681D, 0x681D, 0x1CDC, 0x681E, 0x681E, 0x46C2, 0x681F, 0x681F, 0x1CCA,
+    0x6820, 0x6820, 0x1CE5, 0x6821, 0x6821, 0x08E7, 0x6822, 0x6822, 0x41D0,
+    0x6825, 0x6825, 0x1CE4, 0x6826, 0x6826, 0x1CDF, 0x6828, 0x6828, 0x1CE0,
+    0x6829, 0x6829, 0x08EF, 0x682A, 0x682A, 0x08FA, 0x682B, 0x682B, 0x1CD6,
+    0x682D, 0x682D, 0x1CD7, 0x682E, 0x682E, 0x1CE1, 0x682F, 0x682F, 0x1CD8,
+    0x6831, 0x6831, 0x1CD3, 0x6832, 0x6833, 0x1CCD, 0x6834, 0x6834, 0x1CDB,
+    0x6835, 0x6835, 0x1CD5, 0x6836, 0x6836, 0x3E2E, 0x6837, 0x6837, 0x421D,
+    0x6838, 0x6838, 0x08E8, 0x6839, 0x6839, 0x08EC, 0x683A, 0x683A, 0x1CE3,
+    0x683B, 0x683B, 0x1CCF, 0x683C, 0x683C, 0x08F8, 0x683D, 0x683D, 0x08F4,
+    0x683E, 0x683E, 0x4147, 0x6840, 0x6840, 0x08F7, 0x6841, 0x6841, 0x08FE,
+    0x6842, 0x6842, 0x08ED, 0x6843, 0x6843, 0x08F9, 0x6844, 0x6844, 0x1CDA,
+    0x6845, 0x6845, 0x08FB, 0x6846, 0x6846, 0x08EA, 0x6847, 0x6847, 0x3BEB,
+    0x6848, 0x6848, 0x08E9, 0x6849, 0x6849, 0x1CCC, 0x684A, 0x684A, 0x4653,
+    0x684B, 0x684B, 0x1CD0, 0x684C, 0x684C, 0x08F2, 0x684D, 0x684D, 0x1CE2,
+    0x684E, 0x684E, 0x1CD9, 0x684F, 0x684F, 0x1CD1, 0x6850, 0x6850, 0x08F6,
+    0x6851, 0x6851, 0x08F3, 0x6853, 0x6853, 0x08EB, 0x6854, 0x6854, 0x08EE,
+    0x6855, 0x6855, 0x3D90, 0x6856, 0x6856, 0x3814, 0x685D, 0x685D, 0x41D6,
+    0x6865, 0x6865, 0x4557, 0x686B, 0x686B, 0x1F29, 0x686D, 0x686E, 0x1F19,
+    0x686F, 0x686F, 0x1F1E, 0x6871, 0x6871, 0x1F2D, 0x6872, 0x6872, 0x1F2A,
+    0x6874, 0x6874, 0x1F23, 0x6875, 0x6875, 0x1F22, 0x6876, 0x6876, 0x0AD7,
+    0x6877, 0x6877, 0x1F26, 0x6878, 0x6878, 0x1F35, 0x6879, 0x6879, 0x1F15,
+    0x687B, 0x687B, 0x1F36, 0x687C, 0x687C, 0x1F28, 0x687D, 0x687D, 0x1F3A,
+    0x687E, 0x687E, 0x1F2E, 0x687F, 0x687F, 0x0AD6, 0x6880, 0x6880, 0x1F2C,
+    0x6881, 0x6881, 0x0AD1, 0x6882, 0x6882, 0x0AE6, 0x6883, 0x6883, 0x0ADC,
+    0x6884, 0x6884, 0x4654, 0x6885, 0x6885, 0x0AE0, 0x6886, 0x6886, 0x0ADF,
+    0x6887, 0x6887, 0x1F16, 0x6888, 0x6888, 0x46B7, 0x6889, 0x6889, 0x1F33,
+    0x688A, 0x688A, 0x1F39, 0x688B, 0x688B, 0x1F31, 0x688C, 0x688C, 0x1F38,
+    0x688F, 0x688F, 0x1F25, 0x6890, 0x6890, 0x1F17, 0x6891, 0x6891, 0x1F37,
+    0x6892, 0x6892, 0x1F27, 0x6893, 0x6893, 0x0AD4, 0x6894, 0x6894, 0x0AE1,
+    0x6896, 0x6896, 0x1F30, 0x6897, 0x6897, 0x0ADA, 0x6898, 0x6898, 0x3AAA,
+    0x689B, 0x689B, 0x1F2F, 0x689C, 0x689C, 0x1F18, 0x689D, 0x689D, 0x0AE2,
+    0x689F, 0x689F, 0x0AE4, 0x68A0, 0x68A0, 0x1F32, 0x68A1, 0x68A1, 0x0AE5,
+    0x68A2, 0x68A2, 0x0AD3, 0x68A3, 0x68A3, 0x1F1F, 0x68A4, 0x68A4, 0x1F34,
+    0x68A6, 0x68A6, 0x40E4, 0x68A7, 0x68A7, 0x0AD9, 0x68A8, 0x68A8, 0x0AE3,
+    0x68A9, 0x68A9, 0x1F21, 0x68AA, 0x68AA, 0x1F2B, 0x68AB, 0x68AB, 0x1F1C,
+    0x68AC, 0x68AC, 0x1F20, 0x68AD, 0x68AD, 0x0ADE, 0x68AE, 0x68AE, 0x1F1B,
+    0x68AF, 0x68AF, 0x0AD2, 0x68B0, 0x68B0, 0x0ADB, 0x68B1, 0x68B1, 0x0AD8,
+    0x68B2, 0x68B2, 0x1F24, 0x68B3, 0x68B3, 0x08F0, 0x68B4, 0x68B4, 0x2198,
+    0x68B5, 0x68B5, 0x0AD5, 0x68B6, 0x68B6, 0x3A9E, 0x68B9, 0x68B9, 0x3D14,
+    0x68BD, 0x68BD, 0x427C, 0x68C3, 0x68C3, 0x41DC, 0x68C4, 0x68C4, 0x0ADD,
+    0x68C5, 0x68C5, 0x3C2E, 0x68C6, 0x68C6, 0x219B, 0x68C7, 0x68C7, 0x21B1,
+    0x68C8, 0x68C8, 0x21A6, 0x68C9, 0x68C9, 0x0C97, 0x68CA, 0x68CA, 0x42EB,
+    0x68CB, 0x68CB, 0x0C92, 0x68CC, 0x68CC, 0x2195, 0x68CD, 0x68CD, 0x0C93,
+    0x68CE, 0x68CE, 0x21A5, 0x68D0, 0x68D0, 0x219E, 0x68D1, 0x68D1, 0x21AB,
+    0x68D2, 0x68D2, 0x0C8F, 0x68D3, 0x68D3, 0x2183, 0x68D4, 0x68D4, 0x21AD,
+    0x68D5, 0x68D5, 0x0C85, 0x68D6, 0x68D6, 0x218B, 0x68D7, 0x68D7, 0x0C88,
+    0x68D8, 0x68D8, 0x0C87, 0x68DA, 0x68DA, 0x0C98, 0x68DC, 0x68DC, 0x2185,
+    0x68DD, 0x68DE, 0x21A7, 0x68DF, 0x68DF, 0x0C8A, 0x68E0, 0x68E0, 0x0C86,
+    0x68E1, 0x68E1, 0x2193, 0x68E3, 0x68E3, 0x0C91, 0x68E4, 0x68E4, 0x218E,
+    0x68E6, 0x68E6, 0x21A9, 0x68E7, 0x68E7, 0x0C8D, 0x68E8, 0x68E8, 0x21A1,
+    0x68E9, 0x68E9, 0x21AE, 0x68EA, 0x68EA, 0x2188, 0x68EB, 0x68EB, 0x218D,
+    0x68EC, 0x68EC, 0x2187, 0x68EE, 0x68EE, 0x0C8C, 0x68EF, 0x68EF, 0x219A,
+    0x68F0, 0x68F0, 0x242B, 0x68F1, 0x68F1, 0x2189, 0x68F2, 0x68F2, 0x0C90,
+    0x68F3, 0x68F3, 0x2192, 0x68F4, 0x68F4, 0x21AA, 0x68F5, 0x68F5, 0x0C8B,
+    0x68F6, 0x68F6, 0x218F, 0x68F7, 0x68F7, 0x218C, 0x68F8, 0x68F8, 0x219D,
+    0x68F9, 0x68F9, 0x0C8E, 0x68FA, 0x68FA, 0x0C84, 0x68FB, 0x68FB, 0x0C9A,
+    0x68FC, 0x68FC, 0x21A0, 0x68FD, 0x68FD, 0x219F, 0x6900, 0x6900, 0x41DF,
+    0x6901, 0x6901, 0x41DE, 0x6902, 0x6902, 0x42FB, 0x6903, 0x6903, 0x429C,
+    0x6904, 0x6904, 0x2184, 0x6905, 0x6905, 0x0C89, 0x6906, 0x6906, 0x21AC,
+    0x6907, 0x6907, 0x2194, 0x6908, 0x6908, 0x2196, 0x6909, 0x6909, 0x4658,
+    0x690A, 0x690A, 0x21A3, 0x690B, 0x690B, 0x21A2, 0x690C, 0x690C, 0x2182,
+    0x690D, 0x690D, 0x0C94, 0x690E, 0x690E, 0x0C96, 0x690F, 0x690F, 0x218A,
+    0x6910, 0x6910, 0x2191, 0x6911, 0x6911, 0x2199, 0x6912, 0x6912, 0x0C95,
+    0x6913, 0x6913, 0x2190, 0x6914, 0x6914, 0x219C, 0x6915, 0x6915, 0x21AF,
+    0x6917, 0x6917, 0x21A4, 0x6918, 0x6918, 0x3DA2, 0x691A, 0x691A, 0x3D80,
+    0x691B, 0x691B, 0x37BD, 0x6925, 0x6925, 0x21B0, 0x692A, 0x692A, 0x2186,
+    0x692C, 0x692C, 0x3F38, 0x692F, 0x692F, 0x243F, 0x6930, 0x6930, 0x0E3E,
+    0x6932, 0x6932, 0x243D, 0x6933, 0x6933, 0x2428, 0x6934, 0x6934, 0x242D,
+    0x6935, 0x6935, 0x2426, 0x6936, 0x6936, 0x41E7, 0x6937, 0x6937, 0x2439,
+    0x6938, 0x6938, 0x2418, 0x6939, 0x6939, 0x241F, 0x693B, 0x693B, 0x2437,
+    0x693C, 0x693C, 0x2441, 0x693D, 0x693D, 0x2429, 0x693E, 0x693E, 0x4056,
+    0x693F, 0x693F, 0x241C, 0x6940, 0x6940, 0x242F, 0x6941, 0x6941, 0x2434,
+    0x6942, 0x6942, 0x2420, 0x6943, 0x6943, 0x4659, 0x6944, 0x6944, 0x2431,
+    0x6945, 0x6945, 0x241D, 0x6946, 0x6946, 0x456F, 0x6948, 0x6949, 0x2424,
+    0x694A, 0x694A, 0x0E40, 0x694B, 0x694B, 0x2438, 0x694C, 0x694C, 0x2436,
+    0x694E, 0x694E, 0x2419, 0x694F, 0x694F, 0x243B, 0x6951, 0x6951, 0x243C,
+    0x6952, 0x6952, 0x243E, 0x6953, 0x6953, 0x0E44, 0x6954, 0x6954, 0x0E3C,
+    0x6955, 0x6955, 0x3D86, 0x6956, 0x6956, 0x1F1D, 0x6957, 0x6957, 0x2421,
+    0x6958, 0x6958, 0x2433, 0x6959, 0x6959, 0x2422, 0x695A, 0x695A, 0x0E39,
+    0x695B, 0x695B, 0x0E49, 0x695C, 0x695C, 0x243A, 0x695D, 0x695D, 0x0E47,
+    0x695E, 0x695E, 0x0E43, 0x695F, 0x695F, 0x2417, 0x6960, 0x6960, 0x0E3B,
+    0x6961, 0x6961, 0x41E4, 0x6962, 0x6962, 0x241A, 0x6963, 0x6963, 0x0E48,
+    0x6964, 0x6964, 0x465B, 0x6965, 0x6965, 0x242A, 0x6966, 0x6966, 0x2416,
+    0x6967, 0x6967, 0x3D15, 0x6968, 0x6968, 0x0E41, 0x6969, 0x6969, 0x242E,
+    0x696A, 0x696A, 0x241E, 0x696B, 0x696B, 0x0E42, 0x696C, 0x696C, 0x2427,
+    0x696D, 0x696D, 0x0E38, 0x696E, 0x696E, 0x0C99, 0x696F, 0x696F, 0x2430,
+    0x6970, 0x6970, 0x2197, 0x6971, 0x6971, 0x241B, 0x6972, 0x6972, 0x3A6D,
+    0x6973, 0x6973, 0x41DB, 0x6974, 0x6974, 0x2435, 0x6975, 0x6975, 0x0E3D,
+    0x6976, 0x6976, 0x2432, 0x6977, 0x6977, 0x0E3A, 0x6978, 0x6978, 0x242C,
+    0x6979, 0x6979, 0x0E45, 0x697A, 0x697A, 0x2423, 0x697B, 0x697B, 0x2440,
+    0x6980, 0x6980, 0x3F3E, 0x6982, 0x6982, 0x0E3F, 0x6983, 0x6983, 0x24AF,
+    0x6985, 0x6985, 0x465D, 0x6986, 0x6986, 0x0E46, 0x698A, 0x698A, 0x3D74,
+    0x698D, 0x698D, 0x26C9, 0x698E, 0x698E, 0x26C7, 0x6990, 0x6990, 0x26DD,
+    0x6991, 0x6991, 0x26C5, 0x6993, 0x6993, 0x26D7, 0x6994, 0x6994, 0x0E37,
+    0x6995, 0x6995, 0x0FF0, 0x6996, 0x6996, 0x26C1, 0x6997, 0x6997, 0x26DC,
+    0x6998, 0x6998, 0x41E8, 0x6999, 0x6999, 0x26C6, 0x699A, 0x699A, 0x26D4,
+    0x699B, 0x699B, 0x0FF5, 0x699C, 0x699C, 0x0FEE, 0x699E, 0x699E, 0x26DA,
+    0x699F, 0x699F, 0x465C, 0x69A0, 0x69A0, 0x26BF, 0x69A1, 0x69A1, 0x26D9,
+    0x69A2, 0x69A2, 0x3730, 0x69A3, 0x69A3, 0x1000, 0x69A4, 0x69A4, 0x26D0,
+    0x69A5, 0x69A5, 0x26E0, 0x69A6, 0x69A6, 0x0FFE, 0x69A7, 0x69A7, 0x26C8,
+    0x69A8, 0x69A8, 0x0FEF, 0x69A9, 0x69A9, 0x26CA, 0x69AA, 0x69AA, 0x26D8,
+    0x69AB, 0x69AB, 0x0FF8, 0x69AC, 0x69AC, 0x26C3, 0x69AD, 0x69AD, 0x0FFC,
+    0x69AE, 0x69AE, 0x0FF2, 0x69AF, 0x69AF, 0x26CC, 0x69B0, 0x69B0, 0x26C2,
+    0x69B1, 0x69B1, 0x26BC, 0x69B2, 0x69B2, 0x3FF6, 0x69B3, 0x69B3, 0x26D6,
+    0x69B4, 0x69B4, 0x0FF9, 0x69B5, 0x69B5, 0x26DF, 0x69B6, 0x69B6, 0x26BD,
+    0x69B7, 0x69B7, 0x0FF6, 0x69B9, 0x69B9, 0x26D2, 0x69BB, 0x69BB, 0x0FF7,
+    0x69BC, 0x69BC, 0x26C4, 0x69BD, 0x69BD, 0x26CF, 0x69BE, 0x69BE, 0x26CB,
+    0x69BF, 0x69BF, 0x26CD, 0x69C0, 0x69C0, 0x3F5D, 0x69C1, 0x69C1, 0x0FF1,
+    0x69C2, 0x69C2, 0x26DE, 0x69C3, 0x69C3, 0x0FFF, 0x69C4, 0x69C4, 0x26CE,
+    0x69C6, 0x69C6, 0x26E1, 0x69C9, 0x69C9, 0x26BE, 0x69CA, 0x69CA, 0x26D3,
+    0x69CB, 0x69CB, 0x0FF4, 0x69CC, 0x69CC, 0x0FFD, 0x69CD, 0x69CD, 0x0FFB,
+    0x69CE, 0x69CE, 0x26C0, 0x69CF, 0x69CF, 0x26D5, 0x69D0, 0x69D0, 0x0FFA,
+    0x69D1, 0x69D1, 0x39EF, 0x69D3, 0x69D3, 0x0FF3, 0x69D4, 0x69D4, 0x26D1,
+    0x69D5, 0x69D5, 0x3E3C, 0x69D6, 0x69D6, 0x465E, 0x69D9, 0x69D9, 0x26DB,
+    0x69E1, 0x69E1, 0x41D8, 0x69E2, 0x69E2, 0x2909, 0x69E4, 0x69E4, 0x2905,
+    0x69E5, 0x69E5, 0x2901, 0x69E6, 0x69E6, 0x2915, 0x69E7, 0x69E7, 0x2912,
+    0x69E8, 0x69E8, 0x1177, 0x69E9, 0x69E9, 0x3D91, 0x69EB, 0x69EB, 0x2919,
+    0x69EC, 0x69EC, 0x2908, 0x69ED, 0x69ED, 0x1182, 0x69EE, 0x69EE, 0x290F,
+    0x69F1, 0x69F1, 0x2904, 0x69F2, 0x69F2, 0x290E, 0x69F3, 0x69F3, 0x117F,
+    0x69F4, 0x69F4, 0x2922, 0x69F6, 0x69F6, 0x291F, 0x69F7, 0x69F7, 0x2911,
+    0x69F8, 0x69F8, 0x2902, 0x69F9, 0x69F9, 0x41ED, 0x69FA, 0x69FA, 0x41C7,
+    0x69FB, 0x69FB, 0x2916, 0x69FC, 0x69FC, 0x2918, 0x69FD, 0x69FD, 0x117B,
+    0x69FE, 0x69FE, 0x290C, 0x69FF, 0x69FF, 0x2907, 0x6A00, 0x6A00, 0x28FE,
+    0x6A01, 0x6A01, 0x1178, 0x6A02, 0x6A02, 0x1180, 0x6A03, 0x6A03, 0x3E29,
+    0x6A04, 0x6A04, 0x291B, 0x6A05, 0x6A05, 0x1181, 0x6A06, 0x6A06, 0x28FF,
+    0x6A07, 0x6A07, 0x2921, 0x6A08, 0x6A08, 0x2914, 0x6A09, 0x6A09, 0x291A,
+    0x6A0A, 0x6A0A, 0x117E, 0x6A0B, 0x6A0B, 0x41D9, 0x6A0C, 0x6A0C, 0x3D50,
+    0x6A0D, 0x6A0D, 0x2917, 0x6A0F, 0x6A0F, 0x291E, 0x6A11, 0x6A11, 0x1183,
+    0x6A13, 0x6A13, 0x117D, 0x6A14, 0x6A14, 0x2910, 0x6A15, 0x6A15, 0x2903,
+    0x6A16, 0x6A16, 0x2923, 0x6A17, 0x6A17, 0x2900, 0x6A18, 0x6A18, 0x291C,
+    0x6A19, 0x6A19, 0x117A, 0x6A1A, 0x6A1A, 0x3D1E, 0x6A1B, 0x6A1B, 0x290A,
+    0x6A1C, 0x6A1C, 0x3B68, 0x6A1D, 0x6A1D, 0x290B, 0x6A1E, 0x6A1E, 0x1179,
+    0x6A1F, 0x6A1F, 0x1176, 0x6A20, 0x6A20, 0x2906, 0x6A21, 0x6A21, 0x117C,
+    0x6A23, 0x6A23, 0x1175, 0x6A25, 0x6A25, 0x291D, 0x6A26, 0x6A26, 0x2920,
+    0x6A27, 0x6A27, 0x290D, 0x6A28, 0x6A28, 0x2B74, 0x6A2B, 0x6A2B, 0x3D42,
+    0x6A2C, 0x6A2C, 0x42AB, 0x6A2D, 0x6A2D, 0x3B1F, 0x6A32, 0x6A32, 0x2B6C,
+    0x6A33, 0x6A33, 0x3AA4, 0x6A34, 0x6A34, 0x2B68, 0x6A35, 0x6A35, 0x12D9,
+    0x6A38, 0x6A38, 0x12CE, 0x6A39, 0x6A39, 0x12D3, 0x6A3A, 0x6A3A, 0x12CF,
+    0x6A3B, 0x6A3B, 0x2B76, 0x6A3C, 0x6A3C, 0x2B81, 0x6A3D, 0x6A3D, 0x12CD,
+    0x6A3E, 0x6A3E, 0x2B6E, 0x6A3F, 0x6A3F, 0x2B77, 0x6A40, 0x6A40, 0x2913,
+    0x6A41, 0x6A41, 0x2B78, 0x6A44, 0x6A44, 0x12D4, 0x6A45, 0x6A45, 0x41F0,
+    0x6A46, 0x6A46, 0x2B87, 0x6A47, 0x6A47, 0x12D8, 0x6A48, 0x6A48, 0x12DB,
+    0x6A49, 0x6A49, 0x2B6A, 0x6A4B, 0x6A4B, 0x12D7, 0x6A4C, 0x6A4C, 0x3AAB,
+    0x6A4D, 0x6A4E, 0x2B85, 0x6A4F, 0x6A4F, 0x2B7C, 0x6A50, 0x6A50, 0x2B7B,
+    0x6A51, 0x6A51, 0x2B73, 0x6A52, 0x6A52, 0x3AA5, 0x6A53, 0x6A53, 0x37AC,
+    0x6A54, 0x6A54, 0x2B7D, 0x6A55, 0x6A55, 0x2B84, 0x6A56, 0x6A56, 0x2B83,
+    0x6A57, 0x6A57, 0x37DA, 0x6A58, 0x6A58, 0x12D2, 0x6A59, 0x6A59, 0x12D0,
+    0x6A5A, 0x6A5A, 0x2B75, 0x6A5B, 0x6A5B, 0x2B72, 0x6A5D, 0x6A5D, 0x2B6F,
+    0x6A5E, 0x6A5E, 0x2B82, 0x6A5F, 0x6A5F, 0x12DA, 0x6A60, 0x6A60, 0x2B80,
+    0x6A61, 0x6A61, 0x12D6, 0x6A62, 0x6A62, 0x12D5, 0x6A64, 0x6A64, 0x2B7A,
+    0x6A65, 0x6A65, 0x4660, 0x6A66, 0x6A66, 0x2B69, 0x6A67, 0x6A67, 0x2B6B,
+    0x6A68, 0x6A68, 0x2B6D, 0x6A69, 0x6A69, 0x2B7F, 0x6A6A, 0x6A6A, 0x2B79,
+    0x6A6B, 0x6A6B, 0x12D1, 0x6A6D, 0x6A6D, 0x2B70, 0x6A6F, 0x6A6F, 0x2B7E,
+    0x6A71, 0x6A71, 0x4662, 0x6A74, 0x6A74, 0x4661, 0x6A76, 0x6A76, 0x2B71,
+    0x6A7A, 0x6A7A, 0x3AAD, 0x6A7E, 0x6A7E, 0x13EC, 0x6A7F, 0x6A7F, 0x2D84,
+    0x6A80, 0x6A80, 0x13E5, 0x6A81, 0x6A81, 0x2D75, 0x6A82, 0x6A82, 0x4663,
+    0x6A83, 0x6A83, 0x2D80, 0x6A84, 0x6A84, 0x13E7, 0x6A85, 0x6A85, 0x2D87,
+    0x6A87, 0x6A87, 0x2D7C, 0x6A89, 0x6A89, 0x2D77, 0x6A8A, 0x6A8A, 0x4136,
+    0x6A8C, 0x6A8C, 0x2D88, 0x6A8D, 0x6A8D, 0x2D73, 0x6A8E, 0x6A8E, 0x2D7E,
+    0x6A8F, 0x6A8F, 0x3C1B, 0x6A90, 0x6A90, 0x13EE, 0x6A91, 0x6A91, 0x2D83,
+    0x6A92, 0x6A92, 0x2D89, 0x6A93, 0x6A93, 0x2D7D, 0x6A94, 0x6A94, 0x13E6,
+    0x6A95, 0x6A95, 0x2D7F, 0x6A96, 0x6A96, 0x2D74, 0x6A97, 0x6A97, 0x13ED,
+    0x6A99, 0x6A99, 0x4665, 0x6A9A, 0x6A9A, 0x2D86, 0x6A9B, 0x6A9B, 0x2D79,
+    0x6A9C, 0x6A9C, 0x13E9, 0x6A9D, 0x6A9D, 0x41F2, 0x6A9E, 0x6A9E, 0x2D7B,
+    0x6A9F, 0x6A9F, 0x2D78, 0x6AA0, 0x6AA0, 0x13EF, 0x6AA1, 0x6AA1, 0x2D7A,
+    0x6AA2, 0x6AA2, 0x13E8, 0x6AA3, 0x6AA3, 0x13EB, 0x6AA4, 0x6AA4, 0x2D82,
+    0x6AA5, 0x6AA5, 0x2D76, 0x6AA6, 0x6AA6, 0x2D85, 0x6AA7, 0x6AA7, 0x37E3,
+    0x6AA8, 0x6AA8, 0x2D81, 0x6AAB, 0x6AAB, 0x4667, 0x6AAC, 0x6AAC, 0x14DD,
+    0x6AAD, 0x6AAD, 0x2F3E, 0x6AAE, 0x6AAF, 0x14E2, 0x6AB1, 0x6AB1, 0x3E53,
+    0x6AB2, 0x6AB2, 0x3B4B, 0x6AB3, 0x6AB3, 0x14DC, 0x6AB4, 0x6AB4, 0x2F3D,
+    0x6AB5, 0x6AB5, 0x4668, 0x6AB6, 0x6AB7, 0x2F3A, 0x6AB8, 0x6AB8, 0x14E0,
+    0x6AB9, 0x6AB9, 0x2F35, 0x6ABA, 0x6ABA, 0x2F39, 0x6ABB, 0x6ABB, 0x14DF,
+    0x6ABD, 0x6ABD, 0x2F36, 0x6ABE, 0x6ABE, 0x3AA1, 0x6AC2, 0x6AC2, 0x14E1,
+    0x6AC3, 0x6AC3, 0x14DE, 0x6AC5, 0x6AC5, 0x2F34, 0x6AC6, 0x6AC6, 0x2F38,
+    0x6AC7, 0x6AC7, 0x2F3C, 0x6AC8, 0x6AC8, 0x41F5, 0x6AC9, 0x6AC9, 0x3AA6,
+    0x6ACA, 0x6ACA, 0x3F4C, 0x6ACB, 0x6ACB, 0x309F, 0x6ACC, 0x6ACC, 0x309C,
+    0x6ACD, 0x6ACD, 0x30A5, 0x6ACF, 0x6ACF, 0x30A4, 0x6AD0, 0x6AD0, 0x30A2,
+    0x6AD1, 0x6AD1, 0x309D, 0x6AD3, 0x6AD3, 0x1589, 0x6AD4, 0x6AD4, 0x4669,
+    0x6AD8, 0x6AD8, 0x3CAA, 0x6AD9, 0x6AD9, 0x309E, 0x6ADA, 0x6ADA, 0x1588,
+    0x6ADB, 0x6ADB, 0x13EA, 0x6ADC, 0x6ADC, 0x30A1, 0x6ADD, 0x6ADD, 0x1587,
+    0x6ADE, 0x6ADE, 0x30A6, 0x6ADF, 0x6ADF, 0x30A0, 0x6AE0, 0x6AE0, 0x309B,
+    0x6AE1, 0x6AE1, 0x2F37, 0x6AE5, 0x6AE5, 0x1586, 0x6AE7, 0x6AE7, 0x309A,
+    0x6AE8, 0x6AE8, 0x31DF, 0x6AEA, 0x6AEA, 0x31DE, 0x6AEB, 0x6AEB, 0x30A3,
+    0x6AEC, 0x6AEC, 0x161B, 0x6AEE, 0x6AEF, 0x31E2, 0x6AF0, 0x6AF0, 0x31DD,
+    0x6AF1, 0x6AF1, 0x31E1, 0x6AF3, 0x6AF3, 0x31DC, 0x6AF6, 0x6AF6, 0x466A,
+    0x6AF8, 0x6AF8, 0x32D6, 0x6AF9, 0x6AF9, 0x31E0, 0x6AFA, 0x6AFA, 0x1678,
+    0x6AFB, 0x6AFB, 0x1676, 0x6AFC, 0x6AFC, 0x32D4, 0x6B00, 0x6B00, 0x32D7,
+    0x6B02, 0x6B02, 0x32D3, 0x6B03, 0x6B03, 0x32D5, 0x6B04, 0x6B04, 0x1677,
+    0x6B05, 0x6B05, 0x3AA7, 0x6B08, 0x6B09, 0x3386, 0x6B0A, 0x6B0A, 0x16C6,
+    0x6B0B, 0x6B0B, 0x3385, 0x6B0F, 0x6B0F, 0x3420, 0x6B10, 0x6B10, 0x16FD,
+    0x6B11, 0x6B12, 0x341E, 0x6B13, 0x6B13, 0x3487, 0x6B16, 0x6B16, 0x1743,
+    0x6B17, 0x6B17, 0x34CE, 0x6B18, 0x6B19, 0x34CC, 0x6B1A, 0x6B1A, 0x34CF,
+    0x6B1D, 0x6B1D, 0x41F8, 0x6B1E, 0x6B1E, 0x3534, 0x6B20, 0x6B20, 0x02DE,
+    0x6B21, 0x6B21, 0x03E3, 0x6B23, 0x6B23, 0x061A, 0x6B25, 0x6B25, 0x19C9,
+    0x6B28, 0x6B28, 0x1B3D, 0x6B2C, 0x6B2C, 0x1CE6, 0x6B2D, 0x6B2D, 0x1CE8,
+    0x6B2F, 0x6B2F, 0x1CE7, 0x6B31, 0x6B31, 0x1CE9, 0x6B32, 0x6B32, 0x0AE7,
+    0x6B33, 0x6B33, 0x1F3C, 0x6B34, 0x6B34, 0x1CEA, 0x6B35, 0x6B35, 0x41FB,
+    0x6B36, 0x6B36, 0x1F3B, 0x6B37, 0x6B38, 0x1F3D, 0x6B39, 0x6B39, 0x21B2,
+    0x6B3A, 0x6B3A, 0x0C9C, 0x6B3B, 0x6B3B, 0x21B3, 0x6B3C, 0x6B3C, 0x21B5,
+    0x6B3D, 0x6B3D, 0x0C9D, 0x6B3E, 0x6B3E, 0x0C9B, 0x6B3F, 0x6B3F, 0x21B4,
+    0x6B41, 0x6B41, 0x2447, 0x6B42, 0x6B42, 0x2445, 0x6B43, 0x6B43, 0x2444,
+    0x6B45, 0x6B45, 0x2443, 0x6B46, 0x6B46, 0x2442, 0x6B47, 0x6B47, 0x0E4A,
+    0x6B48, 0x6B48, 0x2446, 0x6B49, 0x6B49, 0x1001, 0x6B4A, 0x6B4A, 0x26E2,
+    0x6B4B, 0x6B4B, 0x26E4, 0x6B4C, 0x6B4C, 0x1002, 0x6B4D, 0x6B4D, 0x26E3,
+    0x6B4E, 0x6B4E, 0x1185, 0x6B50, 0x6B50, 0x1184, 0x6B51, 0x6B51, 0x2924,
+    0x6B52, 0x6B52, 0x3F6E, 0x6B54, 0x6B54, 0x2B89, 0x6B55, 0x6B55, 0x2B88,
+    0x6B56, 0x6B56, 0x2B8A, 0x6B57, 0x6B57, 0x3AAE, 0x6B59, 0x6B59, 0x12DC,
+    0x6B5B, 0x6B5B, 0x2D8A, 0x6B5C, 0x6B5C, 0x13F0, 0x6B5E, 0x6B5E, 0x2F3F,
+    0x6B5F, 0x6B5F, 0x14E4, 0x6B60, 0x6B60, 0x30A7, 0x6B61, 0x6B61, 0x16C7,
+    0x6B62, 0x6B62, 0x02DF, 0x6B63, 0x6B63, 0x034D, 0x6B64, 0x6B64, 0x03E4,
+    0x6B65, 0x6B65, 0x04C9, 0x6B66, 0x6B67, 0x061B, 0x6B6A, 0x6B6A, 0x0769,
+    0x6B6D, 0x6B6D, 0x1CEB, 0x6B6F, 0x6B6F, 0x4515, 0x6B72, 0x6B72, 0x0E4B,
+    0x6B74, 0x6B74, 0x41FC, 0x6B76, 0x6B76, 0x29A2, 0x6B77, 0x6B77, 0x12DD,
+    0x6B78, 0x6B78, 0x14E5, 0x6B79, 0x6B79, 0x02E0, 0x6B7A, 0x6B7A, 0x44EE,
+    0x6B7B, 0x6B7B, 0x03E5, 0x6B7E, 0x6B7E, 0x19CB, 0x6B7F, 0x6B7F, 0x061D,
+    0x6B80, 0x6B80, 0x19CA, 0x6B81, 0x6B81, 0x466B, 0x6B82, 0x6B82, 0x1B3E,
+    0x6B83, 0x6B83, 0x076A, 0x6B84, 0x6B84, 0x1B3F, 0x6B86, 0x6B86, 0x076B,
+    0x6B88, 0x6B88, 0x1CED, 0x6B89, 0x6B89, 0x0900, 0x6B8A, 0x6B8A, 0x08FF,
+    0x6B8C, 0x6B8C, 0x1F43, 0x6B8D, 0x6B8E, 0x1F41, 0x6B8F, 0x6B8F, 0x1F40,
+    0x6B91, 0x6B91, 0x1F3F, 0x6B94, 0x6B94, 0x21B6, 0x6B95, 0x6B95, 0x21B9,
+    0x6B96, 0x6B96, 0x0C9F, 0x6B97, 0x6B97, 0x21B7, 0x6B98, 0x6B98, 0x0C9E,
+    0x6B99, 0x6B99, 0x21B8, 0x6B9B, 0x6B9B, 0x2448, 0x6B9E, 0x6BA0, 0x26E5,
+    0x6BA2, 0x6BA2, 0x2927, 0x6BA3, 0x6BA3, 0x2926, 0x6BA4, 0x6BA4, 0x1186,
+    0x6BA5, 0x6BA5, 0x2925, 0x6BA6, 0x6BA6, 0x2928, 0x6BA7, 0x6BA7, 0x2B8B,
+    0x6BAA, 0x6BAB, 0x2B8C, 0x6BAD, 0x6BAD, 0x2D8B, 0x6BAE, 0x6BAE, 0x13F1,
+    0x6BAF, 0x6BAF, 0x14E6, 0x6BB0, 0x6BB0, 0x30A8, 0x6BB2, 0x6BB2, 0x1679,
+    0x6BB3, 0x6BB3, 0x178A, 0x6BB5, 0x6BB5, 0x076C, 0x6BB6, 0x6BB6, 0x1B40,
+    0x6BB7, 0x6BB7, 0x0901, 0x6BBA, 0x6BBA, 0x0AE8, 0x6BBC, 0x6BBC, 0x0CA0,
+    0x6BBD, 0x6BBD, 0x21BA, 0x6BBF, 0x6BBF, 0x0E4D, 0x6BC0, 0x6BC0, 0x0E4C,
+    0x6BC1, 0x6BC1, 0x466C, 0x6BC3, 0x6BC4, 0x26E8, 0x6BC5, 0x6BC6, 0x1187,
+    0x6BC7, 0x6BC7, 0x2B8F, 0x6BC8, 0x6BC8, 0x2B8E, 0x6BC9, 0x6BC9, 0x2F40,
+    0x6BCA, 0x6BCA, 0x3421, 0x6BCB, 0x6BCB, 0x02E1, 0x6BCC, 0x6BCC, 0x178B,
+    0x6BCD, 0x6BCD, 0x034E, 0x6BCF, 0x6BCF, 0x04CA, 0x6BD0, 0x6BD0, 0x18AD,
+    0x6BD2, 0x6BD2, 0x076D, 0x6BD3, 0x6BD3, 0x0E4E, 0x6BD4, 0x6BD4, 0x02E2,
+    0x6BD6, 0x6BD6, 0x1B41, 0x6BD7, 0x6BD7, 0x076E, 0x6BD8, 0x6BD8, 0x1B42,
+    0x6BDA, 0x6BDA, 0x13F2, 0x6BDB, 0x6BDB, 0x02E3, 0x6BDC, 0x6BDC, 0x4207,
+    0x6BDE, 0x6BDE, 0x19CC, 0x6BE0, 0x6BE0, 0x1B43, 0x6BE1, 0x6BE1, 0x4205,
+    0x6BE2, 0x6BE2, 0x1CF2, 0x6BE3, 0x6BE3, 0x1CF1, 0x6BE4, 0x6BE4, 0x1CEF,
+    0x6BE6, 0x6BE6, 0x1CEE, 0x6BE7, 0x6BE7, 0x1CF3, 0x6BE8, 0x6BE8, 0x1CF0,
+    0x6BEA, 0x6BEA, 0x466D, 0x6BEB, 0x6BEC, 0x0AE9, 0x6BEF, 0x6BEF, 0x0CA1,
+    0x6BF0, 0x6BF0, 0x21BB, 0x6BF2, 0x6BF3, 0x21BC, 0x6BF7, 0x6BF8, 0x244C,
+    0x6BF9, 0x6BF9, 0x244B, 0x6BFA, 0x6BFA, 0x3F79, 0x6BFB, 0x6BFC, 0x2449,
+    0x6BFD, 0x6BFD, 0x0E4F, 0x6BFE, 0x6BFE, 0x26EA, 0x6BFF, 0x6BFF, 0x292B,
+    0x6C00, 0x6C00, 0x292A, 0x6C01, 0x6C01, 0x2929, 0x6C02, 0x6C02, 0x292C,
+    0x6C03, 0x6C03, 0x2B91, 0x6C04, 0x6C04, 0x2B90, 0x6C05, 0x6C05, 0x12DE,
+    0x6C06, 0x6C06, 0x2B92, 0x6C08, 0x6C08, 0x13F3, 0x6C09, 0x6C09, 0x2D8C,
+    0x6C0B, 0x6C0B, 0x2F41, 0x6C0C, 0x6C0C, 0x30A9, 0x6C0D, 0x6C0D, 0x3388,
+    0x6C0F, 0x6C0F, 0x02E4, 0x6C10, 0x6C10, 0x0350, 0x6C11, 0x6C11, 0x034F,
+    0x6C13, 0x6C13, 0x061E, 0x6C14, 0x6C14, 0x178C, 0x6C15, 0x6C15, 0x17AA,
+    0x6C16, 0x6C16, 0x03E6, 0x6C18, 0x6C18, 0x1801, 0x6C19, 0x6C1A, 0x18AE,
+    0x6C1B, 0x6C1B, 0x061F, 0x6C1C, 0x6C1C, 0x38AB, 0x6C1D, 0x6C1D, 0x19CD,
+    0x6C1F, 0x6C1F, 0x076F, 0x6C20, 0x6C21, 0x1B44, 0x6C23, 0x6C23, 0x0902,
+    0x6C24, 0x6C24, 0x0906, 0x6C25, 0x6C25, 0x1CF4, 0x6C26, 0x6C26, 0x0905,
+    0x6C27, 0x6C28, 0x0903, 0x6C2A, 0x6C2A, 0x1F44, 0x6C2B, 0x6C2B, 0x0AEB,
+    0x6C2C, 0x6C2C, 0x0CA4, 0x6C2E, 0x6C2F, 0x0CA2, 0x6C30, 0x6C30, 0x21BE,
+    0x6C31, 0x6C31, 0x3F63, 0x6C33, 0x6C33, 0x1003, 0x6C34, 0x6C34, 0x02E5,
+    0x6C35, 0x6C35, 0x44EF, 0x6C36, 0x6C36, 0x17AB, 0x6C37, 0x6C37, 0x4208,
+    0x6C38, 0x6C38, 0x0351, 0x6C39, 0x6C39, 0x3E05, 0x6C3A, 0x6C3A, 0x44F0,
+    0x6C3B, 0x6C3B, 0x17AE, 0x6C3D, 0x6C3D, 0x4381, 0x6C3E, 0x6C3E, 0x0354,
+    0x6C3F, 0x6C3F, 0x17AD, 0x6C40, 0x6C40, 0x0353, 0x6C41, 0x6C41, 0x0352,
+    0x6C42, 0x6C42, 0x04CB, 0x6C43, 0x6C43, 0x17AC, 0x6C46, 0x6C46, 0x1802,
+    0x6C49, 0x6C49, 0x408D, 0x6C4A, 0x6C4A, 0x1806, 0x6C4B, 0x6C4C, 0x1808,
+    0x6C4D, 0x6C4E, 0x03F0, 0x6C4F, 0x6C4F, 0x1805, 0x6C50, 0x6C50, 0x03EC,
+    0x6C52, 0x6C52, 0x1803, 0x6C54, 0x6C54, 0x1807, 0x6C55, 0x6C55, 0x03ED,
+    0x6C57, 0x6C57, 0x03E8, 0x6C58, 0x6C58, 0x3BBA, 0x6C59, 0x6C59, 0x03E9,
+    0x6C5A, 0x6C5A, 0x420C, 0x6C5B, 0x6C5B, 0x03EF, 0x6C5C, 0x6C5C, 0x1804,
+    0x6C5D, 0x6C5D, 0x03E7, 0x6C5E, 0x6C5E, 0x04CC, 0x6C5F, 0x6C60, 0x03EA,
+    0x6C61, 0x6C61, 0x03EE, 0x6C65, 0x6C65, 0x18C0, 0x6C66, 0x6C66, 0x18BE,
+    0x6C67, 0x6C67, 0x18B1, 0x6C68, 0x6C68, 0x04D8, 0x6C69, 0x6C69, 0x18B8,
+    0x6C6A, 0x6C6A, 0x04D3, 0x6C6B, 0x6C6B, 0x18B2, 0x6C6D, 0x6C6D, 0x18BA,
+    0x6C6E, 0x6C6E, 0x40CA, 0x6C6F, 0x6C6F, 0x18B7, 0x6C70, 0x6C70, 0x04D6,
+    0x6C71, 0x6C71, 0x18B6, 0x6C72, 0x6C72, 0x04DD, 0x6C73, 0x6C73, 0x18BF,
+    0x6C74, 0x6C74, 0x04DF, 0x6C75, 0x6C75, 0x466E, 0x6C76, 0x6C76, 0x04E1,
+    0x6C78, 0x6C78, 0x18B0, 0x6C79, 0x6C79, 0x420E, 0x6C7A, 0x6C7A, 0x04D4,
+    0x6C7B, 0x6C7B, 0x18C1, 0x6C7D, 0x6C7D, 0x04DB, 0x6C7E, 0x6C7E, 0x04DE,
+    0x6C7F, 0x6C7F, 0x37A6, 0x6C80, 0x6C80, 0x19E4, 0x6C81, 0x6C81, 0x04CE,
+    0x6C82, 0x6C82, 0x04E5, 0x6C83, 0x6C83, 0x04DC, 0x6C84, 0x6C84, 0x18B3,
+    0x6C85, 0x6C85, 0x04D1, 0x6C86, 0x6C86, 0x04E0, 0x6C87, 0x6C87, 0x18BB,
+    0x6C88, 0x6C89, 0x04CF, 0x6C8A, 0x6C8A, 0x19E2, 0x6C8B, 0x6C8B, 0x18B4,
+    0x6C8C, 0x6C8C, 0x04D7, 0x6C8D, 0x6C8D, 0x04E2, 0x6C8E, 0x6C8E, 0x18C2,
+    0x6C8F, 0x6C8F, 0x18B5, 0x6C90, 0x6C90, 0x04D5, 0x6C92, 0x6C92, 0x04DA,
+    0x6C93, 0x6C93, 0x19CE, 0x6C94, 0x6C94, 0x04E3, 0x6C95, 0x6C95, 0x18BC,
+    0x6C96, 0x6C96, 0x04D9, 0x6C98, 0x6C98, 0x04E4, 0x6C99, 0x6C99, 0x04CD,
+    0x6C9A, 0x6C9A, 0x18B9, 0x6C9B, 0x6C9B, 0x04D2, 0x6C9C, 0x6C9C, 0x18BD,
+    0x6C9D, 0x6C9D, 0x19E3, 0x6C9F, 0x6C9F, 0x3889, 0x6CA2, 0x6CA2, 0x3D63,
+    0x6CAA, 0x6CAA, 0x466F, 0x6CAB, 0x6CAB, 0x062B, 0x6CAC, 0x6CAC, 0x063B,
+    0x6CAD, 0x6CAD, 0x19D5, 0x6CAE, 0x6CAE, 0x0632, 0x6CAF, 0x6CAF, 0x3CF6,
+    0x6CB0, 0x6CB0, 0x19EA, 0x6CB1, 0x6CB1, 0x0623, 0x6CB2, 0x6CB2, 0x3ECC,
+    0x6CB3, 0x6CB3, 0x0626, 0x6CB4, 0x6CB4, 0x19E1, 0x6CB6, 0x6CB6, 0x19D3,
+    0x6CB7, 0x6CB7, 0x19D7, 0x6CB8, 0x6CB8, 0x062E, 0x6CB9, 0x6CB9, 0x0630,
+    0x6CBA, 0x6CBA, 0x19DA, 0x6CBB, 0x6CBB, 0x0637, 0x6CBC, 0x6CBC, 0x0629,
+    0x6CBD, 0x6CBE, 0x0627, 0x6CBF, 0x6CBF, 0x0636, 0x6CC0, 0x6CC0, 0x19E6,
+    0x6CC1, 0x6CC1, 0x0631, 0x6CC2, 0x6CC2, 0x19D9, 0x6CC3, 0x6CC3, 0x19DB,
+    0x6CC4, 0x6CC4, 0x062F, 0x6CC5, 0x6CC5, 0x0634, 0x6CC6, 0x6CC6, 0x19DC,
+    0x6CC7, 0x6CC7, 0x19E9, 0x6CC9, 0x6CC9, 0x0770, 0x6CCA, 0x6CCA, 0x063A,
+    0x6CCB, 0x6CCB, 0x4070, 0x6CCC, 0x6CCC, 0x0624, 0x6CCD, 0x6CCD, 0x19E8,
+    0x6CCE, 0x6CCE, 0x3F91, 0x6CCF, 0x6CCF, 0x19EC, 0x6CD0, 0x6CD0, 0x19D8,
+    0x6CD1, 0x6CD1, 0x19EE, 0x6CD2, 0x6CD2, 0x19DF, 0x6CD3, 0x6CD3, 0x062D,
+    0x6CD4, 0x6CD4, 0x19D4, 0x6CD5, 0x6CD5, 0x062C, 0x6CD6, 0x6CD6, 0x063E,
+    0x6CD7, 0x6CD7, 0x0633, 0x6CD9, 0x6CD9, 0x19D2, 0x6CDA, 0x6CDA, 0x1B4E,
+    0x6CDB, 0x6CDB, 0x0639, 0x6CDC, 0x6CDC, 0x063D, 0x6CDD, 0x6CDD, 0x19E0,
+    0x6CDE, 0x6CDE, 0x19E5, 0x6CDF, 0x6CDF, 0x3D57, 0x6CE0, 0x6CE0, 0x063F,
+    0x6CE1, 0x6CE1, 0x0638, 0x6CE2, 0x6CE2, 0x062A, 0x6CE3, 0x6CE3, 0x0620,
+    0x6CE5, 0x6CE5, 0x0625, 0x6CE7, 0x6CE7, 0x19D6, 0x6CE8, 0x6CE8, 0x0621,
+    0x6CE9, 0x6CE9, 0x19ED, 0x6CEA, 0x6CEA, 0x3F8D, 0x6CEB, 0x6CEB, 0x19D0,
+    0x6CEC, 0x6CEC, 0x19CF, 0x6CED, 0x6CED, 0x19DD, 0x6CEE, 0x6CEE, 0x19D1,
+    0x6CEF, 0x6CEF, 0x063C, 0x6CF0, 0x6CF0, 0x0907, 0x6CF1, 0x6CF1, 0x0635,
+    0x6CF2, 0x6CF2, 0x19DE, 0x6CF3, 0x6CF3, 0x0622, 0x6CF5, 0x6CF5, 0x077F,
+    0x6CF9, 0x6CF9, 0x19EB, 0x6D00, 0x6D00, 0x1B55, 0x6D01, 0x6D01, 0x1B58,
+    0x6D02, 0x6D02, 0x4671, 0x6D03, 0x6D03, 0x1B5B, 0x6D04, 0x6D04, 0x1B50,
+    0x6D05, 0x6D05, 0x3A19, 0x6D06, 0x6D06, 0x4672, 0x6D07, 0x6D07, 0x1B5E,
+    0x6D08, 0x6D08, 0x1B61, 0x6D09, 0x6D09, 0x1B63, 0x6D0A, 0x6D0A, 0x1B4D,
+    0x6D0B, 0x6D0B, 0x0771, 0x6D0C, 0x6D0C, 0x0776, 0x6D0D, 0x6D0D, 0x1CF9,
+    0x6D0E, 0x6D0E, 0x0786, 0x6D0F, 0x6D0F, 0x1B5C, 0x6D10, 0x6D10, 0x1B64,
+    0x6D11, 0x6D11, 0x1B54, 0x6D12, 0x6D12, 0x1B4C, 0x6D16, 0x6D16, 0x1D14,
+    0x6D17, 0x6D17, 0x0779, 0x6D18, 0x6D18, 0x1B59, 0x6D19, 0x6D19, 0x1B51,
+    0x6D1A, 0x6D1A, 0x1B53, 0x6D1B, 0x6D1B, 0x077E, 0x6D1D, 0x6D1D, 0x1B56,
+    0x6D1E, 0x6D1E, 0x0778, 0x6D1F, 0x6D1F, 0x1B49, 0x6D20, 0x6D20, 0x1B5F,
+    0x6D22, 0x6D22, 0x1B62, 0x6D24, 0x6D24, 0x3AC3, 0x6D25, 0x6D25, 0x0775,
+    0x6D26, 0x6D26, 0x4673, 0x6D27, 0x6D27, 0x0781, 0x6D28, 0x6D28, 0x1B46,
+    0x6D29, 0x6D29, 0x0783, 0x6D2A, 0x6D2A, 0x0773, 0x6D2B, 0x6D2B, 0x0787,
+    0x6D2C, 0x6D2C, 0x1B60, 0x6D2D, 0x6D2D, 0x1B48, 0x6D2E, 0x6D2E, 0x0784,
+    0x6D2F, 0x6D2F, 0x1D0E, 0x6D30, 0x6D30, 0x19E7, 0x6D31, 0x6D31, 0x0777,
+    0x6D32, 0x6D32, 0x0772, 0x6D33, 0x6D33, 0x1B4F, 0x6D34, 0x6D34, 0x1B47,
+    0x6D35, 0x6D35, 0x0785, 0x6D36, 0x6D36, 0x077D, 0x6D37, 0x6D37, 0x1B5A,
+    0x6D38, 0x6D38, 0x0782, 0x6D39, 0x6D39, 0x0780, 0x6D3A, 0x6D3A, 0x1B52,
+    0x6D3B, 0x6D3B, 0x077A, 0x6D3C, 0x6D3C, 0x1B4A, 0x6D3D, 0x6D3E, 0x077B,
+    0x6D3F, 0x6D3F, 0x1B4B, 0x6D40, 0x6D40, 0x1B5D, 0x6D41, 0x6D41, 0x0774,
+    0x6D42, 0x6D42, 0x1B57, 0x6D4E, 0x6D4E, 0x4558, 0x6D57, 0x6D57, 0x3CF3,
+    0x6D58, 0x6D58, 0x1CFC, 0x6D59, 0x6D59, 0x090F, 0x6D5A, 0x6D5A, 0x0914,
+    0x6D5B, 0x6D5B, 0x409C, 0x6D5C, 0x6D5C, 0x4222, 0x6D5E, 0x6D5E, 0x1D05,
+    0x6D5F, 0x6D5F, 0x1D0B, 0x6D60, 0x6D60, 0x1D07, 0x6D61, 0x6D61, 0x1CFA,
+    0x6D62, 0x6D62, 0x1CFD, 0x6D63, 0x6D64, 0x1CF6, 0x6D65, 0x6D65, 0x091B,
+    0x6D66, 0x6D66, 0x090C, 0x6D67, 0x6D67, 0x1D06, 0x6D68, 0x6D68, 0x1D0F,
+    0x6D69, 0x6D69, 0x0916, 0x6D6A, 0x6D6A, 0x0908, 0x6D6C, 0x6D6C, 0x0911,
+    0x6D6D, 0x6D6D, 0x1CFE, 0x6D6E, 0x6D6E, 0x0913, 0x6D6F, 0x6D6F, 0x1CFF,
+    0x6D70, 0x6D70, 0x1D09, 0x6D71, 0x6D71, 0x40F5, 0x6D72, 0x6D72, 0x39D7,
+    0x6D74, 0x6D74, 0x0915, 0x6D75, 0x6D75, 0x1D18, 0x6D76, 0x6D76, 0x1CF8,
+    0x6D77, 0x6D77, 0x090E, 0x6D78, 0x6D78, 0x090D, 0x6D79, 0x6D79, 0x0919,
+    0x6D7A, 0x6D7A, 0x1CF5, 0x6D7B, 0x6D7B, 0x1D16, 0x6D7C, 0x6D7C, 0x1D0A,
+    0x6D7D, 0x6D7D, 0x1D17, 0x6D7E, 0x6D7E, 0x1D11, 0x6D7F, 0x6D7F, 0x1D03,
+    0x6D80, 0x6D80, 0x1D12, 0x6D81, 0x6D81, 0x4674, 0x6D82, 0x6D82, 0x1D0C,
+    0x6D83, 0x6D83, 0x1D15, 0x6D84, 0x6D84, 0x1D13, 0x6D85, 0x6D85, 0x091A,
+    0x6D86, 0x6D86, 0x1D04, 0x6D87, 0x6D87, 0x090B, 0x6D88, 0x6D88, 0x090A,
+    0x6D89, 0x6D89, 0x0912, 0x6D8A, 0x6D8A, 0x0918, 0x6D8B, 0x6D8B, 0x1D10,
+    0x6D8C, 0x6D8C, 0x0917, 0x6D8D, 0x6D8D, 0x1D01, 0x6D8E, 0x6D8E, 0x0AEC,
+    0x6D8F, 0x6D8F, 0x3DE8, 0x6D90, 0x6D90, 0x1D19, 0x6D91, 0x6D91, 0x1D00,
+    0x6D92, 0x6D92, 0x1CFB, 0x6D93, 0x6D93, 0x0910, 0x6D94, 0x6D94, 0x091C,
+    0x6D95, 0x6D95, 0x0909, 0x6D96, 0x6D96, 0x4221, 0x6D97, 0x6D97, 0x1D08,
+    0x6D98, 0x6D98, 0x1D0D, 0x6DA4, 0x6DA4, 0x4676, 0x6DA5, 0x6DA5, 0x3AB9,
+    0x6DAA, 0x6DAA, 0x0B0E, 0x6DAB, 0x6DAB, 0x1F46, 0x6DAC, 0x6DAC, 0x1F4A,
+    0x6DAE, 0x6DAE, 0x0AFB, 0x6DAF, 0x6DAF, 0x0AF9, 0x6DB1, 0x6DB1, 0x4677,
+    0x6DB2, 0x6DB2, 0x0AF0, 0x6DB3, 0x6DB3, 0x1F48, 0x6DB4, 0x6DB4, 0x1F47,
+    0x6DB5, 0x6DB5, 0x0B04, 0x6DB7, 0x6DB7, 0x1F4D, 0x6DB8, 0x6DB8, 0x0AFE,
+    0x6DB9, 0x6DB9, 0x3FFB, 0x6DBA, 0x6DBA, 0x1F5F, 0x6DBB, 0x6DBB, 0x1F6B,
+    0x6DBC, 0x6DBC, 0x0AED, 0x6DBD, 0x6DBD, 0x1F5C, 0x6DBE, 0x6DBE, 0x1F55,
+    0x6DBF, 0x6DBF, 0x0B10, 0x6DC0, 0x6DC0, 0x1F45, 0x6DC2, 0x6DC2, 0x1F61,
+    0x6DC4, 0x6DC4, 0x0B0D, 0x6DC5, 0x6DC5, 0x0B01, 0x6DC6, 0x6DC6, 0x0B0C,
+    0x6DC7, 0x6DC7, 0x0AF7, 0x6DC8, 0x6DC8, 0x1F51, 0x6DC9, 0x6DC9, 0x1F63,
+    0x6DCA, 0x6DCA, 0x1F5B, 0x6DCB, 0x6DCB, 0x0AF8, 0x6DCC, 0x6DCC, 0x0AF2,
+    0x6DCD, 0x6DCD, 0x1F69, 0x6DCF, 0x6DCF, 0x1F62, 0x6DD0, 0x6DD0, 0x1F64,
+    0x6DD1, 0x6DD1, 0x0AFA, 0x6DD2, 0x6DD2, 0x0B02, 0x6DD3, 0x6DD3, 0x1F66,
+    0x6DD4, 0x6DD4, 0x1F4F, 0x6DD5, 0x6DD5, 0x1F60, 0x6DD6, 0x6DD6, 0x1F54,
+    0x6DD7, 0x6DD7, 0x1F68, 0x6DD8, 0x6DD8, 0x0B07, 0x6DD9, 0x6DD9, 0x0AEF,
+    0x6DDA, 0x6DDA, 0x0B05, 0x6DDB, 0x6DDB, 0x1F59, 0x6DDC, 0x6DDD, 0x1F57,
+    0x6DDE, 0x6DDE, 0x0AFC, 0x6DDF, 0x6DDF, 0x1F53, 0x6DE0, 0x6DE0, 0x1F52,
+    0x6DE1, 0x6DE1, 0x0AF1, 0x6DE2, 0x6DE2, 0x1F4C, 0x6DE3, 0x6DE3, 0x1F6A,
+    0x6DE4, 0x6DE4, 0x0AF3, 0x6DE5, 0x6DE5, 0x1F56, 0x6DE6, 0x6DE6, 0x0B11,
+    0x6DE8, 0x6DE8, 0x0B0B, 0x6DE9, 0x6DE9, 0x1F4B, 0x6DEA, 0x6DEA, 0x0B08,
+    0x6DEB, 0x6DEB, 0x0B06, 0x6DEC, 0x6DEC, 0x0B0F, 0x6DED, 0x6DED, 0x1F5D,
+    0x6DEE, 0x6DEE, 0x0B0A, 0x6DEF, 0x6DEF, 0x1D02, 0x6DF0, 0x6DF0, 0x1F5E,
+    0x6DF1, 0x6DF1, 0x0B09, 0x6DF2, 0x6DF2, 0x1F65, 0x6DF3, 0x6DF3, 0x0AEE,
+    0x6DF4, 0x6DF4, 0x1F5A, 0x6DF5, 0x6DF5, 0x0B00, 0x6DF6, 0x6DF6, 0x1F4E,
+    0x6DF7, 0x6DF7, 0x0AFF, 0x6DF9, 0x6DF9, 0x0AFD, 0x6DFA, 0x6DFA, 0x0AF5,
+    0x6DFB, 0x6DFB, 0x0AF4, 0x6DFC, 0x6DFC, 0x21BF, 0x6DFD, 0x6DFD, 0x1F67,
+    0x6E00, 0x6E00, 0x1F50, 0x6E02, 0x6E02, 0x3CFA, 0x6E03, 0x6E03, 0x21D4,
+    0x6E04, 0x6E04, 0x3ABE, 0x6E05, 0x6E05, 0x0AF6, 0x6E0A, 0x6E0A, 0x3AC1,
+    0x6E0F, 0x6E0F, 0x3CF0, 0x6E15, 0x6E15, 0x4678, 0x6E18, 0x6E18, 0x4679,
+    0x6E19, 0x6E19, 0x0CC1, 0x6E1A, 0x6E1A, 0x0B03, 0x6E1B, 0x6E1B, 0x0CAF,
+    0x6E1C, 0x6E1C, 0x21CE, 0x6E1D, 0x6E1D, 0x0CBD, 0x6E1F, 0x6E1F, 0x21C2,
+    0x6E20, 0x6E20, 0x0CAC, 0x6E21, 0x6E21, 0x0CA8, 0x6E22, 0x6E22, 0x21E0,
+    0x6E23, 0x6E23, 0x0CAE, 0x6E24, 0x6E24, 0x0CB2, 0x6E25, 0x6E25, 0x0CAD,
+    0x6E26, 0x6E26, 0x0CB6, 0x6E27, 0x6E27, 0x21E4, 0x6E28, 0x6E28, 0x21DB,
+    0x6E29, 0x6E29, 0x467A, 0x6E2A, 0x6E2A, 0x4302, 0x6E2B, 0x6E2B, 0x21C9,
+    0x6E2C, 0x6E2C, 0x0CBB, 0x6E2D, 0x6E2D, 0x0CB5, 0x6E2E, 0x6E2E, 0x21D5,
+    0x6E2F, 0x6E2F, 0x0CA5, 0x6E30, 0x6E30, 0x21E1, 0x6E31, 0x6E31, 0x21DA,
+    0x6E32, 0x6E32, 0x0CA9, 0x6E33, 0x6E33, 0x21CF, 0x6E34, 0x6E34, 0x0CB8,
+    0x6E35, 0x6E36, 0x21EC, 0x6E38, 0x6E38, 0x0CA6, 0x6E39, 0x6E39, 0x21DF,
+    0x6E3A, 0x6E3A, 0x0CBA, 0x6E3B, 0x6E3B, 0x21D3, 0x6E3C, 0x6E3D, 0x21C5,
+    0x6E3E, 0x6E3E, 0x0CBE, 0x6E3F, 0x6E3F, 0x21CA, 0x6E40, 0x6E40, 0x21D1,
+    0x6E41, 0x6E41, 0x21CB, 0x6E43, 0x6E43, 0x0CBC, 0x6E44, 0x6E44, 0x0CC4,
+    0x6E45, 0x6E45, 0x21C7, 0x6E46, 0x6E47, 0x21C0, 0x6E49, 0x6E49, 0x21C3,
+    0x6E4A, 0x6E4A, 0x0CAB, 0x6E4B, 0x6E4B, 0x21D0, 0x6E4D, 0x6E4D, 0x0CB9,
+    0x6E4E, 0x6E4E, 0x0CC2, 0x6E4F, 0x6E4F, 0x4234, 0x6E50, 0x6E50, 0x41D1,
+    0x6E51, 0x6E51, 0x21D2, 0x6E52, 0x6E52, 0x21EA, 0x6E53, 0x6E53, 0x21E2,
+    0x6E54, 0x6E54, 0x0CA7, 0x6E55, 0x6E55, 0x21E8, 0x6E56, 0x6E56, 0x0CB3,
+    0x6E58, 0x6E58, 0x0CB1, 0x6E59, 0x6E59, 0x40E6, 0x6E5A, 0x6E5A, 0x21EE,
+    0x6E5B, 0x6E5B, 0x0CB0, 0x6E5C, 0x6E5C, 0x21D8, 0x6E5D, 0x6E5D, 0x21CC,
+    0x6E5E, 0x6E5E, 0x21D6, 0x6E5F, 0x6E5F, 0x0CC7, 0x6E60, 0x6E60, 0x21DC,
+    0x6E61, 0x6E61, 0x21D9, 0x6E62, 0x6E62, 0x21C8, 0x6E63, 0x6E63, 0x0CC3,
+    0x6E64, 0x6E64, 0x21E6, 0x6E65, 0x6E65, 0x21E3, 0x6E66, 0x6E66, 0x21EB,
+    0x6E67, 0x6E67, 0x0CAA, 0x6E68, 0x6E68, 0x21D7, 0x6E69, 0x6E69, 0x0CC6,
+    0x6E6B, 0x6E6B, 0x21DE, 0x6E6E, 0x6E6E, 0x0CB4, 0x6E6F, 0x6E6F, 0x0CB7,
+    0x6E71, 0x6E71, 0x21DD, 0x6E72, 0x6E72, 0x0CC5, 0x6E73, 0x6E73, 0x21CD,
+    0x6E74, 0x6E74, 0x1F49, 0x6E76, 0x6E76, 0x39D3, 0x6E77, 0x6E77, 0x21E7,
+    0x6E78, 0x6E78, 0x21E5, 0x6E79, 0x6E79, 0x21E9, 0x6E7C, 0x6E7C, 0x4223,
+    0x6E86, 0x6E86, 0x467B, 0x6E88, 0x6E88, 0x21C4, 0x6E89, 0x6E89, 0x0CC0,
+    0x6E8B, 0x6E8B, 0x3BBF, 0x6E8D, 0x6E8D, 0x246C, 0x6E8E, 0x6E8E, 0x246B,
+    0x6E8F, 0x6E8F, 0x2451, 0x6E90, 0x6E90, 0x0E55, 0x6E92, 0x6E92, 0x246A,
+    0x6E93, 0x6E94, 0x2454, 0x6E96, 0x6E96, 0x0E5F, 0x6E97, 0x6E97, 0x2473,
+    0x6E98, 0x6E98, 0x0E5A, 0x6E99, 0x6E99, 0x2469, 0x6E9A, 0x6E9A, 0x4581,
+    0x6E9B, 0x6E9B, 0x244E, 0x6E9C, 0x6E9C, 0x0E60, 0x6E9D, 0x6E9D, 0x0E56,
+    0x6E9E, 0x6E9E, 0x245D, 0x6E9F, 0x6E9F, 0x2453, 0x6EA0, 0x6EA0, 0x2456,
+    0x6EA1, 0x6EA1, 0x246E, 0x6EA2, 0x6EA2, 0x0E50, 0x6EA3, 0x6EA3, 0x2475,
+    0x6EA4, 0x6EA4, 0x246D, 0x6EA5, 0x6EA5, 0x0E59, 0x6EA6, 0x6EA6, 0x2462,
+    0x6EA7, 0x6EA7, 0x0E64, 0x6EAA, 0x6EAA, 0x0E63, 0x6EAB, 0x6EAB, 0x0E5D,
+    0x6EAE, 0x6EAE, 0x2474, 0x6EAF, 0x6EAF, 0x0E51, 0x6EB0, 0x6EB0, 0x2460,
+    0x6EB1, 0x6EB1, 0x2457, 0x6EB2, 0x6EB2, 0x2464, 0x6EB3, 0x6EB3, 0x2470,
+    0x6EB4, 0x6EB4, 0x0E65, 0x6EB5, 0x6EB5, 0x41FE, 0x6EB6, 0x6EB6, 0x0E53,
+    0x6EB7, 0x6EB7, 0x245F, 0x6EB8, 0x6EB8, 0x3E0C, 0x6EB9, 0x6EB9, 0x2458,
+    0x6EBA, 0x6EBA, 0x0E5C, 0x6EBB, 0x6EBB, 0x467D, 0x6EBC, 0x6EBC, 0x0E5B,
+    0x6EBD, 0x6EBD, 0x245B, 0x6EBE, 0x6EBE, 0x2465, 0x6EBF, 0x6EBF, 0x246F,
+    0x6EC0, 0x6EC0, 0x2452, 0x6EC1, 0x6EC1, 0x245C, 0x6EC2, 0x6EC2, 0x0E54,
+    0x6EC3, 0x6EC3, 0x2466, 0x6EC4, 0x6EC4, 0x0E61, 0x6EC5, 0x6EC5, 0x0E58,
+    0x6EC6, 0x6EC6, 0x2459, 0x6EC7, 0x6EC7, 0x0E57, 0x6EC8, 0x6EC8, 0x2450,
+    0x6EC9, 0x6EC9, 0x245E, 0x6ECA, 0x6ECA, 0x2472, 0x6ECB, 0x6ECB, 0x0CBF,
+    0x6ECC, 0x6ECC, 0x101F, 0x6ECD, 0x6ECD, 0x2461, 0x6ECE, 0x6ECE, 0x26EB,
+    0x6ECF, 0x6ECF, 0x2463, 0x6ED0, 0x6ED0, 0x2471, 0x6ED1, 0x6ED1, 0x0E5E,
+    0x6ED2, 0x6ED2, 0x245A, 0x6ED3, 0x6ED3, 0x0E52, 0x6ED4, 0x6ED4, 0x0E62,
+    0x6ED5, 0x6ED5, 0x119A, 0x6ED6, 0x6ED6, 0x244F, 0x6ED8, 0x6ED8, 0x2468,
+    0x6ED9, 0x6ED9, 0x4069, 0x6EDA, 0x6EDA, 0x467F, 0x6EDB, 0x6EDB, 0x402F,
+    0x6EDC, 0x6EDC, 0x2467, 0x6EDD, 0x6EDD, 0x4538, 0x6EE2, 0x6EE2, 0x467E,
+    0x6EE8, 0x6EE9, 0x4681, 0x6EEB, 0x6EEB, 0x2707, 0x6EEC, 0x6EEC, 0x101C,
+    0x6EED, 0x6EED, 0x26FC, 0x6EEE, 0x6EEE, 0x2701, 0x6EEF, 0x6EEF, 0x1011,
+    0x6EF1, 0x6EF1, 0x26ED, 0x6EF2, 0x6EF2, 0x101E, 0x6EF4, 0x6EF4, 0x1008,
+    0x6EF5, 0x6EF5, 0x26EC, 0x6EF6, 0x6EF6, 0x270D, 0x6EF7, 0x6EF7, 0x1020,
+    0x6EF8, 0x6EF8, 0x26F0, 0x6EF9, 0x6EF9, 0x2700, 0x6EFA, 0x6EFA, 0x423B,
+    0x6EFB, 0x6EFB, 0x26F2, 0x6EFC, 0x6EFC, 0x2710, 0x6EFD, 0x6EFD, 0x270C,
+    0x6EFE, 0x6EFE, 0x1006, 0x6EFF, 0x6EFF, 0x1010, 0x6F00, 0x6F00, 0x2946,
+    0x6F01, 0x6F01, 0x101D, 0x6F02, 0x6F02, 0x100E, 0x6F03, 0x6F03, 0x26EE,
+    0x6F04, 0x6F04, 0x4224, 0x6F05, 0x6F05, 0x270B, 0x6F06, 0x6F06, 0x1012,
+    0x6F07, 0x6F07, 0x2708, 0x6F08, 0x6F08, 0x2715, 0x6F09, 0x6F09, 0x26F4,
+    0x6F0A, 0x6F0A, 0x26FD, 0x6F0B, 0x6F0B, 0x3ABA, 0x6F0C, 0x6F0C, 0x3CFB,
+    0x6F0D, 0x6F0D, 0x2713, 0x6F0E, 0x6F0E, 0x2709, 0x6F0F, 0x6F0F, 0x100D,
+    0x6F12, 0x6F12, 0x26FB, 0x6F13, 0x6F13, 0x1007, 0x6F14, 0x6F14, 0x1005,
+    0x6F15, 0x6F15, 0x1017, 0x6F16, 0x6F16, 0x41A0, 0x6F17, 0x6F17, 0x46CE,
+    0x6F18, 0x6F18, 0x26F9, 0x6F19, 0x6F1A, 0x26F6, 0x6F1C, 0x6F1C, 0x270F,
+    0x6F1E, 0x6F1E, 0x2714, 0x6F1F, 0x6F1F, 0x2712, 0x6F20, 0x6F20, 0x100B,
+    0x6F21, 0x6F21, 0x2716, 0x6F22, 0x6F22, 0x100F, 0x6F23, 0x6F23, 0x1016,
+    0x6F24, 0x6F24, 0x4683, 0x6F25, 0x6F25, 0x26EF, 0x6F26, 0x6F26, 0x292E,
+    0x6F27, 0x6F27, 0x26F8, 0x6F29, 0x6F29, 0x1009, 0x6F2A, 0x6F2A, 0x101B,
+    0x6F2B, 0x6F2B, 0x1018, 0x6F2C, 0x6F2C, 0x100C, 0x6F2D, 0x6F2D, 0x2702,
+    0x6F2E, 0x6F2E, 0x26F3, 0x6F2F, 0x6F2F, 0x1019, 0x6F30, 0x6F30, 0x2704,
+    0x6F31, 0x6F31, 0x1013, 0x6F32, 0x6F32, 0x1015, 0x6F33, 0x6F33, 0x1004,
+    0x6F34, 0x6F34, 0x4684, 0x6F35, 0x6F35, 0x2706, 0x6F36, 0x6F36, 0x26FE,
+    0x6F37, 0x6F37, 0x26F1, 0x6F38, 0x6F38, 0x1014, 0x6F39, 0x6F39, 0x270E,
+    0x6F3A, 0x6F3A, 0x2711, 0x6F3B, 0x6F3B, 0x26FA, 0x6F3C, 0x6F3C, 0x2705,
+    0x6F3D, 0x6F3D, 0x4282, 0x6F3E, 0x6F3E, 0x100A, 0x6F3F, 0x6F3F, 0x1189,
+    0x6F40, 0x6F40, 0x2703, 0x6F41, 0x6F41, 0x292D, 0x6F43, 0x6F43, 0x270A,
+    0x6F44, 0x6F44, 0x4240, 0x6F4E, 0x6F4E, 0x26F5, 0x6F4F, 0x6F4F, 0x2937,
+    0x6F50, 0x6F50, 0x2941, 0x6F51, 0x6F51, 0x118C, 0x6F52, 0x6F52, 0x2940,
+    0x6F53, 0x6F53, 0x294C, 0x6F54, 0x6F54, 0x118E, 0x6F55, 0x6F55, 0x293E,
+    0x6F56, 0x6F56, 0x3E52, 0x6F57, 0x6F57, 0x2942, 0x6F58, 0x6F58, 0x1199,
+    0x6F5A, 0x6F5A, 0x2939, 0x6F5B, 0x6F5B, 0x1191, 0x6F5C, 0x6F5C, 0x4241,
+    0x6F5D, 0x6F5D, 0x2945, 0x6F5E, 0x6F5E, 0x2B9A, 0x6F5F, 0x6F5F, 0x119D,
+    0x6F60, 0x6F60, 0x119C, 0x6F61, 0x6F61, 0x2947, 0x6F62, 0x6F62, 0x2936,
+    0x6F63, 0x6F63, 0x2951, 0x6F64, 0x6F64, 0x1197, 0x6F66, 0x6F66, 0x118D,
+    0x6F67, 0x6F67, 0x294A, 0x6F69, 0x6F69, 0x294E, 0x6F6A, 0x6F6A, 0x2953,
+    0x6F6B, 0x6F6B, 0x2948, 0x6F6C, 0x6F6C, 0x293C, 0x6F6D, 0x6F6D, 0x1190,
+    0x6F6E, 0x6F6E, 0x1193, 0x6F6F, 0x6F6F, 0x119B, 0x6F70, 0x6F70, 0x1196,
+    0x6F72, 0x6F72, 0x293F, 0x6F73, 0x6F73, 0x26FF, 0x6F74, 0x6F74, 0x4243,
+    0x6F76, 0x6F76, 0x293B, 0x6F77, 0x6F77, 0x2952, 0x6F78, 0x6F78, 0x1192,
+    0x6F79, 0x6F79, 0x3BBE, 0x6F7A, 0x6F7A, 0x1195, 0x6F7B, 0x6F7B, 0x2954,
+    0x6F7C, 0x6F7C, 0x118A, 0x6F7D, 0x6F7D, 0x2949, 0x6F7E, 0x6F7E, 0x292F,
+    0x6F7F, 0x6F7F, 0x294F, 0x6F80, 0x6F80, 0x13FC, 0x6F81, 0x6F81, 0x4687,
+    0x6F82, 0x6F82, 0x293D, 0x6F84, 0x6F84, 0x118B, 0x6F85, 0x6F85, 0x2938,
+    0x6F86, 0x6F86, 0x118F, 0x6F87, 0x6F87, 0x2930, 0x6F88, 0x6F88, 0x101A,
+    0x6F89, 0x6F89, 0x2934, 0x6F8A, 0x6F8A, 0x4195, 0x6F8B, 0x6F8B, 0x294D,
+    0x6F8C, 0x6F8C, 0x2935, 0x6F8D, 0x6F8D, 0x2933, 0x6F8E, 0x6F8E, 0x1194,
+    0x6F90, 0x6F90, 0x294B, 0x6F92, 0x6F92, 0x2932, 0x6F93, 0x6F93, 0x2944,
+    0x6F94, 0x6F94, 0x2943, 0x6F95, 0x6F95, 0x2950, 0x6F96, 0x6F96, 0x293A,
+    0x6F97, 0x6F97, 0x1198, 0x6F9D, 0x6F9D, 0x4239, 0x6F9E, 0x6F9E, 0x2B9D,
+    0x6F9F, 0x6F9F, 0x4246, 0x6FA0, 0x6FA0, 0x12EB, 0x6FA1, 0x6FA1, 0x12E1,
+    0x6FA2, 0x6FA2, 0x2BA9, 0x6FA3, 0x6FA3, 0x2B95, 0x6FA4, 0x6FA4, 0x12E3,
+    0x6FA5, 0x6FA5, 0x2BA1, 0x6FA6, 0x6FA6, 0x12EA, 0x6FA7, 0x6FA7, 0x12E5,
+    0x6FA8, 0x6FA8, 0x2B9F, 0x6FA9, 0x6FA9, 0x2D8E, 0x6FAA, 0x6FAA, 0x2BA5,
+    0x6FAB, 0x6FAB, 0x2BAB, 0x6FAC, 0x6FAC, 0x2BA4, 0x6FAD, 0x6FAD, 0x2B93,
+    0x6FAE, 0x6FAE, 0x2BA2, 0x6FAF, 0x6FAF, 0x2BAD, 0x6FB0, 0x6FB0, 0x2BAF,
+    0x6FB1, 0x6FB1, 0x12E0, 0x6FB2, 0x6FB2, 0x2BAE, 0x6FB3, 0x6FB3, 0x12E6,
+    0x6FB4, 0x6FB4, 0x12EC, 0x6FB5, 0x6FB5, 0x3E27, 0x6FB6, 0x6FB6, 0x12E9,
+    0x6FB8, 0x6FB8, 0x2BA8, 0x6FB9, 0x6FB9, 0x12E8, 0x6FBA, 0x6FBA, 0x2BA3,
+    0x6FBB, 0x6FBB, 0x3BBB, 0x6FBC, 0x6FBC, 0x2B97, 0x6FBD, 0x6FBD, 0x2B9C,
+    0x6FBE, 0x6FBE, 0x4688, 0x6FBF, 0x6FBF, 0x2BA7, 0x6FC0, 0x6FC0, 0x12E7,
+    0x6FC1, 0x6FC1, 0x12E4, 0x6FC2, 0x6FC2, 0x12DF, 0x6FC3, 0x6FC3, 0x12E2,
+    0x6FC4, 0x6FC4, 0x2B9B, 0x6FC6, 0x6FC6, 0x2931, 0x6FC7, 0x6FC7, 0x2B96,
+    0x6FC8, 0x6FC8, 0x2B99, 0x6FC9, 0x6FC9, 0x2BAA, 0x6FCA, 0x6FCA, 0x2B9E,
+    0x6FCB, 0x6FCB, 0x2B94, 0x6FCC, 0x6FCC, 0x2D8D, 0x6FCD, 0x6FCD, 0x2BAC,
+    0x6FCE, 0x6FCE, 0x2B98, 0x6FCF, 0x6FCF, 0x2BA6, 0x6FD3, 0x6FD3, 0x4248,
+    0x6FD4, 0x6FD4, 0x2D90, 0x6FD5, 0x6FD5, 0x1400, 0x6FD8, 0x6FD8, 0x13F4,
+    0x6FD9, 0x6FD9, 0x3C74, 0x6FDA, 0x6FDA, 0x3C73, 0x6FDB, 0x6FDB, 0x13F8,
+    0x6FDC, 0x6FDC, 0x2D92, 0x6FDD, 0x6FDD, 0x2D98, 0x6FDE, 0x6FDE, 0x2D96,
+    0x6FDF, 0x6FE0, 0x13F6, 0x6FE1, 0x6FE1, 0x13FE, 0x6FE2, 0x6FE2, 0x2D99,
+    0x6FE3, 0x6FE3, 0x2D91, 0x6FE4, 0x6FE4, 0x13F9, 0x6FE6, 0x6FE6, 0x2D95,
+    0x6FE7, 0x6FE7, 0x2D94, 0x6FE8, 0x6FE8, 0x2D9A, 0x6FE9, 0x6FE9, 0x13FF,
+    0x6FEB, 0x6FEB, 0x13FA, 0x6FEC, 0x6FEC, 0x13FD, 0x6FED, 0x6FED, 0x2D93,
+    0x6FEE, 0x6FEE, 0x1401, 0x6FEF, 0x6FEF, 0x13FB, 0x6FF0, 0x6FF0, 0x1402,
+    0x6FF1, 0x6FF1, 0x13F5, 0x6FF2, 0x6FF2, 0x2D97, 0x6FF4, 0x6FF4, 0x2D8F,
+    0x6FF6, 0x6FF6, 0x38A5, 0x6FF7, 0x6FF7, 0x2F4E, 0x6FF8, 0x6FF8, 0x4237,
+    0x6FFA, 0x6FFA, 0x14EB, 0x6FFB, 0x6FFB, 0x2F4B, 0x6FFC, 0x6FFC, 0x2F4D,
+    0x6FFE, 0x6FFE, 0x14E9, 0x6FFF, 0x6FFF, 0x2F49, 0x7000, 0x7000, 0x2F4A,
+    0x7001, 0x7001, 0x2F45, 0x7003, 0x7003, 0x46E2, 0x7004, 0x7004, 0x2BA0,
+    0x7005, 0x7005, 0x2F46, 0x7006, 0x7006, 0x14EA, 0x7007, 0x7007, 0x2F42,
+    0x7009, 0x7009, 0x14E7, 0x700A, 0x700A, 0x2F4F, 0x700B, 0x700B, 0x14E8,
+    0x700C, 0x700D, 0x2F43, 0x700E, 0x700E, 0x2F48, 0x700F, 0x700F, 0x14ED,
+    0x7011, 0x7011, 0x14EC, 0x7014, 0x7014, 0x2F47, 0x7015, 0x7015, 0x158F,
+    0x7016, 0x7016, 0x30AD, 0x7017, 0x7017, 0x30B3, 0x7018, 0x7018, 0x1590,
+    0x7019, 0x7019, 0x30AA, 0x701A, 0x701A, 0x158D, 0x701B, 0x701B, 0x158A,
+    0x701C, 0x701C, 0x30B5, 0x701D, 0x701D, 0x158E, 0x701E, 0x701E, 0x3C76,
+    0x701F, 0x701F, 0x158B, 0x7020, 0x7020, 0x30AC, 0x7021, 0x7023, 0x30AF,
+    0x7024, 0x7024, 0x30B4, 0x7026, 0x7026, 0x2F4C, 0x7027, 0x7027, 0x30AB,
+    0x7028, 0x7028, 0x158C, 0x7029, 0x7029, 0x30B2, 0x702A, 0x702A, 0x31EF,
+    0x702B, 0x702B, 0x30AE, 0x702C, 0x702C, 0x468E, 0x702F, 0x702F, 0x31E6,
+    0x7030, 0x7030, 0x161D, 0x7031, 0x7031, 0x31E9, 0x7032, 0x7032, 0x161E,
+    0x7033, 0x7033, 0x31F2, 0x7034, 0x7034, 0x31E8, 0x7035, 0x7035, 0x31E5,
+    0x7037, 0x7037, 0x31E7, 0x7038, 0x7038, 0x31EB, 0x7039, 0x7039, 0x31EE,
+    0x703A, 0x703A, 0x31ED, 0x703B, 0x703B, 0x31F1, 0x703C, 0x703C, 0x31E4,
+    0x703E, 0x703E, 0x161C, 0x703F, 0x703F, 0x31EC, 0x7040, 0x7040, 0x31F0,
+    0x7041, 0x7041, 0x31F3, 0x7042, 0x7042, 0x31EA, 0x7043, 0x7044, 0x32D8,
+    0x7045, 0x7046, 0x32DD, 0x7048, 0x7049, 0x32DB, 0x704A, 0x704A, 0x32DA,
+    0x704B, 0x704B, 0x4254, 0x704C, 0x704C, 0x167A, 0x7050, 0x7050, 0x4690,
+    0x7051, 0x7051, 0x16C8, 0x7052, 0x7052, 0x338C, 0x7054, 0x7054, 0x4691,
+    0x7055, 0x7057, 0x3389, 0x7058, 0x7058, 0x16C9, 0x705A, 0x705A, 0x3423,
+    0x705B, 0x705B, 0x3422, 0x705C, 0x705C, 0x3852, 0x705D, 0x705D, 0x348A,
+    0x705E, 0x705E, 0x1722, 0x705F, 0x705F, 0x3488, 0x7060, 0x7060, 0x348B,
+    0x7061, 0x7061, 0x3489, 0x7062, 0x7062, 0x34D0, 0x7063, 0x7063, 0x1744,
+    0x7064, 0x7064, 0x1752, 0x7065, 0x7065, 0x351C, 0x7066, 0x7066, 0x3506,
+    0x7067, 0x7067, 0x3CF5, 0x7068, 0x7068, 0x351B, 0x7069, 0x706A, 0x3547,
+    0x706B, 0x706B, 0x02E6, 0x706C, 0x706C, 0x44F1, 0x706F, 0x706F, 0x4692,
+    0x7070, 0x7070, 0x03F2, 0x7071, 0x7071, 0x180A, 0x7074, 0x7074, 0x18C3,
+    0x7075, 0x7075, 0x38C7, 0x7076, 0x7076, 0x04E6, 0x7078, 0x7078, 0x04E9,
+    0x7079, 0x7079, 0x4099, 0x707A, 0x707A, 0x18C4, 0x707C, 0x707D, 0x04E7,
+    0x707E, 0x707E, 0x4255, 0x707F, 0x707F, 0x4693, 0x7081, 0x7081, 0x4959,
+    0x7082, 0x7082, 0x19F7, 0x7083, 0x7083, 0x19F9, 0x7084, 0x7084, 0x19F4,
+    0x7085, 0x7085, 0x19F1, 0x7086, 0x7086, 0x19F3, 0x7089, 0x7089, 0x43F9,
+    0x708A, 0x708A, 0x0643, 0x708B, 0x708B, 0x40CB, 0x708E, 0x708E, 0x0641,
+    0x708F, 0x708F, 0x46B3, 0x7091, 0x7091, 0x19F5, 0x7092, 0x7092, 0x0642,
+    0x7093, 0x7093, 0x19F2, 0x7094, 0x7094, 0x19EF, 0x7095, 0x7095, 0x0640,
+    0x7096, 0x7096, 0x19F6, 0x7098, 0x7098, 0x19F0, 0x7099, 0x7099, 0x0644,
+    0x709A, 0x709A, 0x19F8, 0x709F, 0x709F, 0x1B66, 0x70A0, 0x70A0, 0x4742,
+    0x70A1, 0x70A1, 0x1B6A, 0x70A3, 0x70A3, 0x3972, 0x70A4, 0x70A4, 0x0790,
+    0x70A5, 0x70A5, 0x3CB7, 0x70A6, 0x70A6, 0x3D53, 0x70A7, 0x70A7, 0x4256,
+    0x70A9, 0x70A9, 0x1B6D, 0x70AB, 0x70AB, 0x0788, 0x70AC, 0x70AC, 0x078B,
+    0x70AD, 0x70AD, 0x078D, 0x70AE, 0x70AE, 0x078F, 0x70AF, 0x70AF, 0x078C,
+    0x70B0, 0x70B0, 0x1B69, 0x70B1, 0x70B1, 0x1B68, 0x70B3, 0x70B3, 0x078A,
+    0x70B4, 0x70B5, 0x1B6B, 0x70B7, 0x70B7, 0x1B65, 0x70B8, 0x70B8, 0x078E,
+    0x70B9, 0x70B9, 0x3D69, 0x70BA, 0x70BA, 0x0789, 0x70BB, 0x70BB, 0x4812,
+    0x70BC, 0x70BC, 0x4559, 0x70BD, 0x70BD, 0x4270, 0x70BE, 0x70BE, 0x1B67,
+    0x70C0, 0x70C0, 0x4733, 0x70C4, 0x70C4, 0x3BAA, 0x70C5, 0x70C7, 0x1D27,
+    0x70C8, 0x70C8, 0x0921, 0x70CA, 0x70CA, 0x091D, 0x70CB, 0x70CB, 0x1D1E,
+    0x70CC, 0x70CC, 0x4258, 0x70CD, 0x70CD, 0x1D26, 0x70CE, 0x70CE, 0x1D2B,
+    0x70CF, 0x70CF, 0x0922, 0x70D0, 0x70D0, 0x396D, 0x70D1, 0x70D1, 0x1D1C,
+    0x70D2, 0x70D2, 0x1D22, 0x70D3, 0x70D3, 0x1D1B, 0x70D4, 0x70D4, 0x1D25,
+    0x70D5, 0x70D6, 0x4259, 0x70D7, 0x70D7, 0x1D21, 0x70D8, 0x70D8, 0x091E,
+    0x70D9, 0x70D9, 0x0920, 0x70DA, 0x70DA, 0x1D2A, 0x70DC, 0x70DC, 0x1D1A,
+    0x70DD, 0x70DD, 0x1D1D, 0x70DE, 0x70DE, 0x1D23, 0x70DF, 0x70DF, 0x425B,
+    0x70E0, 0x70E0, 0x1D24, 0x70E1, 0x70E1, 0x1D2C, 0x70E2, 0x70E2, 0x1D20,
+    0x70E4, 0x70E4, 0x091F, 0x70EF, 0x70EF, 0x0B16, 0x70F0, 0x70F0, 0x1F72,
+    0x70F1, 0x70F1, 0x3AC8, 0x70F3, 0x70F3, 0x1F74, 0x70F4, 0x70F4, 0x1F70,
+    0x70F5, 0x70F5, 0x4760, 0x70F6, 0x70F6, 0x1F7C, 0x70F7, 0x70F7, 0x1F6E,
+    0x70F8, 0x70F8, 0x1F7B, 0x70F9, 0x70F9, 0x0B12, 0x70FA, 0x70FA, 0x1F6C,
+    0x70FB, 0x70FB, 0x21F2, 0x70FC, 0x70FC, 0x1F76, 0x70FD, 0x70FD, 0x0B15,
+    0x70FE, 0x70FE, 0x3D0E, 0x70FF, 0x70FF, 0x1F77, 0x7100, 0x7100, 0x1F7A,
+    0x7102, 0x7102, 0x1F7E, 0x7104, 0x7104, 0x1F73, 0x7105, 0x7105, 0x3A23,
+    0x7106, 0x7106, 0x1F78, 0x7109, 0x710A, 0x0B13, 0x710B, 0x710B, 0x1F7D,
+    0x710C, 0x710C, 0x1F71, 0x710D, 0x710D, 0x1F6D, 0x710E, 0x710E, 0x1F7F,
+    0x7110, 0x7110, 0x1F75, 0x7113, 0x7113, 0x1F79, 0x7117, 0x7117, 0x1F6F,
+    0x7119, 0x711A, 0x0CC8, 0x711B, 0x711B, 0x21FC, 0x711C, 0x711C, 0x0CCF,
+    0x711D, 0x711D, 0x3D47, 0x711E, 0x711E, 0x21F0, 0x711F, 0x711F, 0x21F9,
+    0x7120, 0x7120, 0x21EF, 0x7121, 0x7121, 0x0CCC, 0x7122, 0x7122, 0x21F7,
+    0x7123, 0x7123, 0x21F5, 0x7125, 0x7125, 0x21F6, 0x7126, 0x7126, 0x0CCA,
+    0x7128, 0x7128, 0x21FA, 0x7129, 0x7129, 0x3BA9, 0x712B, 0x712B, 0x4261,
+    0x712C, 0x712C, 0x426A, 0x712E, 0x712E, 0x21F3, 0x712F, 0x712F, 0x21F1,
+    0x7130, 0x7130, 0x0CCB, 0x7131, 0x7131, 0x21F4, 0x7132, 0x7132, 0x21F8,
+    0x7133, 0x7133, 0x3D54, 0x7134, 0x7134, 0x3C7E, 0x7135, 0x7135, 0x376D,
+    0x7136, 0x7136, 0x0CCD, 0x713A, 0x713A, 0x21FB, 0x713B, 0x713B, 0x3AC5,
+    0x713E, 0x713E, 0x372E, 0x7140, 0x7140, 0x4398, 0x7141, 0x7141, 0x247B,
+    0x7142, 0x7142, 0x2482, 0x7143, 0x7143, 0x2484, 0x7144, 0x7144, 0x248A,
+    0x7145, 0x7145, 0x4262, 0x7146, 0x7146, 0x0E72, 0x7147, 0x7147, 0x2476,
+    0x7149, 0x7149, 0x0E6A, 0x714A, 0x714A, 0x4264, 0x714B, 0x714B, 0x2485,
+    0x714C, 0x714C, 0x0E6F, 0x714D, 0x714D, 0x248B, 0x714E, 0x714E, 0x0E66,
+    0x714F, 0x714F, 0x4267, 0x7150, 0x7150, 0x2488, 0x7151, 0x7151, 0x4865,
+    0x7152, 0x7152, 0x2478, 0x7153, 0x7153, 0x2489, 0x7154, 0x7154, 0x2477,
+    0x7156, 0x7156, 0x0E74, 0x7158, 0x7158, 0x2483, 0x7159, 0x7159, 0x0E67,
+    0x715A, 0x715A, 0x248C, 0x715C, 0x715C, 0x0E6C, 0x715D, 0x715D, 0x247C,
+    0x715E, 0x715E, 0x0E71, 0x715F, 0x715F, 0x2487, 0x7160, 0x7160, 0x247A,
+    0x7161, 0x7161, 0x2481, 0x7162, 0x7162, 0x247D, 0x7163, 0x7163, 0x2479,
+    0x7164, 0x7164, 0x0E69, 0x7165, 0x7165, 0x0E70, 0x7166, 0x7166, 0x0E6E,
+    0x7167, 0x7167, 0x0E6B, 0x7168, 0x7168, 0x0E73, 0x7169, 0x7169, 0x0E68,
+    0x716A, 0x716A, 0x2480, 0x716B, 0x716B, 0x3CC5, 0x716C, 0x716C, 0x0E6D,
+    0x716E, 0x716E, 0x0CCE, 0x7170, 0x7170, 0x2486, 0x7171, 0x7171, 0x3DC0,
+    0x7172, 0x7172, 0x247E, 0x7173, 0x7173, 0x47E7, 0x7175, 0x7175, 0x3CED,
+    0x7176, 0x7176, 0x4000, 0x7177, 0x7177, 0x3957, 0x7178, 0x7178, 0x247F,
+    0x717A, 0x717A, 0x4924, 0x717B, 0x717B, 0x271E, 0x717C, 0x717C, 0x3835,
+    0x717D, 0x717D, 0x1023, 0x717E, 0x717E, 0x3970, 0x7180, 0x7180, 0x271A,
+    0x7181, 0x7181, 0x2720, 0x7182, 0x7182, 0x271C, 0x7184, 0x7184, 0x1025,
+    0x7185, 0x7185, 0x271B, 0x7186, 0x7186, 0x271F, 0x7187, 0x7187, 0x2717,
+    0x7188, 0x7188, 0x4706, 0x7189, 0x7189, 0x2719, 0x718A, 0x718A, 0x1024,
+    0x718C, 0x718C, 0x39EA, 0x718E, 0x718E, 0x3D3B, 0x718F, 0x718F, 0x271D,
+    0x7190, 0x7190, 0x2718, 0x7192, 0x7192, 0x1026, 0x7194, 0x7194, 0x1021,
+    0x7196, 0x7196, 0x425F, 0x7197, 0x7197, 0x2721, 0x7198, 0x7198, 0x481D,
+    0x7199, 0x7199, 0x1022, 0x719A, 0x719A, 0x295A, 0x719B, 0x719B, 0x2957,
+    0x719C, 0x719C, 0x2963, 0x719D, 0x719D, 0x295D, 0x719E, 0x719E, 0x295F,
+    0x719F, 0x719F, 0x119E, 0x71A0, 0x71A0, 0x2959, 0x71A1, 0x71A1, 0x2961,
+    0x71A2, 0x71A2, 0x48C1, 0x71A3, 0x71A3, 0x3EC8, 0x71A4, 0x71A4, 0x2960,
+    0x71A5, 0x71A5, 0x295E, 0x71A7, 0x71A7, 0x2964, 0x71A8, 0x71A8, 0x11A1,
+    0x71A9, 0x71A9, 0x295B, 0x71AA, 0x71AA, 0x2962, 0x71AC, 0x71AC, 0x119F,
+    0x71AD, 0x71AD, 0x3E1D, 0x71AF, 0x71AF, 0x2956, 0x71B0, 0x71B0, 0x2958,
+    0x71B1, 0x71B1, 0x11A0, 0x71B2, 0x71B2, 0x2955, 0x71B3, 0x71B3, 0x2965,
+    0x71B4, 0x71B4, 0x425E, 0x71B5, 0x71B5, 0x295C, 0x71B7, 0x71B7, 0x468B,
+    0x71B8, 0x71B8, 0x2BB3, 0x71B9, 0x71B9, 0x12F3, 0x71BA, 0x71BA, 0x426E,
+    0x71BC, 0x71BC, 0x2BBE, 0x71BD, 0x71BD, 0x2BBC, 0x71BE, 0x71BE, 0x12ED,
+    0x71BF, 0x71BF, 0x2BB2, 0x71C0, 0x71C1, 0x2BB5, 0x71C2, 0x71C2, 0x2BB1,
+    0x71C3, 0x71C4, 0x12F7, 0x71C5, 0x71C5, 0x2BB0, 0x71C6, 0x71C6, 0x2BBF,
+    0x71C7, 0x71C7, 0x2BBA, 0x71C8, 0x71C8, 0x12F1, 0x71C9, 0x71C9, 0x12EE,
+    0x71CA, 0x71CA, 0x2BB9, 0x71CB, 0x71CB, 0x2BB7, 0x71CE, 0x71CE, 0x12F4,
+    0x71CF, 0x71CF, 0x2BBB, 0x71D0, 0x71D0, 0x12EF, 0x71D1, 0x71D1, 0x373D,
+    0x71D2, 0x71D2, 0x12F0, 0x71D4, 0x71D4, 0x2BB8, 0x71D5, 0x71D5, 0x12F2,
+    0x71D6, 0x71D6, 0x2BB4, 0x71D8, 0x71D8, 0x2BBD, 0x71D9, 0x71D9, 0x12F5,
+    0x71DA, 0x71DB, 0x2BC0, 0x71DC, 0x71DC, 0x12F6, 0x71DD, 0x71DD, 0x4078,
+    0x71DF, 0x71DF, 0x1404, 0x71E0, 0x71E0, 0x140B, 0x71E1, 0x71E1, 0x2D9B,
+    0x71E2, 0x71E2, 0x2DA1, 0x71E4, 0x71E4, 0x2D9F, 0x71E5, 0x71E5, 0x1407,
+    0x71E6, 0x71E6, 0x1406, 0x71E7, 0x71E7, 0x1403, 0x71E8, 0x71E8, 0x2D9D,
+    0x71EB, 0x71EB, 0x3C81, 0x71EC, 0x71EC, 0x1409, 0x71ED, 0x71ED, 0x1408,
+    0x71EE, 0x71EE, 0x1405, 0x71F0, 0x71F0, 0x2DA0, 0x71F1, 0x71F1, 0x2D9C,
+    0x71F2, 0x71F2, 0x2D9E, 0x71F4, 0x71F4, 0x140A, 0x71F5, 0x71F5, 0x46EE,
+    0x71F6, 0x71F6, 0x3E9A, 0x71F8, 0x71F8, 0x14F1, 0x71F9, 0x71F9, 0x2F52,
+    0x71FB, 0x71FC, 0x14EE, 0x71FD, 0x71FD, 0x2F54, 0x71FE, 0x71FE, 0x14F0,
+    0x71FF, 0x71FF, 0x2F51, 0x7201, 0x7201, 0x2F50, 0x7202, 0x7202, 0x30B9,
+    0x7203, 0x7203, 0x2F53, 0x7205, 0x7205, 0x30BA, 0x7206, 0x7206, 0x1591,
+    0x7207, 0x7207, 0x30B8, 0x7209, 0x7209, 0x3DBB, 0x720A, 0x720A, 0x30B7,
+    0x720C, 0x720C, 0x30B6, 0x720D, 0x720D, 0x1592, 0x720E, 0x720E, 0x4271,
+    0x720F, 0x720F, 0x39FC, 0x7210, 0x7210, 0x161F, 0x7213, 0x7214, 0x31F4,
+    0x7215, 0x7215, 0x4273, 0x7216, 0x7216, 0x3953, 0x7217, 0x7217, 0x3969,
+    0x7219, 0x7219, 0x32E1, 0x721A, 0x721A, 0x32E0, 0x721B, 0x721B, 0x167B,
+    0x721D, 0x721D, 0x32DF, 0x721E, 0x721F, 0x338D, 0x7222, 0x7222, 0x3424,
+    0x7223, 0x7223, 0x348C, 0x7224, 0x7224, 0x4276, 0x7226, 0x7226, 0x34D1,
+    0x7227, 0x7227, 0x3535, 0x7228, 0x7228, 0x1766, 0x7229, 0x7229, 0x3549,
+    0x722A, 0x722A, 0x02E7, 0x722B, 0x722B, 0x44F2, 0x722C, 0x722D, 0x0645,
+    0x722E, 0x722E, 0x4279, 0x7230, 0x7230, 0x0791, 0x7235, 0x7235, 0x140C,
+    0x7236, 0x7236, 0x02E8, 0x7238, 0x7238, 0x0647, 0x7239, 0x7239, 0x0923,
+    0x723A, 0x723A, 0x0E75, 0x723B, 0x723B, 0x02E9, 0x723D, 0x723D, 0x0B17,
+    0x723E, 0x723E, 0x1027, 0x723F, 0x723F, 0x178D, 0x7240, 0x7240, 0x427A,
+    0x7241, 0x7241, 0x1B6E, 0x7242, 0x7242, 0x1D2D, 0x7244, 0x7244, 0x2722,
+    0x7246, 0x7246, 0x140D, 0x7247, 0x7247, 0x02EA, 0x7248, 0x7248, 0x0648,
+    0x7249, 0x724A, 0x1B6F, 0x724B, 0x724B, 0x21FD, 0x724C, 0x724C, 0x0CD0,
+    0x724F, 0x724F, 0x248D, 0x7250, 0x7250, 0x3AC9, 0x7252, 0x7252, 0x0E76,
+    0x7253, 0x7253, 0x2723, 0x7255, 0x7255, 0x427D, 0x7256, 0x7256, 0x11A2,
+    0x7257, 0x7257, 0x427E, 0x7258, 0x7258, 0x1593, 0x7259, 0x7259, 0x02EB,
+    0x725A, 0x725A, 0x21FE, 0x725B, 0x725B, 0x02EC, 0x725C, 0x725C, 0x465A,
+    0x725D, 0x725D, 0x03F4, 0x725E, 0x725E, 0x180B, 0x725F, 0x725F, 0x03F3,
+    0x7260, 0x7260, 0x04EC, 0x7261, 0x7261, 0x04EB, 0x7262, 0x7262, 0x04EA,
+    0x7263, 0x7263, 0x18C5, 0x7266, 0x7266, 0x3EBB, 0x7267, 0x7267, 0x0649,
+    0x7269, 0x7269, 0x064A, 0x726A, 0x726A, 0x19FA, 0x726C, 0x726C, 0x1B71,
+    0x726E, 0x726E, 0x1B74, 0x726F, 0x726F, 0x0793, 0x7270, 0x7270, 0x1B72,
+    0x7272, 0x7272, 0x0792, 0x7273, 0x7273, 0x1B73, 0x7274, 0x7274, 0x0794,
+    0x7276, 0x7276, 0x1D30, 0x7277, 0x7277, 0x1D2F, 0x7278, 0x7278, 0x1D2E,
+    0x7279, 0x7279, 0x0924, 0x727B, 0x727C, 0x1F81, 0x727D, 0x727D, 0x0B18,
+    0x727E, 0x727E, 0x1F80, 0x727F, 0x727F, 0x1F83, 0x7280, 0x7280, 0x0CD2,
+    0x7281, 0x7281, 0x0B19, 0x7282, 0x7282, 0x4283, 0x7284, 0x7284, 0x0CD1,
+    0x7285, 0x7285, 0x2202, 0x7286, 0x7286, 0x2201, 0x7287, 0x7287, 0x3ACA,
+    0x7288, 0x7289, 0x21FF, 0x728B, 0x728B, 0x2203, 0x728C, 0x728C, 0x248F,
+    0x728D, 0x728D, 0x248E, 0x728E, 0x728E, 0x2492, 0x728F, 0x728F, 0x43C9,
+    0x7290, 0x7290, 0x2491, 0x7291, 0x7291, 0x2490, 0x7292, 0x7292, 0x1028,
+    0x7293, 0x7293, 0x2726, 0x7294, 0x7294, 0x3ACB, 0x7295, 0x7295, 0x2725,
+    0x7296, 0x7296, 0x1029, 0x7297, 0x7297, 0x2724, 0x7298, 0x7298, 0x2966,
+    0x729A, 0x729A, 0x2967, 0x729B, 0x729B, 0x11A3, 0x729D, 0x729E, 0x2BC2,
+    0x729F, 0x729F, 0x473A, 0x72A1, 0x72A1, 0x30BF, 0x72A2, 0x72A2, 0x1594,
+    0x72A3, 0x72A3, 0x30BE, 0x72A4, 0x72A4, 0x30BD, 0x72A5, 0x72A6, 0x30BB,
+    0x72A7, 0x72A7, 0x167C, 0x72A8, 0x72A8, 0x31F6, 0x72A9, 0x72A9, 0x338F,
+    0x72AA, 0x72AA, 0x34D2, 0x72AC, 0x72AC, 0x02ED, 0x72AD, 0x72AD, 0x44F4,
+    0x72AE, 0x72AE, 0x17AF, 0x72AF, 0x72AF, 0x0355, 0x72B0, 0x72B0, 0x17B0,
+    0x72B2, 0x72B2, 0x3FB6, 0x72B4, 0x72B5, 0x180C, 0x72BA, 0x72BA, 0x18CB,
+    0x72BD, 0x72BD, 0x18C7, 0x72BF, 0x72BF, 0x18C6, 0x72C0, 0x72C0, 0x064B,
+    0x72C1, 0x72C1, 0x18CA, 0x72C2, 0x72C2, 0x04EE, 0x72C3, 0x72C3, 0x18C8,
+    0x72C4, 0x72C4, 0x04ED, 0x72C5, 0x72C5, 0x18CC, 0x72C6, 0x72C6, 0x18C9,
+    0x72C9, 0x72C9, 0x19FE, 0x72CA, 0x72CA, 0x1B75, 0x72CB, 0x72CB, 0x19FC,
+    0x72CC, 0x72CC, 0x1A03, 0x72CD, 0x72CD, 0x43CA, 0x72CE, 0x72CE, 0x064C,
+    0x72D0, 0x72D0, 0x064F, 0x72D1, 0x72D1, 0x1A04, 0x72D2, 0x72D2, 0x1A00,
+    0x72D4, 0x72D4, 0x1A01, 0x72D6, 0x72D6, 0x19FB, 0x72D7, 0x72D7, 0x064E,
+    0x72D8, 0x72D8, 0x19FD, 0x72D9, 0x72D9, 0x064D, 0x72DA, 0x72DA, 0x1A02,
+    0x72DC, 0x72DC, 0x19FF, 0x72DF, 0x72DF, 0x1B79, 0x72E0, 0x72E1, 0x0796,
+    0x72E2, 0x72E2, 0x3F97, 0x72E3, 0x72E3, 0x1B7C, 0x72E4, 0x72E4, 0x1B76,
+    0x72E6, 0x72E6, 0x1B7B, 0x72E8, 0x72E8, 0x1B77, 0x72E9, 0x72E9, 0x0795,
+    0x72EA, 0x72EA, 0x1B7A, 0x72EB, 0x72EB, 0x1B78, 0x72F3, 0x72F3, 0x1D36,
+    0x72F4, 0x72F4, 0x1D33, 0x72F6, 0x72F6, 0x1D35, 0x72F7, 0x72F7, 0x0929,
+    0x72F8, 0x72F8, 0x0928, 0x72F9, 0x72F9, 0x0926, 0x72FA, 0x72FA, 0x1D32,
+    0x72FB, 0x72FB, 0x1D37, 0x72FC, 0x72FC, 0x0925, 0x72FD, 0x72FD, 0x0927,
+    0x72FE, 0x72FE, 0x1D34, 0x72FF, 0x72FF, 0x1F8B, 0x7300, 0x7300, 0x1D31,
+    0x7301, 0x7301, 0x1D38, 0x7302, 0x7302, 0x3F9A, 0x7304, 0x7304, 0x3EB5,
+    0x7307, 0x7307, 0x1F86, 0x7308, 0x7308, 0x1F8A, 0x730A, 0x730A, 0x1F89,
+    0x730B, 0x730B, 0x2205, 0x730C, 0x730C, 0x2210, 0x730F, 0x730F, 0x1F8C,
+    0x7310, 0x7310, 0x46EA, 0x7311, 0x7311, 0x1F87, 0x7312, 0x7312, 0x2204,
+    0x7313, 0x7313, 0x0B1D, 0x7316, 0x7316, 0x0B1C, 0x7317, 0x7317, 0x1F85,
+    0x7318, 0x7318, 0x1F88, 0x7319, 0x7319, 0x0B1E, 0x731B, 0x731B, 0x0B1B,
+    0x731C, 0x731C, 0x0B1A, 0x731D, 0x731D, 0x1F84, 0x731E, 0x731E, 0x1F8D,
+    0x7322, 0x7322, 0x2207, 0x7323, 0x7323, 0x220E, 0x7325, 0x7325, 0x0CD4,
+    0x7326, 0x7326, 0x220D, 0x7327, 0x7327, 0x220A, 0x7328, 0x7328, 0x428A,
+    0x7329, 0x7329, 0x0CD6, 0x732A, 0x732A, 0x3D70, 0x732B, 0x732B, 0x4285,
+    0x732C, 0x732C, 0x3FB2, 0x732D, 0x732D, 0x220C, 0x732E, 0x732E, 0x428B,
+    0x7330, 0x7330, 0x2206, 0x7331, 0x7331, 0x2208, 0x7332, 0x7332, 0x220B,
+    0x7333, 0x7333, 0x2209, 0x7334, 0x7334, 0x0CD5, 0x7335, 0x7335, 0x220F,
+    0x7336, 0x7336, 0x0CD3, 0x7337, 0x7337, 0x0E77, 0x7338, 0x7338, 0x46EB,
+    0x7339, 0x7339, 0x43CC, 0x733A, 0x733A, 0x2496, 0x733B, 0x733B, 0x2495,
+    0x733C, 0x733C, 0x2493, 0x733E, 0x733E, 0x0E7A, 0x733F, 0x733F, 0x0E79,
+    0x7340, 0x7340, 0x2497, 0x7341, 0x7341, 0x46EC, 0x7342, 0x7342, 0x2494,
+    0x7343, 0x7343, 0x2727, 0x7344, 0x7344, 0x102A, 0x7345, 0x7345, 0x0E78,
+    0x7348, 0x7348, 0x43FA, 0x7349, 0x7349, 0x2499, 0x734A, 0x734A, 0x2498,
+    0x734C, 0x734C, 0x272A, 0x734D, 0x734D, 0x2728, 0x734E, 0x734E, 0x11A4,
+    0x734F, 0x734F, 0x3F51, 0x7350, 0x7350, 0x102B, 0x7351, 0x7351, 0x2729,
+    0x7352, 0x7352, 0x2969, 0x7357, 0x7357, 0x11A5, 0x7358, 0x7358, 0x2968,
+    0x7359, 0x7359, 0x2971, 0x735A, 0x735A, 0x2970, 0x735B, 0x735B, 0x296E,
+    0x735D, 0x735D, 0x296D, 0x735E, 0x7360, 0x296A, 0x7361, 0x7361, 0x296F,
+    0x7362, 0x7362, 0x2972, 0x7365, 0x7365, 0x2BC8, 0x7366, 0x7367, 0x2BC5,
+    0x7368, 0x7368, 0x12F9, 0x7369, 0x7369, 0x2BC4, 0x736A, 0x736A, 0x2BCA,
+    0x736B, 0x736B, 0x2BC9, 0x736C, 0x736C, 0x2BC7, 0x736E, 0x736F, 0x2DA3,
+    0x7370, 0x7370, 0x140E, 0x7371, 0x7371, 0x3F98, 0x7372, 0x7372, 0x140F,
+    0x7373, 0x7373, 0x2DA2, 0x7374, 0x7374, 0x3ED4, 0x7375, 0x7375, 0x14F3,
+    0x7376, 0x7376, 0x2F55, 0x7377, 0x7377, 0x14F2, 0x7378, 0x7378, 0x1595,
+    0x737A, 0x737A, 0x1596, 0x737B, 0x737B, 0x1620, 0x737C, 0x737C, 0x31F8,
+    0x737D, 0x737D, 0x31F7, 0x737E, 0x737E, 0x32E2, 0x737F, 0x737F, 0x3390,
+    0x7380, 0x7380, 0x16CA, 0x7381, 0x7381, 0x3426, 0x7382, 0x7382, 0x3425,
+    0x7383, 0x7383, 0x3427, 0x7384, 0x7384, 0x0356, 0x7385, 0x7385, 0x1B7D,
+    0x7386, 0x7386, 0x092A, 0x7387, 0x7387, 0x0B1F, 0x7388, 0x7388, 0x1F8E,
+    0x7389, 0x7389, 0x0357, 0x738A, 0x738A, 0x17B1, 0x738B, 0x738B, 0x02EE,
+    0x738E, 0x738E, 0x180E, 0x738F, 0x738F, 0x46E5, 0x7392, 0x7392, 0x18D1,
+    0x7393, 0x7394, 0x18CF, 0x7395, 0x7395, 0x18CD, 0x7396, 0x7396, 0x04EF,
+    0x7397, 0x7397, 0x18CE, 0x7398, 0x7398, 0x39F6, 0x739C, 0x739C, 0x408A,
+    0x739D, 0x739D, 0x1A0C, 0x739E, 0x739E, 0x395B, 0x739F, 0x739F, 0x0652,
+    0x73A0, 0x73A0, 0x1A0A, 0x73A1, 0x73A1, 0x1A06, 0x73A2, 0x73A2, 0x1A09,
+    0x73A4, 0x73A4, 0x1A05, 0x73A5, 0x73A5, 0x0654, 0x73A6, 0x73A6, 0x1A08,
+    0x73A7, 0x73A7, 0x4087, 0x73A8, 0x73A8, 0x0651, 0x73A9, 0x73A9, 0x0650,
+    0x73AA, 0x73AA, 0x428D, 0x73AB, 0x73AB, 0x0653, 0x73AC, 0x73AC, 0x1A0B,
+    0x73AD, 0x73AD, 0x1A07, 0x73B2, 0x73B2, 0x079B, 0x73B3, 0x73B3, 0x079E,
+    0x73B4, 0x73B4, 0x1B85, 0x73B5, 0x73B5, 0x1B84, 0x73B6, 0x73B6, 0x1B83,
+    0x73B7, 0x73B7, 0x0798, 0x73B8, 0x73B8, 0x1B8C, 0x73B9, 0x73B9, 0x1B82,
+    0x73BB, 0x73BB, 0x079A, 0x73BC, 0x73BC, 0x1D3D, 0x73BE, 0x73BE, 0x1B89,
+    0x73BF, 0x73BF, 0x1B87, 0x73C0, 0x73C0, 0x079D, 0x73C2, 0x73C2, 0x1B7F,
+    0x73C3, 0x73C3, 0x1B8A, 0x73C5, 0x73C5, 0x1B81, 0x73C6, 0x73C6, 0x1B8B,
+    0x73C7, 0x73C7, 0x1B88, 0x73C8, 0x73C8, 0x1B80, 0x73C9, 0x73C9, 0x4290,
+    0x73CA, 0x73CA, 0x0799, 0x73CB, 0x73CB, 0x1B8D, 0x73CC, 0x73CC, 0x1B7E,
+    0x73CD, 0x73CD, 0x079C, 0x73CE, 0x73CE, 0x411B, 0x73CF, 0x73CF, 0x428C,
+    0x73D0, 0x73D0, 0x3B17, 0x73D2, 0x73D2, 0x1D42, 0x73D3, 0x73D3, 0x1D39,
+    0x73D4, 0x73D4, 0x1D44, 0x73D5, 0x73D5, 0x4073, 0x73D6, 0x73D6, 0x1D3C,
+    0x73D7, 0x73D8, 0x1D47, 0x73D9, 0x73D9, 0x1D3A, 0x73DA, 0x73DA, 0x1D46,
+    0x73DB, 0x73DB, 0x1D43, 0x73DC, 0x73DC, 0x1D41, 0x73DD, 0x73DD, 0x1D45,
+    0x73DE, 0x73DE, 0x0930, 0x73E0, 0x73E0, 0x092E, 0x73E1, 0x73E1, 0x46F0,
+    0x73E2, 0x73E2, 0x3CA3, 0x73E3, 0x73E3, 0x1D3F, 0x73E4, 0x73E4, 0x42A5,
+    0x73E5, 0x73E5, 0x1D3B, 0x73E6, 0x73E6, 0x3CBA, 0x73E7, 0x73E7, 0x1D3E,
+    0x73E8, 0x73E8, 0x1D49, 0x73E9, 0x73E9, 0x1D40, 0x73EA, 0x73EA, 0x092F,
+    0x73EB, 0x73EB, 0x1B86, 0x73ED, 0x73ED, 0x092B, 0x73EE, 0x73EE, 0x092D,
+    0x73EF, 0x73EF, 0x4011, 0x73F3, 0x73F3, 0x3CAB, 0x73F4, 0x73F4, 0x1F9C,
+    0x73F5, 0x73F5, 0x1F91, 0x73F6, 0x73F6, 0x1F8F, 0x73F7, 0x73F7, 0x429A,
+    0x73F8, 0x73F8, 0x1F90, 0x73F9, 0x73F9, 0x3BF9, 0x73FA, 0x73FA, 0x1F97,
+    0x73FB, 0x73FB, 0x3CAC, 0x73FC, 0x73FC, 0x1F98, 0x73FD, 0x73FD, 0x1F94,
+    0x73FE, 0x73FE, 0x0B24, 0x73FF, 0x73FF, 0x1F99, 0x7400, 0x7400, 0x1F96,
+    0x7401, 0x7401, 0x1F93, 0x7403, 0x7403, 0x0B22, 0x7404, 0x7404, 0x1F92,
+    0x7405, 0x7405, 0x0B20, 0x7406, 0x7406, 0x0B23, 0x7407, 0x7407, 0x1F95,
+    0x7408, 0x7408, 0x1F9D, 0x7409, 0x7409, 0x092C, 0x740A, 0x740A, 0x0B21,
+    0x740B, 0x740B, 0x1F9B, 0x740C, 0x740C, 0x1F9A, 0x740D, 0x740D, 0x0B25,
+    0x7411, 0x7411, 0x456C, 0x7412, 0x7412, 0x3BE6, 0x7414, 0x7414, 0x39F4,
+    0x7415, 0x7415, 0x429B, 0x7416, 0x7416, 0x2215, 0x7417, 0x7417, 0x40AD,
+    0x7419, 0x7419, 0x46F3, 0x741A, 0x741A, 0x2216, 0x741B, 0x741B, 0x0CE0,
+    0x741C, 0x741C, 0x38DD, 0x741D, 0x741D, 0x221C, 0x741E, 0x741F, 0x46F4,
+    0x7420, 0x7420, 0x221E, 0x7421, 0x7421, 0x2217, 0x7422, 0x7422, 0x0CDA,
+    0x7423, 0x7423, 0x221B, 0x7424, 0x7424, 0x221A, 0x7425, 0x7425, 0x0CDB,
+    0x7426, 0x7426, 0x0CE1, 0x7428, 0x7428, 0x0CE2, 0x7429, 0x7429, 0x221D,
+    0x742A, 0x742A, 0x0CD8, 0x742B, 0x742B, 0x2214, 0x742C, 0x742C, 0x2212,
+    0x742D, 0x742D, 0x2218, 0x742E, 0x742E, 0x2211, 0x742F, 0x742F, 0x0CDF,
+    0x7430, 0x7430, 0x2213, 0x7431, 0x7431, 0x2219, 0x7432, 0x7432, 0x221F,
+    0x7433, 0x7433, 0x0CD9, 0x7434, 0x7434, 0x0CDE, 0x7435, 0x7436, 0x0CDC,
+    0x7437, 0x7437, 0x3AE1, 0x7438, 0x7438, 0x3B09, 0x7439, 0x7439, 0x429E,
+    0x743A, 0x743A, 0x0CD7, 0x743C, 0x743C, 0x3ADF, 0x743F, 0x743F, 0x0E81,
+    0x7440, 0x7440, 0x24A0, 0x7441, 0x7441, 0x0E80, 0x7442, 0x7442, 0x24A4,
+    0x7443, 0x7443, 0x3A1A, 0x7444, 0x7444, 0x249A, 0x7445, 0x7445, 0x3BD7,
+    0x7446, 0x7446, 0x24A5, 0x7447, 0x7447, 0x42A4, 0x7448, 0x7448, 0x3CB5,
+    0x7449, 0x7449, 0x4291, 0x744A, 0x744B, 0x249B, 0x744D, 0x744D, 0x24A6,
+    0x744E, 0x744E, 0x24A3, 0x744F, 0x7450, 0x24A1, 0x7451, 0x7451, 0x249E,
+    0x7452, 0x7452, 0x249D, 0x7453, 0x7453, 0x4231, 0x7454, 0x7454, 0x24A7,
+    0x7455, 0x7455, 0x0E7D, 0x7456, 0x7456, 0x39F5, 0x7457, 0x7457, 0x249F,
+    0x7459, 0x7459, 0x0E82, 0x745A, 0x745A, 0x0E7C, 0x745B, 0x745C, 0x0E83,
+    0x745D, 0x745D, 0x42C6, 0x745E, 0x745E, 0x0E7F, 0x745F, 0x745F, 0x0E7E,
+    0x7460, 0x7460, 0x42A2, 0x7462, 0x7462, 0x272B, 0x7463, 0x7463, 0x102D,
+    0x7464, 0x7464, 0x102C, 0x7465, 0x7465, 0x4101, 0x7467, 0x7467, 0x2730,
+    0x7468, 0x7468, 0x3AEE, 0x7469, 0x7469, 0x11A6, 0x746A, 0x746A, 0x102E,
+    0x746B, 0x746B, 0x3BE7, 0x746C, 0x746C, 0x42A8, 0x746D, 0x746D, 0x1030,
+    0x746E, 0x746E, 0x2731, 0x746F, 0x746F, 0x0E7B, 0x7470, 0x7470, 0x102F,
+    0x7471, 0x7471, 0x272D, 0x7472, 0x7472, 0x272F, 0x7473, 0x7473, 0x272C,
+    0x7474, 0x7474, 0x42A9, 0x7475, 0x7475, 0x272E, 0x7476, 0x7476, 0x42A6,
+    0x7479, 0x7479, 0x297C, 0x747A, 0x747A, 0x3AD1, 0x747C, 0x747C, 0x297B,
+    0x747D, 0x747D, 0x2978, 0x747E, 0x747E, 0x11A9, 0x747F, 0x747F, 0x2BCB,
+    0x7480, 0x7480, 0x11AA, 0x7481, 0x7481, 0x2977, 0x7482, 0x7482, 0x42AC,
+    0x7483, 0x7483, 0x11A8, 0x7485, 0x7485, 0x2979, 0x7486, 0x7486, 0x2976,
+    0x7487, 0x7487, 0x2973, 0x7488, 0x7488, 0x297A, 0x7489, 0x748A, 0x2974,
+    0x748B, 0x748B, 0x11A7, 0x748C, 0x748C, 0x3A21, 0x748D, 0x748D, 0x469D,
+    0x7490, 0x7490, 0x2DA8, 0x7492, 0x7492, 0x2BCF, 0x7494, 0x7494, 0x2BCE,
+    0x7495, 0x7495, 0x2BD0, 0x7497, 0x7497, 0x2DA5, 0x7498, 0x7498, 0x12FC,
+    0x7499, 0x7499, 0x39F3, 0x749A, 0x749A, 0x2BCC, 0x749B, 0x749B, 0x3B0A,
+    0x749C, 0x749C, 0x12FA, 0x749E, 0x749E, 0x12FE, 0x749F, 0x749F, 0x12FD,
+    0x74A0, 0x74A0, 0x2BCD, 0x74A1, 0x74A1, 0x2BD1, 0x74A3, 0x74A3, 0x12FB,
+    0x74A4, 0x74A4, 0x4170, 0x74A5, 0x74A5, 0x2DAC, 0x74A6, 0x74A6, 0x1412,
+    0x74A7, 0x74A7, 0x14F4, 0x74A8, 0x74A8, 0x1413, 0x74A9, 0x74A9, 0x1410,
+    0x74AA, 0x74AA, 0x2DA9, 0x74AB, 0x74AB, 0x2DA7, 0x74AD, 0x74AD, 0x2DAA,
+    0x74AF, 0x74AF, 0x2DAD, 0x74B0, 0x74B0, 0x1411, 0x74B1, 0x74B1, 0x2DAB,
+    0x74B2, 0x74B2, 0x2DA6, 0x74B4, 0x74B4, 0x3CA5, 0x74B5, 0x74B5, 0x2F58,
+    0x74B6, 0x74B6, 0x2F5B, 0x74B7, 0x74B7, 0x30C2, 0x74B8, 0x74B8, 0x2F56,
+    0x74BA, 0x74BA, 0x31F9, 0x74BB, 0x74BB, 0x2F5C, 0x74BD, 0x74BD, 0x1597,
+    0x74BE, 0x74BE, 0x2F5A, 0x74BF, 0x74BF, 0x14F5, 0x74C0, 0x74C0, 0x2F57,
+    0x74C1, 0x74C1, 0x2F59, 0x74C2, 0x74C2, 0x2F5D, 0x74C3, 0x74C3, 0x30C3,
+    0x74C5, 0x74C5, 0x30C1, 0x74C8, 0x74C8, 0x42B5, 0x74CA, 0x74CA, 0x1598,
+    0x74CB, 0x74CB, 0x30C0, 0x74CC, 0x74CC, 0x3ADE, 0x74CF, 0x74CF, 0x1621,
+    0x74D0, 0x74D0, 0x3A9B, 0x74D3, 0x74D3, 0x46FA, 0x74D4, 0x74D4, 0x167E,
+    0x74D5, 0x74D5, 0x3392, 0x74D6, 0x74D6, 0x167D, 0x74D7, 0x74D7, 0x3394,
+    0x74D8, 0x74D8, 0x3391, 0x74D9, 0x74D9, 0x3393, 0x74DA, 0x74DA, 0x16FE,
+    0x74DB, 0x74DB, 0x348D, 0x74DC, 0x74DC, 0x0358, 0x74DD, 0x74DD, 0x1A0D,
+    0x74DE, 0x74DF, 0x1D4A, 0x74E0, 0x74E0, 0x0B26, 0x74E1, 0x74E1, 0x24A8,
+    0x74E2, 0x74E2, 0x12FF, 0x74E3, 0x74E3, 0x1599, 0x74E4, 0x74E4, 0x16CB,
+    0x74E5, 0x74E5, 0x348E, 0x74E6, 0x74E6, 0x0359, 0x74E7, 0x74E7, 0x3FFE,
+    0x74E8, 0x74E8, 0x1A0E, 0x74E9, 0x74E9, 0x0120, 0x74EC, 0x74EC, 0x1B8E,
+    0x74EE, 0x74EE, 0x1B8F, 0x74F0, 0x74F0, 0x3FE6, 0x74F1, 0x74F1, 0x3F9B,
+    0x74F2, 0x74F2, 0x3FDF, 0x74F4, 0x74F5, 0x1D4C, 0x74F6, 0x74F7, 0x0B27,
+    0x74F8, 0x74F8, 0x3FF4, 0x74FB, 0x74FB, 0x2220, 0x74FD, 0x74FD, 0x24AB,
+    0x74FE, 0x74FE, 0x24AA, 0x74FF, 0x74FF, 0x24A9, 0x7500, 0x7500, 0x2732,
+    0x7502, 0x7503, 0x2733, 0x7504, 0x7504, 0x1031, 0x7505, 0x7505, 0x3FDE,
+    0x7507, 0x7507, 0x297E, 0x7508, 0x7508, 0x297D, 0x750B, 0x750B, 0x2BD2,
+    0x750C, 0x750D, 0x1300, 0x750E, 0x750E, 0x42B7, 0x750F, 0x750F, 0x2DB1,
+    0x7510, 0x7512, 0x2DAE, 0x7513, 0x7513, 0x2F5F, 0x7514, 0x7514, 0x2F5E,
+    0x7515, 0x7515, 0x14F6, 0x7516, 0x7516, 0x30C4, 0x7517, 0x7517, 0x32E3,
+    0x7518, 0x7518, 0x035A, 0x7519, 0x7519, 0x4583, 0x751A, 0x751A, 0x079F,
+    0x751C, 0x751C, 0x0B29, 0x751D, 0x751D, 0x24AC, 0x751E, 0x751E, 0x42B8,
+    0x751F, 0x751F, 0x035B, 0x7521, 0x7521, 0x1D4E, 0x7522, 0x7522, 0x0B2A,
+    0x7525, 0x7526, 0x0CE3, 0x7528, 0x7529, 0x035C, 0x752A, 0x752A, 0x180F,
+    0x752B, 0x752B, 0x04F1, 0x752C, 0x752C, 0x04F0, 0x752D, 0x752D, 0x07A0,
+    0x752E, 0x752E, 0x1B90, 0x752F, 0x752F, 0x2221, 0x7530, 0x7533, 0x035E,
+    0x7534, 0x7534, 0x3E87, 0x7535, 0x7535, 0x455A, 0x7537, 0x7538, 0x04F2,
+    0x7539, 0x7539, 0x18D3, 0x753A, 0x753A, 0x18D2, 0x753B, 0x753B, 0x3DFB,
+    0x753D, 0x753D, 0x0655, 0x753E, 0x753E, 0x1A11, 0x753F, 0x7540, 0x1A0F,
+    0x7542, 0x7542, 0x43CD, 0x7546, 0x7546, 0x3F40, 0x7547, 0x7548, 0x1B91,
+    0x754A, 0x754A, 0x42BF, 0x754B, 0x754B, 0x07A4, 0x754C, 0x754C, 0x07A2,
+    0x754D, 0x754D, 0x42BE, 0x754E, 0x754E, 0x07A3, 0x754F, 0x754F, 0x07A1,
+    0x7551, 0x7551, 0x3CFE, 0x7553, 0x7553, 0x3FEB, 0x7554, 0x7554, 0x0931,
+    0x7555, 0x7555, 0x3AEA, 0x7559, 0x7559, 0x0935, 0x755A, 0x755A, 0x0934,
+    0x755B, 0x755B, 0x1D4F, 0x755C, 0x755C, 0x0933, 0x755D, 0x755D, 0x0932,
+    0x755F, 0x755F, 0x1D50, 0x7560, 0x7560, 0x3D71, 0x7562, 0x7562, 0x0B2D,
+    0x7563, 0x7563, 0x1F9F, 0x7564, 0x7564, 0x1F9E, 0x7565, 0x7566, 0x0B2B,
+    0x7567, 0x7567, 0x42C0, 0x756A, 0x756A, 0x0CE6, 0x756B, 0x756B, 0x0CE5,
+    0x756C, 0x756C, 0x2223, 0x756D, 0x756D, 0x46FD, 0x756E, 0x756E, 0x42C1,
+    0x756F, 0x756F, 0x2222, 0x7570, 0x7570, 0x0B2E, 0x7572, 0x7572, 0x46FE,
+    0x7576, 0x7576, 0x0E85, 0x7577, 0x7577, 0x24AE, 0x7578, 0x7578, 0x0E86,
+    0x7579, 0x7579, 0x24AD, 0x757A, 0x757A, 0x3F4F, 0x757D, 0x757D, 0x2735,
+    0x757E, 0x757E, 0x297F, 0x757F, 0x757F, 0x11AB, 0x7580, 0x7580, 0x2BD3,
+    0x7583, 0x7583, 0x3AE5, 0x7584, 0x7584, 0x2DB2, 0x7586, 0x7586, 0x159B,
+    0x7587, 0x7587, 0x159A, 0x758A, 0x758A, 0x16CC, 0x758B, 0x758B, 0x0362,
+    0x758C, 0x758C, 0x1A12, 0x758D, 0x758D, 0x46FF, 0x758E, 0x758E, 0x42C5,
+    0x758F, 0x758F, 0x0B2F, 0x7590, 0x7590, 0x2736, 0x7591, 0x7591, 0x1032,
+    0x7592, 0x7592, 0x022E, 0x7594, 0x7595, 0x18D4, 0x7598, 0x7598, 0x1A13,
+    0x7599, 0x759A, 0x0657, 0x759D, 0x759D, 0x0656, 0x759E, 0x759E, 0x42C7,
+    0x75A2, 0x75A3, 0x07A8, 0x75A4, 0x75A5, 0x07A6, 0x75A7, 0x75A7, 0x1B93,
+    0x75AA, 0x75AA, 0x1B94, 0x75AB, 0x75AB, 0x07A5, 0x75B0, 0x75B0, 0x1D51,
+    0x75B1, 0x75B1, 0x3EAD, 0x75B2, 0x75B3, 0x0939, 0x75B4, 0x75B4, 0x42C8,
+    0x75B5, 0x75B5, 0x0B32, 0x75B6, 0x75B6, 0x1D57, 0x75B8, 0x75B8, 0x093F,
+    0x75B9, 0x75B9, 0x093D, 0x75BA, 0x75BA, 0x1D58, 0x75BB, 0x75BB, 0x1D53,
+    0x75BC, 0x75BC, 0x093C, 0x75BD, 0x75BD, 0x093B, 0x75BE, 0x75BE, 0x0936,
+    0x75BF, 0x75BF, 0x1D56, 0x75C0, 0x75C0, 0x1D55, 0x75C1, 0x75C1, 0x1D52,
+    0x75C2, 0x75C2, 0x093E, 0x75C3, 0x75C3, 0x3F93, 0x75C4, 0x75C4, 0x1D54,
+    0x75C5, 0x75C5, 0x0937, 0x75C7, 0x75C7, 0x0938, 0x75C8, 0x75C8, 0x4701,
+    0x75CA, 0x75CA, 0x0B33, 0x75CB, 0x75CC, 0x1FA3, 0x75CD, 0x75CD, 0x0B34,
+    0x75CE, 0x75CE, 0x1FA0, 0x75CF, 0x75CF, 0x1FA2, 0x75D0, 0x75D0, 0x1FA6,
+    0x75D1, 0x75D1, 0x1FA5, 0x75D2, 0x75D2, 0x1FA1, 0x75D4, 0x75D5, 0x0B30,
+    0x75D7, 0x75D7, 0x222B, 0x75D8, 0x75D8, 0x0CEB, 0x75D9, 0x75D9, 0x0CEA,
+    0x75DA, 0x75DA, 0x2225, 0x75DB, 0x75DB, 0x0CE8, 0x75DC, 0x75DC, 0x43CE,
+    0x75DD, 0x75DD, 0x2228, 0x75DE, 0x75DE, 0x0CEC, 0x75DF, 0x75DF, 0x2229,
+    0x75E0, 0x75E0, 0x0CED, 0x75E1, 0x75E1, 0x2226, 0x75E2, 0x75E2, 0x0CE7,
+    0x75E3, 0x75E3, 0x0CE9, 0x75E4, 0x75E4, 0x222A, 0x75E6, 0x75E6, 0x2227,
+    0x75E7, 0x75E7, 0x2224, 0x75ED, 0x75ED, 0x24BB, 0x75EF, 0x75EF, 0x24B0,
+    0x75F0, 0x75F0, 0x0E88, 0x75F1, 0x75F1, 0x0E8B, 0x75F2, 0x75F2, 0x0E8A,
+    0x75F3, 0x75F3, 0x0E8F, 0x75F4, 0x75F4, 0x0E8E, 0x75F5, 0x75F5, 0x24BC,
+    0x75F6, 0x75F6, 0x24BA, 0x75F7, 0x75F7, 0x24B3, 0x75F8, 0x75F8, 0x24B7,
+    0x75F9, 0x75F9, 0x24B6, 0x75FA, 0x75FA, 0x0E8C, 0x75FB, 0x75FB, 0x24B9,
+    0x75FC, 0x75FC, 0x24B5, 0x75FD, 0x75FD, 0x24BD, 0x75FE, 0x75FE, 0x24B4,
+    0x75FF, 0x75FF, 0x0E8D, 0x7600, 0x7600, 0x0E87, 0x7601, 0x7601, 0x0E89,
+    0x7602, 0x7602, 0x42C9, 0x7603, 0x7603, 0x24B2, 0x7607, 0x7607, 0x3F8F,
+    0x7608, 0x7608, 0x2738, 0x7609, 0x7609, 0x1036, 0x760A, 0x760A, 0x273C,
+    0x760B, 0x760B, 0x1035, 0x760C, 0x760C, 0x2739, 0x760D, 0x760D, 0x1034,
+    0x760F, 0x760F, 0x24B1, 0x7610, 0x7610, 0x24B8, 0x7611, 0x7611, 0x273B,
+    0x7613, 0x7613, 0x1037, 0x7614, 0x7614, 0x273D, 0x7615, 0x7615, 0x273A,
+    0x7616, 0x7616, 0x2737, 0x7619, 0x7619, 0x2982, 0x761A, 0x761A, 0x2986,
+    0x761B, 0x761B, 0x2988, 0x761C, 0x761C, 0x2984, 0x761D, 0x761D, 0x2983,
+    0x761E, 0x761E, 0x2981, 0x761F, 0x761F, 0x11AE, 0x7620, 0x7620, 0x11AC,
+    0x7621, 0x7622, 0x11B1, 0x7623, 0x7623, 0x2985, 0x7624, 0x7624, 0x11AF,
+    0x7625, 0x7625, 0x2980, 0x7626, 0x7626, 0x11B0, 0x7627, 0x7627, 0x1033,
+    0x7628, 0x7628, 0x2987, 0x7629, 0x7629, 0x11AD, 0x762C, 0x762C, 0x42CA,
+    0x762D, 0x762D, 0x2BD5, 0x762F, 0x762F, 0x2BD4, 0x7630, 0x7630, 0x2BDC,
+    0x7631, 0x7631, 0x2BD6, 0x7632, 0x7632, 0x2BDB, 0x7633, 0x7633, 0x2BD8,
+    0x7634, 0x7634, 0x1302, 0x7635, 0x7635, 0x2BDA, 0x7638, 0x7638, 0x1303,
+    0x763A, 0x763A, 0x1304, 0x763B, 0x763B, 0x3E70, 0x763C, 0x763C, 0x2BD9,
+    0x763D, 0x763D, 0x2BD7, 0x7640, 0x7640, 0x3EE6, 0x7642, 0x7642, 0x1415,
+    0x7643, 0x7643, 0x2DB3, 0x7646, 0x7646, 0x1414, 0x7647, 0x7647, 0x2DB6,
+    0x7648, 0x7649, 0x2DB4, 0x764C, 0x764C, 0x1416, 0x764D, 0x764D, 0x4702,
+    0x764E, 0x764E, 0x3E72, 0x764F, 0x764F, 0x42CC, 0x7650, 0x7650, 0x2F63,
+    0x7651, 0x7651, 0x42CB, 0x7652, 0x7652, 0x14F9, 0x7653, 0x7653, 0x2F64,
+    0x7654, 0x7654, 0x3EF0, 0x7656, 0x7656, 0x14F7, 0x7657, 0x7657, 0x2F65,
+    0x7658, 0x7658, 0x14F8, 0x7659, 0x7659, 0x2F62, 0x765A, 0x765A, 0x2F66,
+    0x765C, 0x765C, 0x2F60, 0x765F, 0x765F, 0x159C, 0x7660, 0x7660, 0x30C5,
+    0x7661, 0x7661, 0x159D, 0x7662, 0x7662, 0x1622, 0x7664, 0x7664, 0x2F61,
+    0x7665, 0x7665, 0x1623, 0x7666, 0x7666, 0x3EAA, 0x7667, 0x7667, 0x3FA9,
+    0x7669, 0x7669, 0x167F, 0x766A, 0x766A, 0x32E4, 0x766C, 0x766C, 0x16CE,
+    0x766D, 0x766D, 0x3395, 0x766E, 0x766E, 0x16CD, 0x766F, 0x766F, 0x42CD,
+    0x7670, 0x7670, 0x3428, 0x7671, 0x7672, 0x1723, 0x7673, 0x7673, 0x3AEB,
+    0x7674, 0x7674, 0x4703, 0x7675, 0x7675, 0x3543, 0x7676, 0x7676, 0x022F,
+    0x7678, 0x7678, 0x07AA, 0x7679, 0x7679, 0x1B95, 0x767A, 0x767A, 0x4705,
+    0x767B, 0x767C, 0x0CEE, 0x767D, 0x767D, 0x0363, 0x767E, 0x767E, 0x03F5,
+    0x767F, 0x767F, 0x1810, 0x7680, 0x7680, 0x43D3, 0x7681, 0x7681, 0x18D6,
+    0x7682, 0x7682, 0x04F4, 0x7684, 0x7684, 0x0659, 0x7686, 0x7688, 0x07AB,
+    0x7689, 0x7689, 0x1FA8, 0x768A, 0x768A, 0x1D59, 0x768B, 0x768B, 0x0940,
+    0x768C, 0x768C, 0x43D4, 0x768E, 0x768E, 0x0B35, 0x768F, 0x768F, 0x1FA7,
+    0x7690, 0x7690, 0x42D0, 0x7692, 0x7692, 0x222D, 0x7693, 0x7693, 0x0CF1,
+    0x7695, 0x7695, 0x222C, 0x7696, 0x7696, 0x0CF0, 0x7699, 0x7699, 0x24BE,
+    0x769A, 0x769A, 0x11B3, 0x769B, 0x769B, 0x298C, 0x769C, 0x769E, 0x2989,
+    0x76A1, 0x76A1, 0x42D5, 0x76A4, 0x76A4, 0x2DB7, 0x76A5, 0x76A5, 0x42D6,
+    0x76A6, 0x76A6, 0x2F67, 0x76AA, 0x76AA, 0x31FB, 0x76AB, 0x76AB, 0x31FA,
+    0x76AD, 0x76AD, 0x3396, 0x76AE, 0x76AE, 0x0364, 0x76AF, 0x76AF, 0x1A14,
+    0x76B0, 0x76B0, 0x0941, 0x76B4, 0x76B4, 0x0CF2, 0x76B5, 0x76B5, 0x24BF,
+    0x76B7, 0x76B7, 0x42D7, 0x76B8, 0x76B8, 0x273E, 0x76BA, 0x76BA, 0x11B4,
+    0x76BB, 0x76BB, 0x2BDD, 0x76BD, 0x76BD, 0x2F68, 0x76BE, 0x76BE, 0x31FC,
+    0x76BF, 0x76BF, 0x0365, 0x76C2, 0x76C2, 0x065A, 0x76C3, 0x76C3, 0x07B0,
+    0x76C4, 0x76C4, 0x1B96, 0x76C5, 0x76C5, 0x07B1, 0x76C6, 0x76C6, 0x07AF,
+    0x76C8, 0x76C8, 0x07AE, 0x76C9, 0x76C9, 0x1D5A, 0x76CA, 0x76CA, 0x0942,
+    0x76CC, 0x76CC, 0x42D8, 0x76CD, 0x76CE, 0x0943, 0x76D2, 0x76D2, 0x0B37,
+    0x76D3, 0x76D3, 0x1FA9, 0x76D4, 0x76D4, 0x0B36, 0x76D6, 0x76D6, 0x3F55,
+    0x76DA, 0x76DA, 0x222E, 0x76DB, 0x76DB, 0x0B38, 0x76DC, 0x76DC, 0x0CF3,
+    0x76DD, 0x76DD, 0x24C0, 0x76DE, 0x76DF, 0x0E90, 0x76E1, 0x76E1, 0x1038,
+    0x76E3, 0x76E3, 0x1039, 0x76E4, 0x76E4, 0x11B5, 0x76E5, 0x76E5, 0x1306,
+    0x76E6, 0x76E6, 0x2BDE, 0x76E7, 0x76E7, 0x1305, 0x76E9, 0x76E9, 0x2DB8,
+    0x76EA, 0x76EA, 0x1417, 0x76EC, 0x76EC, 0x2F69, 0x76ED, 0x76ED, 0x31FD,
+    0x76EE, 0x76EE, 0x0366, 0x76EF, 0x76EF, 0x04F5, 0x76F0, 0x76F0, 0x1A17,
+    0x76F1, 0x76F1, 0x1A16, 0x76F2, 0x76F2, 0x065B, 0x76F3, 0x76F3, 0x1A15,
+    0x76F4, 0x76F4, 0x065C, 0x76F5, 0x76F5, 0x1A18, 0x76F7, 0x76F7, 0x1B9C,
+    0x76F8, 0x76F8, 0x07B4, 0x76F9, 0x76F9, 0x07B3, 0x76FA, 0x76FA, 0x1B9E,
+    0x76FB, 0x76FB, 0x1B9D, 0x76FC, 0x76FC, 0x07B8, 0x76FE, 0x76FE, 0x07B7,
+    0x7701, 0x7701, 0x07B2, 0x7703, 0x7705, 0x1B98, 0x7707, 0x7707, 0x07B9,
+    0x7708, 0x7708, 0x1B97, 0x7709, 0x7709, 0x07B5, 0x770A, 0x770A, 0x1B9B,
+    0x770B, 0x770B, 0x07B6, 0x770C, 0x770C, 0x3D62, 0x770E, 0x770F, 0x3B02,
+    0x7710, 0x7710, 0x1D5D, 0x7711, 0x7711, 0x1D61, 0x7712, 0x7712, 0x1D5F,
+    0x7713, 0x7713, 0x1D5E, 0x7715, 0x7715, 0x1D62, 0x7719, 0x771A, 0x1D63,
+    0x771B, 0x771B, 0x1D5C, 0x771D, 0x771D, 0x1D5B, 0x771E, 0x771E, 0x42DE,
+    0x771F, 0x7720, 0x0946, 0x7722, 0x7722, 0x1D65, 0x7723, 0x7723, 0x1D60,
+    0x7724, 0x7724, 0x3FE8, 0x7725, 0x7725, 0x1FB2, 0x7726, 0x7726, 0x42DF,
+    0x7727, 0x7727, 0x1D66, 0x7728, 0x7728, 0x0948, 0x7729, 0x7729, 0x0945,
+    0x772B, 0x772B, 0x3FF3, 0x772D, 0x772D, 0x1FAC, 0x772F, 0x772F, 0x1FAB,
+    0x7731, 0x7732, 0x1FAD, 0x7733, 0x7733, 0x1FB0, 0x7734, 0x7734, 0x1FAF,
+    0x7735, 0x7735, 0x1FB4, 0x7736, 0x7736, 0x0B3C, 0x7737, 0x7737, 0x0B39,
+    0x7738, 0x7738, 0x0B3D, 0x7739, 0x7739, 0x1FAA, 0x773A, 0x773A, 0x0B3E,
+    0x773B, 0x773B, 0x1FB3, 0x773C, 0x773C, 0x0B3B, 0x773D, 0x773D, 0x1FB1,
+    0x773E, 0x773E, 0x0B3A, 0x7740, 0x7740, 0x42E0, 0x7743, 0x7743, 0x470A,
+    0x7744, 0x7744, 0x2231, 0x7745, 0x7745, 0x2233, 0x7746, 0x7747, 0x222F,
+    0x774A, 0x774A, 0x2234, 0x774B, 0x774C, 0x2236, 0x774D, 0x774D, 0x2232,
+    0x774E, 0x774E, 0x2235, 0x774F, 0x774F, 0x0CF4, 0x7752, 0x7752, 0x24C4,
+    0x7754, 0x7754, 0x24C9, 0x7755, 0x7755, 0x24C1, 0x7756, 0x7756, 0x24C5,
+    0x7758, 0x7758, 0x42E3, 0x7759, 0x7759, 0x24CA, 0x775A, 0x775A, 0x24C6,
+    0x775B, 0x775B, 0x0E92, 0x775C, 0x775C, 0x0E9A, 0x775E, 0x775E, 0x0E95,
+    0x775F, 0x7760, 0x24C2, 0x7761, 0x7761, 0x103D, 0x7762, 0x7762, 0x0E9D,
+    0x7763, 0x7763, 0x0E96, 0x7765, 0x7765, 0x0E9B, 0x7766, 0x7766, 0x0E94,
+    0x7767, 0x7767, 0x24C8, 0x7768, 0x7768, 0x0E9C, 0x7769, 0x7769, 0x24C7,
+    0x776A, 0x776A, 0x0E98, 0x776B, 0x776B, 0x0E93, 0x776C, 0x776C, 0x0E99,
+    0x776D, 0x776D, 0x24CB, 0x776E, 0x776E, 0x2743, 0x776F, 0x776F, 0x2745,
+    0x7772, 0x7772, 0x396B, 0x7777, 0x7777, 0x46A9, 0x7778, 0x7778, 0x3B00,
+    0x7779, 0x7779, 0x0E97, 0x777A, 0x777A, 0x4317, 0x777B, 0x777B, 0x3B04,
+    0x777C, 0x777C, 0x2740, 0x777D, 0x777D, 0x103B, 0x777E, 0x777E, 0x2746,
+    0x777F, 0x777F, 0x103C, 0x7780, 0x7780, 0x2744, 0x7781, 0x7781, 0x273F,
+    0x7782, 0x7782, 0x2742, 0x7783, 0x7783, 0x2747, 0x7784, 0x7784, 0x103A,
+    0x7785, 0x7785, 0x2741, 0x7787, 0x7787, 0x11B7, 0x7788, 0x7788, 0x2990,
+    0x7789, 0x7789, 0x298F, 0x778B, 0x778B, 0x11BA, 0x778C, 0x778C, 0x11B8,
+    0x778D, 0x778D, 0x298D, 0x778E, 0x778E, 0x11B6, 0x778F, 0x778F, 0x298E,
+    0x7791, 0x7791, 0x11B9, 0x7793, 0x7793, 0x382D, 0x7795, 0x7795, 0x2BE6,
+    0x7797, 0x7797, 0x2BE8, 0x7798, 0x7798, 0x470E, 0x7799, 0x7799, 0x2BE7,
+    0x779A, 0x779A, 0x2BDF, 0x779B, 0x779B, 0x2BE3, 0x779C, 0x779C, 0x2BE2,
+    0x779D, 0x779D, 0x2BE0, 0x779E, 0x779F, 0x1308, 0x77A0, 0x77A0, 0x1307,
+    0x77A1, 0x77A1, 0x2BE1, 0x77A2, 0x77A3, 0x2BE4, 0x77A5, 0x77A5, 0x130A,
+    0x77A7, 0x77A7, 0x141C, 0x77A8, 0x77A8, 0x2DC0, 0x77AA, 0x77AA, 0x1419,
+    0x77AB, 0x77AB, 0x2DBA, 0x77AC, 0x77AC, 0x141B, 0x77AD, 0x77AD, 0x141D,
+    0x77AF, 0x77AF, 0x42E5, 0x77B0, 0x77B0, 0x141A, 0x77B1, 0x77B1, 0x2DBF,
+    0x77B2, 0x77B2, 0x2DBB, 0x77B3, 0x77B3, 0x1418, 0x77B4, 0x77B4, 0x2DBE,
+    0x77B5, 0x77B5, 0x2DB9, 0x77B6, 0x77B6, 0x2DBD, 0x77B7, 0x77B7, 0x2DBC,
+    0x77B9, 0x77B9, 0x3E73, 0x77BA, 0x77BA, 0x2F6B, 0x77BB, 0x77BC, 0x14FC,
+    0x77BD, 0x77BD, 0x14FA, 0x77BE, 0x77BE, 0x4711, 0x77BF, 0x77BF, 0x14FB,
+    0x77C2, 0x77C2, 0x2F6A, 0x77C3, 0x77C3, 0x3BB1, 0x77C4, 0x77C4, 0x30C8,
+    0x77C5, 0x77C5, 0x41C1, 0x77C7, 0x77C7, 0x159E, 0x77C9, 0x77CA, 0x30C6,
+    0x77CB, 0x77CB, 0x4712, 0x77CC, 0x77CC, 0x31FE, 0x77CD, 0x77CD, 0x3201,
+    0x77CE, 0x77CF, 0x31FF, 0x77D0, 0x77D0, 0x32E5, 0x77D3, 0x77D3, 0x1680,
+    0x77D4, 0x77D4, 0x3429, 0x77D5, 0x77D5, 0x348F, 0x77D7, 0x77D7, 0x1725,
+    0x77D8, 0x77D9, 0x34D3, 0x77DA, 0x77DA, 0x1753, 0x77DB, 0x77DB, 0x0367,
+    0x77DC, 0x77DC, 0x07BA, 0x77DE, 0x77DE, 0x2238, 0x77E0, 0x77E0, 0x24CC,
+    0x77E2, 0x77E2, 0x0368, 0x77E3, 0x77E3, 0x04F6, 0x77E5, 0x77E5, 0x065D,
+    0x77E6, 0x77E6, 0x4081, 0x77E7, 0x77E8, 0x1B9F, 0x77E9, 0x77E9, 0x0949,
+    0x77EC, 0x77EC, 0x2239, 0x77ED, 0x77ED, 0x0CF5, 0x77EE, 0x77EE, 0x0E9E,
+    0x77EF, 0x77EF, 0x141E, 0x77F0, 0x77F0, 0x2DC1, 0x77F1, 0x77F1, 0x30C9,
+    0x77F2, 0x77F2, 0x3202, 0x77F3, 0x77F3, 0x0369, 0x77F4, 0x77F4, 0x42E9,
+    0x77F7, 0x77F7, 0x1A1E, 0x77F8, 0x77F8, 0x1A19, 0x77F9, 0x77F9, 0x1A1B,
+    0x77FA, 0x77FA, 0x1A1D, 0x77FB, 0x77FB, 0x1A1C, 0x77FC, 0x77FC, 0x1A1A,
+    0x77FD, 0x77FD, 0x065E, 0x77FE, 0x77FE, 0x3FD5, 0x7802, 0x7802, 0x07BB,
+    0x7803, 0x7803, 0x1BA9, 0x7805, 0x7805, 0x1BA4, 0x7806, 0x7806, 0x1BA1,
+    0x7808, 0x7808, 0x3E46, 0x7809, 0x7809, 0x1BA8, 0x780C, 0x780D, 0x07BD,
+    0x780E, 0x780E, 0x1BA7, 0x780F, 0x780F, 0x1BA6, 0x7810, 0x7810, 0x1BA5,
+    0x7811, 0x7812, 0x1BA2, 0x7813, 0x7813, 0x1BAA, 0x7814, 0x7814, 0x07BC,
+    0x7818, 0x7818, 0x4713, 0x781C, 0x781C, 0x4714, 0x781D, 0x781D, 0x094D,
+    0x781E, 0x781E, 0x3B13, 0x781F, 0x781F, 0x0953, 0x7820, 0x7820, 0x0952,
+    0x7821, 0x7821, 0x1D6F, 0x7822, 0x7822, 0x1D69, 0x7823, 0x7823, 0x1D67,
+    0x7825, 0x7825, 0x0950, 0x7826, 0x7826, 0x1FBB, 0x7827, 0x7827, 0x094B,
+    0x7828, 0x7828, 0x1D6C, 0x7829, 0x7829, 0x1D70, 0x782A, 0x782A, 0x1D72,
+    0x782B, 0x782B, 0x1D6E, 0x782C, 0x782C, 0x1D68, 0x782D, 0x782D, 0x0951,
+    0x782E, 0x782E, 0x1D6D, 0x782F, 0x782F, 0x1D6B, 0x7830, 0x7830, 0x094A,
+    0x7831, 0x7831, 0x1D73, 0x7832, 0x7832, 0x0954, 0x7833, 0x7833, 0x1D71,
+    0x7834, 0x7834, 0x094E, 0x7835, 0x7835, 0x1D6A, 0x7837, 0x7837, 0x094F,
+    0x7838, 0x7838, 0x094C, 0x7839, 0x7839, 0x43D6, 0x783C, 0x783C, 0x401A,
+    0x783D, 0x783D, 0x3C6A, 0x7842, 0x7842, 0x3AC4, 0x7843, 0x7843, 0x0B40,
+    0x7844, 0x7844, 0x3C2B, 0x7845, 0x7845, 0x1FBC, 0x7847, 0x7847, 0x4715,
+    0x7848, 0x7848, 0x1FB5, 0x7849, 0x7849, 0x1FB7, 0x784A, 0x784A, 0x1FB9,
+    0x784B, 0x784B, 0x3C6D, 0x784C, 0x784C, 0x1FBA, 0x784D, 0x784D, 0x1FB8,
+    0x784E, 0x784E, 0x0B41, 0x7850, 0x7850, 0x1FBD, 0x7851, 0x7851, 0x4716,
+    0x7852, 0x7852, 0x1FB6, 0x7853, 0x7853, 0x3F95, 0x7854, 0x7854, 0x3C6B,
+    0x785C, 0x785C, 0x223D, 0x785D, 0x785D, 0x0CF6, 0x785E, 0x785E, 0x2245,
+    0x7860, 0x7860, 0x223A, 0x7862, 0x7862, 0x2246, 0x7864, 0x7865, 0x223B,
+    0x7866, 0x7866, 0x4717, 0x7868, 0x7868, 0x2244, 0x7869, 0x7869, 0x2243,
+    0x786A, 0x786A, 0x2240, 0x786B, 0x786B, 0x0B3F, 0x786C, 0x786C, 0x0CF7,
+    0x786D, 0x786D, 0x223E, 0x786E, 0x786E, 0x2241, 0x786F, 0x786F, 0x0CF8,
+    0x7870, 0x7870, 0x2242, 0x7871, 0x7871, 0x223F, 0x7879, 0x7879, 0x24D7,
+    0x787A, 0x787A, 0x3EE9, 0x787B, 0x787B, 0x24DB, 0x787C, 0x787C, 0x0EA5,
+    0x787E, 0x787E, 0x274D, 0x787F, 0x787F, 0x0EA8, 0x7880, 0x7880, 0x24D9,
+    0x7881, 0x7881, 0x36E8, 0x7883, 0x7883, 0x24D6, 0x7884, 0x7884, 0x24D1,
+    0x7885, 0x7886, 0x24D3, 0x7887, 0x7887, 0x24CD, 0x7888, 0x7888, 0x3B15,
+    0x7889, 0x7889, 0x0EA4, 0x788C, 0x788C, 0x0EA3, 0x788D, 0x788D, 0x3B14,
+    0x788E, 0x788E, 0x0E9F, 0x788F, 0x788F, 0x24D0, 0x7891, 0x7891, 0x0EA6,
+    0x7893, 0x7893, 0x0EA7, 0x7894, 0x7894, 0x24CF, 0x7895, 0x7895, 0x24D2,
+    0x7896, 0x7896, 0x24DA, 0x7897, 0x7898, 0x0EA1, 0x7899, 0x7899, 0x24D8,
+    0x789A, 0x789A, 0x24CE, 0x789E, 0x789E, 0x274F, 0x789F, 0x789F, 0x103F,
+    0x78A0, 0x78A0, 0x2751, 0x78A1, 0x78A1, 0x24D5, 0x78A2, 0x78A2, 0x2753,
+    0x78A3, 0x78A3, 0x1043, 0x78A4, 0x78A4, 0x2754, 0x78A5, 0x78A5, 0x2750,
+    0x78A7, 0x78A7, 0x1040, 0x78A8, 0x78A8, 0x274C, 0x78A9, 0x78A9, 0x1042,
+    0x78AA, 0x78AA, 0x2749, 0x78AB, 0x78AB, 0x274E, 0x78AC, 0x78AC, 0x2752,
+    0x78AD, 0x78AD, 0x274B, 0x78AF, 0x78AF, 0x42EC, 0x78B0, 0x78B0, 0x0EA0,
+    0x78B1, 0x78B1, 0x42F4, 0x78B2, 0x78B2, 0x2748, 0x78B3, 0x78B3, 0x1041,
+    0x78B4, 0x78B4, 0x274A, 0x78B6, 0x78B6, 0x3C6C, 0x78B8, 0x78B8, 0x4571,
+    0x78B9, 0x78B9, 0x3C63, 0x78BA, 0x78BA, 0x11BD, 0x78BB, 0x78BB, 0x2992,
+    0x78BC, 0x78BC, 0x11C1, 0x78BE, 0x78BE, 0x11BF, 0x78C1, 0x78C1, 0x103E,
+    0x78C3, 0x78C4, 0x2999, 0x78C5, 0x78C5, 0x11BC, 0x78C7, 0x78C7, 0x42ED,
+    0x78C8, 0x78C8, 0x2998, 0x78C9, 0x78C9, 0x299B, 0x78CA, 0x78CA, 0x11BE,
+    0x78CB, 0x78CB, 0x11BB, 0x78CC, 0x78CC, 0x2994, 0x78CD, 0x78CD, 0x2991,
+    0x78CE, 0x78CE, 0x2996, 0x78CF, 0x78CF, 0x2993, 0x78D0, 0x78D0, 0x11C2,
+    0x78D1, 0x78D1, 0x2995, 0x78D2, 0x78D2, 0x3B16, 0x78D3, 0x78D3, 0x42EE,
+    0x78D4, 0x78D4, 0x2997, 0x78D5, 0x78D5, 0x11C0, 0x78D7, 0x78D7, 0x42F2,
+    0x78D8, 0x78D8, 0x3F8C, 0x78DA, 0x78DA, 0x130C, 0x78DB, 0x78DB, 0x2BEF,
+    0x78DD, 0x78DD, 0x2BE9, 0x78DE, 0x78DE, 0x2BED, 0x78DF, 0x78E0, 0x2BF3,
+    0x78E1, 0x78E2, 0x2BF0, 0x78E3, 0x78E3, 0x2BEE, 0x78E5, 0x78E5, 0x2BEB,
+    0x78E7, 0x78E7, 0x130E, 0x78E8, 0x78E8, 0x130B, 0x78E9, 0x78E9, 0x2BEA,
+    0x78EA, 0x78EA, 0x2BEC, 0x78EC, 0x78EC, 0x130D, 0x78ED, 0x78ED, 0x2BF2,
+    0x78EE, 0x78EE, 0x3A81, 0x78EF, 0x78EF, 0x1422, 0x78F0, 0x78F0, 0x3B3A,
+    0x78F1, 0x78F1, 0x40BE, 0x78F2, 0x78F2, 0x2DC8, 0x78F3, 0x78F3, 0x2DC2,
+    0x78F4, 0x78F4, 0x1421, 0x78F5, 0x78F5, 0x38B3, 0x78F7, 0x78F7, 0x141F,
+    0x78F9, 0x78F9, 0x2DCA, 0x78FA, 0x78FA, 0x1420, 0x78FB, 0x78FC, 0x2DC5,
+    0x78FD, 0x78FD, 0x2DC3, 0x78FE, 0x78FE, 0x2DCB, 0x78FF, 0x78FF, 0x2DC7,
+    0x7901, 0x7901, 0x1423, 0x7902, 0x7902, 0x2DC4, 0x7904, 0x7904, 0x2DCC,
+    0x7905, 0x7905, 0x2DC9, 0x7906, 0x7906, 0x3FCF, 0x7909, 0x7909, 0x2F6F,
+    0x790C, 0x790C, 0x2F6C, 0x790E, 0x790E, 0x14FE, 0x7910, 0x7910, 0x2F70,
+    0x7911, 0x7911, 0x2F72, 0x7912, 0x7912, 0x2F71, 0x7913, 0x7914, 0x2F6D,
+    0x7917, 0x7917, 0x30CE, 0x7919, 0x7919, 0x159F, 0x791B, 0x791B, 0x30CB,
+    0x791C, 0x791C, 0x30CD, 0x791D, 0x791D, 0x30CA, 0x791E, 0x791E, 0x30CF,
+    0x7921, 0x7921, 0x30CC, 0x7923, 0x7923, 0x3204, 0x7924, 0x7924, 0x3207,
+    0x7925, 0x7925, 0x3203, 0x7926, 0x7926, 0x1624, 0x7927, 0x7928, 0x3205,
+    0x7929, 0x7929, 0x3208, 0x792A, 0x792A, 0x1625, 0x792B, 0x792B, 0x1627,
+    0x792C, 0x792C, 0x1626, 0x792D, 0x792D, 0x32E6, 0x792E, 0x792E, 0x42F0,
+    0x792F, 0x792F, 0x32E8, 0x7931, 0x7931, 0x32E7, 0x7932, 0x7932, 0x471B,
+    0x7933, 0x7933, 0x471A, 0x7934, 0x7934, 0x42F3, 0x7935, 0x7935, 0x3397,
+    0x7936, 0x7936, 0x3783, 0x7938, 0x7938, 0x3490, 0x7939, 0x7939, 0x34D5,
+    0x793A, 0x793A, 0x036A, 0x793B, 0x793B, 0x44F7, 0x793C, 0x793C, 0x4300,
+    0x793D, 0x793D, 0x18D7, 0x793E, 0x793E, 0x065F, 0x793F, 0x793F, 0x1A20,
+    0x7940, 0x7941, 0x0660, 0x7942, 0x7942, 0x1A1F, 0x7944, 0x7944, 0x1BAF,
+    0x7945, 0x7945, 0x1BAE, 0x7946, 0x7946, 0x07BF, 0x7947, 0x7947, 0x07C2,
+    0x7948, 0x7948, 0x07C1, 0x7949, 0x7949, 0x07C0, 0x794A, 0x794A, 0x1BAB,
+    0x794B, 0x794B, 0x1BAD, 0x794C, 0x794C, 0x1BAC, 0x794F, 0x794F, 0x1D76,
+    0x7950, 0x7950, 0x0956, 0x7951, 0x7951, 0x1D7A, 0x7952, 0x7952, 0x1D79,
+    0x7953, 0x7953, 0x1D78, 0x7954, 0x7954, 0x1D74, 0x7955, 0x7955, 0x0955,
+    0x7956, 0x7956, 0x0959, 0x7957, 0x7957, 0x095C, 0x7958, 0x7958, 0x37E5,
+    0x7959, 0x7959, 0x3B18, 0x795A, 0x795A, 0x095D, 0x795B, 0x795B, 0x1D75,
+    0x795C, 0x795C, 0x1D77, 0x795D, 0x795D, 0x095B, 0x795E, 0x795E, 0x095A,
+    0x795F, 0x795F, 0x0958, 0x7960, 0x7960, 0x0957, 0x7961, 0x7961, 0x1FC4,
+    0x7962, 0x7962, 0x3E7D, 0x7963, 0x7963, 0x1FC2, 0x7964, 0x7964, 0x1FBE,
+    0x7965, 0x7965, 0x0B42, 0x7967, 0x7967, 0x1FBF, 0x7968, 0x7968, 0x0B43,
+    0x7969, 0x796A, 0x1FC0, 0x796B, 0x796B, 0x1FC3, 0x796D, 0x796D, 0x0B44,
+    0x7970, 0x7970, 0x224A, 0x7971, 0x7971, 0x4168, 0x7972, 0x7972, 0x2249,
+    0x7973, 0x7973, 0x2248, 0x7974, 0x7974, 0x2247, 0x7979, 0x7979, 0x24DF,
+    0x797A, 0x797A, 0x0EA9, 0x797C, 0x797C, 0x24DC, 0x797D, 0x797D, 0x24DE,
+    0x797E, 0x797E, 0x3E26, 0x797F, 0x797F, 0x0EAA, 0x7980, 0x7980, 0x42FC,
+    0x7981, 0x7981, 0x0EAB, 0x7982, 0x7982, 0x24DD, 0x7983, 0x7983, 0x3DF6,
+    0x7986, 0x7986, 0x42F9, 0x7987, 0x7987, 0x4588, 0x7988, 0x7988, 0x275D,
+    0x798A, 0x798B, 0x2756, 0x798D, 0x798D, 0x1046, 0x798E, 0x798F, 0x1044,
+    0x7990, 0x7990, 0x275F, 0x7991, 0x7991, 0x471D, 0x7992, 0x7992, 0x275E,
+    0x7993, 0x7993, 0x275B, 0x7994, 0x7994, 0x275A, 0x7995, 0x7995, 0x2759,
+    0x7996, 0x7996, 0x2758, 0x7997, 0x7997, 0x275C, 0x7998, 0x7998, 0x2755,
+    0x7999, 0x7999, 0x43FC, 0x799A, 0x799A, 0x299C, 0x799B, 0x799B, 0x29A1,
+    0x799C, 0x799C, 0x299F, 0x799D, 0x799D, 0x42FE, 0x799F, 0x799F, 0x395E,
+    0x79A0, 0x79A0, 0x299E, 0x79A1, 0x79A1, 0x299D, 0x79A2, 0x79A2, 0x29A0,
+    0x79A4, 0x79A4, 0x2BF5, 0x79A5, 0x79A5, 0x3B1E, 0x79A6, 0x79A6, 0x130F,
+    0x79A7, 0x79A7, 0x1424, 0x79A8, 0x79A8, 0x2DCE, 0x79A9, 0x79A9, 0x4301,
+    0x79AA, 0x79AA, 0x1425, 0x79AB, 0x79AB, 0x2DCD, 0x79AC, 0x79AC, 0x2F74,
+    0x79AD, 0x79AD, 0x2F73, 0x79AE, 0x79AE, 0x14FF, 0x79B0, 0x79B0, 0x30D0,
+    0x79B1, 0x79B1, 0x15A0, 0x79B2, 0x79B2, 0x3209, 0x79B3, 0x79B3, 0x16CF,
+    0x79B4, 0x79B4, 0x3398, 0x79B6, 0x79B6, 0x3492, 0x79B7, 0x79B7, 0x3491,
+    0x79B8, 0x79B8, 0x17B2, 0x79B9, 0x79BA, 0x07C3, 0x79BB, 0x79BB, 0x1FC5,
+    0x79BD, 0x79BD, 0x0EAD, 0x79BE, 0x79BE, 0x036B, 0x79BF, 0x79BF, 0x04F9,
+    0x79C0, 0x79C0, 0x04F8, 0x79C1, 0x79C1, 0x04F7, 0x79C4, 0x79C4, 0x3CCD,
+    0x79C5, 0x79C5, 0x1A21, 0x79C6, 0x79C6, 0x4305, 0x79C8, 0x79C8, 0x0663,
+    0x79C9, 0x79C9, 0x0662, 0x79CB, 0x79CB, 0x07C7, 0x79CC, 0x79CC, 0x4233,
+    0x79CD, 0x79CD, 0x1BB1, 0x79CE, 0x79CE, 0x1BB4, 0x79CF, 0x79CF, 0x1BB2,
+    0x79D1, 0x79D2, 0x07C5, 0x79D4, 0x79D4, 0x4307, 0x79D5, 0x79D5, 0x1BB0,
+    0x79D6, 0x79D6, 0x1BB3, 0x79D8, 0x79D8, 0x0964, 0x79DC, 0x79DC, 0x1D81,
+    0x79DD, 0x79DD, 0x1D83, 0x79DE, 0x79DE, 0x1D82, 0x79DF, 0x79DF, 0x0961,
+    0x79E0, 0x79E0, 0x1D7D, 0x79E2, 0x79E2, 0x3C5A, 0x79E3, 0x79E3, 0x095F,
+    0x79E4, 0x79E4, 0x095E, 0x79E6, 0x79E6, 0x0962, 0x79E7, 0x79E7, 0x0960,
+    0x79E9, 0x79E9, 0x0963, 0x79EA, 0x79EA, 0x1D80, 0x79EB, 0x79EC, 0x1D7B,
+    0x79ED, 0x79ED, 0x1D7F, 0x79EE, 0x79EE, 0x1D7E, 0x79F1, 0x79F1, 0x3B27,
+    0x79F4, 0x79F4, 0x3B22, 0x79F6, 0x79F7, 0x1FC8, 0x79F8, 0x79F8, 0x1FC7,
+    0x79FA, 0x79FA, 0x1FC6, 0x79FB, 0x79FB, 0x0B45, 0x7A00, 0x7A00, 0x0CFD,
+    0x7A02, 0x7A02, 0x224B, 0x7A03, 0x7A03, 0x224D, 0x7A04, 0x7A04, 0x224F,
+    0x7A05, 0x7A05, 0x0CFC, 0x7A06, 0x7A06, 0x471E, 0x7A08, 0x7A08, 0x0CFA,
+    0x7A0A, 0x7A0A, 0x224C, 0x7A0B, 0x7A0B, 0x0CFB, 0x7A0C, 0x7A0C, 0x224E,
+    0x7A0D, 0x7A0D, 0x0CF9, 0x7A10, 0x7A10, 0x24E9, 0x7A11, 0x7A11, 0x24E0,
+    0x7A12, 0x7A12, 0x24E3, 0x7A13, 0x7A13, 0x24E7, 0x7A14, 0x7A14, 0x0EB1,
+    0x7A15, 0x7A15, 0x24E5, 0x7A17, 0x7A17, 0x24E4, 0x7A18, 0x7A19, 0x24E1,
+    0x7A1A, 0x7A1A, 0x0EAF, 0x7A1B, 0x7A1B, 0x24E8, 0x7A1C, 0x7A1C, 0x0EAE,
+    0x7A1E, 0x7A1E, 0x0EB3, 0x7A1F, 0x7A1F, 0x0EB2, 0x7A20, 0x7A20, 0x0EB0,
+    0x7A22, 0x7A22, 0x24E6, 0x7A26, 0x7A26, 0x2765, 0x7A28, 0x7A28, 0x2764,
+    0x7A2B, 0x7A2B, 0x2760, 0x7A2D, 0x7A2D, 0x3FDA, 0x7A2E, 0x7A2E, 0x1047,
+    0x7A2F, 0x7A2F, 0x2763, 0x7A30, 0x7A30, 0x2762, 0x7A31, 0x7A31, 0x1048,
+    0x7A37, 0x7A37, 0x11C7, 0x7A39, 0x7A39, 0x29A3, 0x7A3A, 0x7A3A, 0x3B21,
+    0x7A3B, 0x7A3B, 0x11C8, 0x7A3C, 0x7A3C, 0x11C4, 0x7A3D, 0x7A3D, 0x11C6,
+    0x7A3E, 0x7A3E, 0x3F8B, 0x7A3F, 0x7A3F, 0x11C3, 0x7A40, 0x7A40, 0x11C5,
+    0x7A43, 0x7A43, 0x396C, 0x7A44, 0x7A44, 0x2BF6, 0x7A45, 0x7A45, 0x3DF1,
+    0x7A46, 0x7A46, 0x1312, 0x7A47, 0x7A47, 0x2BF8, 0x7A48, 0x7A48, 0x2BF7,
+    0x7A49, 0x7A49, 0x3733, 0x7A4A, 0x7A4A, 0x2761, 0x7A4B, 0x7A4B, 0x1314,
+    0x7A4C, 0x7A4C, 0x1313, 0x7A4D, 0x7A4E, 0x1310, 0x7A54, 0x7A54, 0x2DD3,
+    0x7A56, 0x7A56, 0x2DD1, 0x7A57, 0x7A57, 0x1426, 0x7A58, 0x7A58, 0x2DD2,
+    0x7A5A, 0x7A5A, 0x2DD4, 0x7A5B, 0x7A5B, 0x2DD0, 0x7A5C, 0x7A5C, 0x2DCF,
+    0x7A5F, 0x7A5F, 0x2F75, 0x7A60, 0x7A60, 0x1502, 0x7A61, 0x7A62, 0x1500,
+    0x7A65, 0x7A65, 0x3736, 0x7A67, 0x7A68, 0x30D1, 0x7A69, 0x7A69, 0x15A2,
+    0x7A6B, 0x7A6B, 0x15A1, 0x7A6C, 0x7A6D, 0x320B, 0x7A6E, 0x7A6E, 0x320A,
+    0x7A70, 0x7A71, 0x3399, 0x7A74, 0x7A74, 0x036C, 0x7A75, 0x7A75, 0x1811,
+    0x7A76, 0x7A76, 0x04FA, 0x7A78, 0x7A78, 0x1A22, 0x7A79, 0x7A79, 0x0665,
+    0x7A7A, 0x7A7A, 0x0664, 0x7A7B, 0x7A7B, 0x1A23, 0x7A7D, 0x7A7D, 0x3737,
+    0x7A7E, 0x7A7E, 0x1BB6, 0x7A7F, 0x7A7F, 0x07C8, 0x7A80, 0x7A80, 0x1BB5,
+    0x7A81, 0x7A81, 0x07C9, 0x7A83, 0x7A83, 0x3D7D, 0x7A84, 0x7A84, 0x0965,
+    0x7A85, 0x7A85, 0x1D86, 0x7A86, 0x7A86, 0x1D84, 0x7A87, 0x7A87, 0x1D8A,
+    0x7A88, 0x7A88, 0x0966, 0x7A89, 0x7A89, 0x1D85, 0x7A8A, 0x7A8A, 0x1D89,
+    0x7A8B, 0x7A8C, 0x1D87, 0x7A8F, 0x7A8F, 0x1FCA, 0x7A90, 0x7A90, 0x1FCC,
+    0x7A91, 0x7A91, 0x43D8, 0x7A92, 0x7A92, 0x0B46, 0x7A94, 0x7A94, 0x1FCB,
+    0x7A95, 0x7A95, 0x0B47, 0x7A96, 0x7A96, 0x0D00, 0x7A97, 0x7A97, 0x0CFF,
+    0x7A98, 0x7A98, 0x0CFE, 0x7A99, 0x7A99, 0x2250, 0x7A9E, 0x7A9E, 0x24EC,
+    0x7A9F, 0x7AA0, 0x0EB4, 0x7AA2, 0x7AA2, 0x24EB, 0x7AA3, 0x7AA3, 0x24EA,
+    0x7AA8, 0x7AA8, 0x2766, 0x7AA9, 0x7AA9, 0x104A, 0x7AAA, 0x7AAA, 0x1049,
+    0x7AAB, 0x7AAC, 0x2767, 0x7AAE, 0x7AAE, 0x11CA, 0x7AAF, 0x7AAF, 0x11C9,
+    0x7AB0, 0x7AB0, 0x373A, 0x7AB1, 0x7AB1, 0x2BFC, 0x7AB2, 0x7AB2, 0x29A4,
+    0x7AB3, 0x7AB3, 0x29A6, 0x7AB4, 0x7AB4, 0x29A5, 0x7AB5, 0x7AB5, 0x2BFB,
+    0x7AB6, 0x7AB6, 0x2BF9, 0x7AB7, 0x7AB7, 0x2BFD, 0x7AB8, 0x7AB8, 0x2BFA,
+    0x7ABA, 0x7ABA, 0x1315, 0x7ABB, 0x7ABB, 0x3739, 0x7ABC, 0x7ABC, 0x4721,
+    0x7ABE, 0x7ABE, 0x2DD5, 0x7ABF, 0x7ABF, 0x1427, 0x7AC0, 0x7AC1, 0x2DD6,
+    0x7AC2, 0x7AC3, 0x373B, 0x7AC4, 0x7AC5, 0x1503, 0x7AC7, 0x7AC7, 0x1628,
+    0x7AC8, 0x7AC8, 0x3D7F, 0x7AC9, 0x7AC9, 0x4570, 0x7ACA, 0x7ACA, 0x16FF,
+    0x7ACB, 0x7ACB, 0x036D, 0x7ACF, 0x7ACF, 0x4724, 0x7AD1, 0x7AD1, 0x1BB7,
+    0x7AD3, 0x7AD3, 0x3F8A, 0x7AD8, 0x7AD8, 0x1D8B, 0x7AD9, 0x7AD9, 0x0967,
+    0x7ADA, 0x7ADA, 0x3740, 0x7ADB, 0x7ADB, 0x4725, 0x7ADC, 0x7ADC, 0x3951,
+    0x7ADD, 0x7ADD, 0x3741, 0x7ADF, 0x7ADF, 0x0BDE, 0x7AE0, 0x7AE0, 0x0BDD,
+    0x7AE2, 0x7AE2, 0x3B33, 0x7AE3, 0x7AE3, 0x0D02, 0x7AE4, 0x7AE4, 0x2252,
+    0x7AE5, 0x7AE5, 0x0D01, 0x7AE6, 0x7AE6, 0x2251, 0x7AE7, 0x7AE7, 0x385D,
+    0x7AE9, 0x7AE9, 0x3831, 0x7AEA, 0x7AEA, 0x3742, 0x7AEB, 0x7AEB, 0x24ED,
+    0x7AED, 0x7AED, 0x104B, 0x7AEE, 0x7AEE, 0x2769, 0x7AEF, 0x7AEF, 0x104C,
+    0x7AF6, 0x7AF6, 0x1629, 0x7AF7, 0x7AF7, 0x320D, 0x7AF9, 0x7AF9, 0x03F6,
+    0x7AFA, 0x7AFA, 0x0666, 0x7AFB, 0x7AFB, 0x1A24, 0x7AFD, 0x7AFD, 0x07CB,
+    0x7AFE, 0x7AFE, 0x3B3D, 0x7AFF, 0x7AFF, 0x07CA, 0x7B00, 0x7B01, 0x1BB8,
+    0x7B04, 0x7B04, 0x1D8D, 0x7B05, 0x7B05, 0x1D8F, 0x7B06, 0x7B06, 0x0968,
+    0x7B08, 0x7B08, 0x1D91, 0x7B09, 0x7B09, 0x1D94, 0x7B0A, 0x7B0A, 0x1D92,
+    0x7B0B, 0x7B0B, 0x3746, 0x7B0C, 0x7B0C, 0x3B63, 0x7B0E, 0x7B0E, 0x1D93,
+    0x7B0F, 0x7B0F, 0x1D90, 0x7B10, 0x7B10, 0x1D8C, 0x7B11, 0x7B11, 0x0969,
+    0x7B12, 0x7B12, 0x1D95, 0x7B13, 0x7B13, 0x1D8E, 0x7B14, 0x7B14, 0x3F77,
+    0x7B18, 0x7B18, 0x1FD5, 0x7B19, 0x7B19, 0x0B4D, 0x7B1A, 0x7B1A, 0x1FDE,
+    0x7B1B, 0x7B1B, 0x0B4A, 0x7B1D, 0x7B1D, 0x1FD7, 0x7B1E, 0x7B1E, 0x0B4E,
+    0x7B1F, 0x7B1F, 0x3F11, 0x7B20, 0x7B20, 0x0B48, 0x7B22, 0x7B22, 0x1FD2,
+    0x7B23, 0x7B23, 0x1FDF, 0x7B24, 0x7B24, 0x1FD3, 0x7B25, 0x7B25, 0x1FD0,
+    0x7B26, 0x7B26, 0x0B4C, 0x7B27, 0x7B27, 0x3B5F, 0x7B28, 0x7B28, 0x0B49,
+    0x7B29, 0x7B29, 0x3748, 0x7B2A, 0x7B2A, 0x1FD6, 0x7B2B, 0x7B2B, 0x1FD9,
+    0x7B2C, 0x7B2C, 0x0B4B, 0x7B2D, 0x7B2D, 0x1FDA, 0x7B2E, 0x7B2E, 0x0B4F,
+    0x7B2F, 0x7B2F, 0x1FDB, 0x7B30, 0x7B30, 0x1FD1, 0x7B31, 0x7B31, 0x1FD8,
+    0x7B32, 0x7B32, 0x1FDC, 0x7B33, 0x7B33, 0x1FD4, 0x7B34, 0x7B34, 0x1FCF,
+    0x7B35, 0x7B35, 0x1FCD, 0x7B38, 0x7B38, 0x1FDD, 0x7B39, 0x7B39, 0x3D6E,
+    0x7B3B, 0x7B3B, 0x1FCE, 0x7B40, 0x7B40, 0x2259, 0x7B42, 0x7B42, 0x3DED,
+    0x7B43, 0x7B43, 0x3E25, 0x7B44, 0x7B44, 0x2255, 0x7B45, 0x7B45, 0x225B,
+    0x7B46, 0x7B46, 0x0D05, 0x7B47, 0x7B47, 0x2254, 0x7B48, 0x7B48, 0x2256,
+    0x7B49, 0x7B49, 0x0D03, 0x7B4A, 0x7B4A, 0x2253, 0x7B4B, 0x7B4B, 0x0D0A,
+    0x7B4C, 0x7B4C, 0x2257, 0x7B4D, 0x7B4D, 0x0D09, 0x7B4E, 0x7B4E, 0x2258,
+    0x7B4F, 0x7B4F, 0x0D0B, 0x7B50, 0x7B50, 0x0D06, 0x7B51, 0x7B51, 0x0D0C,
+    0x7B52, 0x7B52, 0x0D07, 0x7B54, 0x7B54, 0x0D08, 0x7B55, 0x7B55, 0x3747,
+    0x7B56, 0x7B56, 0x0D04, 0x7B58, 0x7B58, 0x225A, 0x7B60, 0x7B60, 0x0EB8,
+    0x7B61, 0x7B61, 0x24F8, 0x7B62, 0x7B62, 0x4727, 0x7B63, 0x7B63, 0x24FB,
+    0x7B64, 0x7B64, 0x24EF, 0x7B65, 0x7B65, 0x24F4, 0x7B66, 0x7B66, 0x24EE,
+    0x7B67, 0x7B67, 0x0EBA, 0x7B69, 0x7B69, 0x24F2, 0x7B6C, 0x7B6C, 0x4728,
+    0x7B6D, 0x7B6D, 0x24F0, 0x7B6E, 0x7B6E, 0x0EB9, 0x7B6F, 0x7B6F, 0x374C,
+    0x7B70, 0x7B70, 0x24F7, 0x7B71, 0x7B71, 0x24F6, 0x7B72, 0x7B72, 0x24F3,
+    0x7B73, 0x7B73, 0x24F5, 0x7B74, 0x7B74, 0x24F1, 0x7B75, 0x7B75, 0x1050,
+    0x7B76, 0x7B76, 0x24FA, 0x7B77, 0x7B77, 0x0EB6, 0x7B78, 0x7B78, 0x24F9,
+    0x7B7B, 0x7B7B, 0x4729, 0x7B82, 0x7B82, 0x2779, 0x7B84, 0x7B84, 0x1057,
+    0x7B85, 0x7B85, 0x2774, 0x7B87, 0x7B87, 0x1056, 0x7B88, 0x7B88, 0x276A,
+    0x7B8A, 0x7B8A, 0x276C, 0x7B8B, 0x7B8B, 0x104F, 0x7B8C, 0x7B8C, 0x2771,
+    0x7B8D, 0x7B8D, 0x2770, 0x7B8E, 0x7B8E, 0x2773, 0x7B8F, 0x7B8F, 0x1054,
+    0x7B90, 0x7B90, 0x276E, 0x7B91, 0x7B91, 0x276D, 0x7B92, 0x7B92, 0x3752,
+    0x7B94, 0x7B94, 0x1053, 0x7B95, 0x7B95, 0x104E, 0x7B96, 0x7B96, 0x276F,
+    0x7B97, 0x7B97, 0x1051, 0x7B98, 0x7B98, 0x2775, 0x7B99, 0x7B99, 0x2777,
+    0x7B9B, 0x7B9B, 0x2772, 0x7B9C, 0x7B9C, 0x276B, 0x7B9D, 0x7B9D, 0x1052,
+    0x7BA0, 0x7BA0, 0x11D2, 0x7BA1, 0x7BA1, 0x104D, 0x7BA2, 0x7BA2, 0x374B,
+    0x7BA3, 0x7BA3, 0x3F14, 0x7BA4, 0x7BA4, 0x2778, 0x7BAC, 0x7BAC, 0x29AA,
+    0x7BAD, 0x7BAD, 0x11CB, 0x7BAF, 0x7BAF, 0x29AC, 0x7BB1, 0x7BB1, 0x11CC,
+    0x7BB2, 0x7BB2, 0x461C, 0x7BB4, 0x7BB4, 0x11CE, 0x7BB5, 0x7BB5, 0x29AF,
+    0x7BB7, 0x7BB7, 0x29A7, 0x7BB8, 0x7BB8, 0x1055, 0x7BB9, 0x7BB9, 0x29AD,
+    0x7BBE, 0x7BBE, 0x29A9, 0x7BC0, 0x7BC0, 0x0EB7, 0x7BC1, 0x7BC1, 0x11D1,
+    0x7BC4, 0x7BC4, 0x11CD, 0x7BC6, 0x7BC7, 0x11CF, 0x7BC9, 0x7BC9, 0x1318,
+    0x7BCA, 0x7BCA, 0x29AE, 0x7BCB, 0x7BCB, 0x29A8, 0x7BCC, 0x7BCC, 0x11D3,
+    0x7BCE, 0x7BCE, 0x29AB, 0x7BCF, 0x7BCF, 0x3F18, 0x7BD0, 0x7BD0, 0x3750,
+    0x7BD4, 0x7BD4, 0x2C07, 0x7BD5, 0x7BD5, 0x2C02, 0x7BD8, 0x7BD8, 0x2C0C,
+    0x7BD9, 0x7BD9, 0x1316, 0x7BDA, 0x7BDA, 0x2C04, 0x7BDB, 0x7BDB, 0x131A,
+    0x7BDC, 0x7BDC, 0x2C0A, 0x7BDD, 0x7BDD, 0x2C01, 0x7BDE, 0x7BDE, 0x2BFE,
+    0x7BDF, 0x7BDF, 0x2C0D, 0x7BE0, 0x7BE0, 0x142D, 0x7BE1, 0x7BE1, 0x131B,
+    0x7BE2, 0x7BE2, 0x2C09, 0x7BE3, 0x7BE3, 0x2BFF, 0x7BE4, 0x7BE4, 0x1319,
+    0x7BE5, 0x7BE5, 0x2C03, 0x7BE6, 0x7BE6, 0x131D, 0x7BE7, 0x7BE7, 0x2C00,
+    0x7BE8, 0x7BE8, 0x2C05, 0x7BE9, 0x7BE9, 0x131C, 0x7BEA, 0x7BEA, 0x2C08,
+    0x7BEB, 0x7BEB, 0x2C0B, 0x7BF0, 0x7BF1, 0x2DE9, 0x7BF2, 0x7BF2, 0x2DDA,
+    0x7BF3, 0x7BF3, 0x2DE1, 0x7BF4, 0x7BF4, 0x2DDF, 0x7BF7, 0x7BF7, 0x142B,
+    0x7BF8, 0x7BF8, 0x2DE6, 0x7BF9, 0x7BF9, 0x2C06, 0x7BFA, 0x7BFA, 0x3757,
+    0x7BFB, 0x7BFB, 0x2DDD, 0x7BFC, 0x7BFC, 0x3F1F, 0x7BFD, 0x7BFD, 0x2DE7,
+    0x7BFE, 0x7BFE, 0x142A, 0x7BFF, 0x7BFF, 0x2DDC, 0x7C00, 0x7C00, 0x2DDB,
+    0x7C01, 0x7C01, 0x2DE5, 0x7C02, 0x7C02, 0x2DE2, 0x7C03, 0x7C03, 0x2DE4,
+    0x7C05, 0x7C05, 0x2DD8, 0x7C06, 0x7C06, 0x2DE8, 0x7C07, 0x7C07, 0x1428,
+    0x7C09, 0x7C09, 0x2DE3, 0x7C0A, 0x7C0A, 0x2DEC, 0x7C0B, 0x7C0B, 0x2DE0,
+    0x7C0C, 0x7C0C, 0x142C, 0x7C0D, 0x7C0D, 0x1429, 0x7C0E, 0x7C0E, 0x2DDE,
+    0x7C0F, 0x7C0F, 0x2DD9, 0x7C10, 0x7C10, 0x2DEB, 0x7C11, 0x7C11, 0x1317,
+    0x7C12, 0x7C12, 0x472A, 0x7C15, 0x7C15, 0x4061, 0x7C19, 0x7C19, 0x2F78,
+    0x7C1B, 0x7C1B, 0x43D9, 0x7C1C, 0x7C1C, 0x2F76, 0x7C1D, 0x7C1D, 0x2F7C,
+    0x7C1E, 0x7C1E, 0x1508, 0x7C1F, 0x7C1F, 0x2F7A, 0x7C20, 0x7C20, 0x2F79,
+    0x7C21, 0x7C21, 0x150A, 0x7C22, 0x7C22, 0x2F7F, 0x7C23, 0x7C23, 0x1509,
+    0x7C25, 0x7C25, 0x2F80, 0x7C26, 0x7C26, 0x2F7D, 0x7C27, 0x7C27, 0x1506,
+    0x7C28, 0x7C28, 0x2F7E, 0x7C29, 0x7C29, 0x2F77, 0x7C2A, 0x7C2A, 0x1507,
+    0x7C2B, 0x7C2B, 0x1505, 0x7C2C, 0x7C2C, 0x30D6, 0x7C2D, 0x7C2D, 0x2F7B,
+    0x7C30, 0x7C30, 0x2F81, 0x7C33, 0x7C33, 0x30D3, 0x7C35, 0x7C35, 0x3759,
+    0x7C37, 0x7C37, 0x15A7, 0x7C38, 0x7C38, 0x15A5, 0x7C39, 0x7C39, 0x30D5,
+    0x7C3B, 0x7C3B, 0x30D7, 0x7C3C, 0x7C3C, 0x30D4, 0x7C3D, 0x7C3D, 0x15A6,
+    0x7C3E, 0x7C3F, 0x15A3, 0x7C40, 0x7C40, 0x15A8, 0x7C42, 0x7C42, 0x3F1C,
+    0x7C43, 0x7C43, 0x162B, 0x7C44, 0x7C44, 0x375B, 0x7C45, 0x7C45, 0x3212,
+    0x7C47, 0x7C47, 0x3211, 0x7C48, 0x7C48, 0x320F, 0x7C49, 0x7C49, 0x320E,
+    0x7C4A, 0x7C4A, 0x3210, 0x7C4C, 0x7C4C, 0x162A, 0x7C4D, 0x7C4D, 0x162C,
+    0x7C50, 0x7C50, 0x1681, 0x7C51, 0x7C51, 0x3FB8, 0x7C53, 0x7C53, 0x32EA,
+    0x7C54, 0x7C54, 0x32E9, 0x7C56, 0x7C56, 0x3EFF, 0x7C57, 0x7C57, 0x339B,
+    0x7C59, 0x7C59, 0x339D, 0x7C5A, 0x7C5A, 0x339F, 0x7C5B, 0x7C5B, 0x339E,
+    0x7C5C, 0x7C5C, 0x339C, 0x7C5D, 0x7C5D, 0x3B3F, 0x7C5F, 0x7C5F, 0x16D1,
+    0x7C60, 0x7C60, 0x16D0, 0x7C63, 0x7C63, 0x1701, 0x7C64, 0x7C64, 0x1700,
+    0x7C65, 0x7C65, 0x1702, 0x7C66, 0x7C66, 0x342B, 0x7C67, 0x7C67, 0x342A,
+    0x7C69, 0x7C69, 0x34D6, 0x7C6A, 0x7C6A, 0x3493, 0x7C6B, 0x7C6B, 0x34D7,
+    0x7C6C, 0x7C6C, 0x1745, 0x7C6D, 0x7C6D, 0x3B40, 0x7C6E, 0x7C6E, 0x1746,
+    0x7C6F, 0x7C6F, 0x3507, 0x7C70, 0x7C70, 0x3F52, 0x7C72, 0x7C72, 0x176B,
+    0x7C73, 0x7C73, 0x03F7, 0x7C74, 0x7C74, 0x469C, 0x7C75, 0x7C75, 0x1A25,
+    0x7C78, 0x7C79, 0x1BBB, 0x7C7A, 0x7C7A, 0x1BBA, 0x7C7B, 0x7C7B, 0x472D,
+    0x7C7C, 0x7C7C, 0x3B49, 0x7C7D, 0x7C7D, 0x07CC, 0x7C7E, 0x7C7E, 0x3F1A,
+    0x7C7F, 0x7C81, 0x1BBD, 0x7C83, 0x7C83, 0x375C, 0x7C84, 0x7C84, 0x1D96,
+    0x7C85, 0x7C85, 0x1D9C, 0x7C86, 0x7C86, 0x3F1D, 0x7C88, 0x7C88, 0x1D9A,
+    0x7C89, 0x7C89, 0x096A, 0x7C8A, 0x7C8A, 0x1D98, 0x7C8C, 0x7C8C, 0x1D99,
+    0x7C8D, 0x7C8D, 0x1D9B, 0x7C8E, 0x7C8E, 0x3B48, 0x7C91, 0x7C91, 0x1D97,
+    0x7C92, 0x7C92, 0x0B50, 0x7C94, 0x7C94, 0x1FE0, 0x7C95, 0x7C95, 0x0B52,
+    0x7C96, 0x7C96, 0x1FE2, 0x7C97, 0x7C97, 0x0B51, 0x7C98, 0x7C98, 0x1FE1,
+    0x7C9C, 0x7C9C, 0x472E, 0x7C9E, 0x7C9E, 0x225D, 0x7C9F, 0x7C9F, 0x0D0D,
+    0x7CA1, 0x7CA1, 0x225F, 0x7CA2, 0x7CA2, 0x225C, 0x7CA3, 0x7CA3, 0x1FE3,
+    0x7CA5, 0x7CA5, 0x0D0E, 0x7CA6, 0x7CA6, 0x375E, 0x7CA7, 0x7CA7, 0x36ED,
+    0x7CA8, 0x7CA8, 0x225E, 0x7CAC, 0x7CAC, 0x3885, 0x7CAE, 0x7CAE, 0x3B4A,
+    0x7CAF, 0x7CAF, 0x24FE, 0x7CB1, 0x7CB1, 0x0EBB, 0x7CB2, 0x7CB2, 0x24FC,
+    0x7CB3, 0x7CB3, 0x0EBC, 0x7CB4, 0x7CB4, 0x24FD, 0x7CB5, 0x7CB5, 0x0EBD,
+    0x7CB8, 0x7CB8, 0x4730, 0x7CB9, 0x7CB9, 0x1058, 0x7CBA, 0x7CBA, 0x277D,
+    0x7CBB, 0x7CBB, 0x277A, 0x7CBC, 0x7CBC, 0x277C, 0x7CBD, 0x7CBE, 0x1059,
+    0x7CBF, 0x7CBF, 0x277B, 0x7CC2, 0x7CC2, 0x3FD7, 0x7CC5, 0x7CC5, 0x29B0,
+    0x7CC7, 0x7CC7, 0x3761, 0x7CC8, 0x7CC8, 0x29B1, 0x7CC9, 0x7CC9, 0x3760,
+    0x7CCA, 0x7CCA, 0x11D4, 0x7CCB, 0x7CCB, 0x29B3, 0x7CCC, 0x7CCC, 0x29B2,
+    0x7CCD, 0x7CCD, 0x3B45, 0x7CCE, 0x7CCE, 0x0121, 0x7CD0, 0x7CD1, 0x2C11,
+    0x7CD2, 0x7CD2, 0x2C0E, 0x7CD3, 0x7CD3, 0x3D5C, 0x7CD4, 0x7CD4, 0x2C0F,
+    0x7CD5, 0x7CD6, 0x131E, 0x7CD7, 0x7CD7, 0x2C10, 0x7CD9, 0x7CD9, 0x1433,
+    0x7CDA, 0x7CDA, 0x3FD9, 0x7CDC, 0x7CDC, 0x142F, 0x7CDD, 0x7CDD, 0x1434,
+    0x7CDE, 0x7CDE, 0x1430, 0x7CDF, 0x7CDF, 0x1432, 0x7CE0, 0x7CE0, 0x142E,
+    0x7CE2, 0x7CE2, 0x1431, 0x7CE6, 0x7CE6, 0x3762, 0x7CE7, 0x7CE7, 0x150B,
+    0x7CE8, 0x7CE8, 0x2DED, 0x7CEA, 0x7CEA, 0x30D9, 0x7CEC, 0x7CEC, 0x30D8,
+    0x7CED, 0x7CED, 0x43DA, 0x7CEE, 0x7CEE, 0x3213, 0x7CEF, 0x7CF0, 0x162D,
+    0x7CF1, 0x7CF1, 0x33A1, 0x7CF2, 0x7CF2, 0x32EB, 0x7CF3, 0x7CF3, 0x3764,
+    0x7CF4, 0x7CF4, 0x33A0, 0x7CF5, 0x7CF5, 0x3765, 0x7CF6, 0x7CF6, 0x34D8,
+    0x7CF7, 0x7CF7, 0x351D, 0x7CF8, 0x7CF8, 0x03F8, 0x7CF9, 0x7CF9, 0x44F8,
+    0x7CFB, 0x7CFB, 0x04FB, 0x7CFC, 0x7CFC, 0x456D, 0x7CFD, 0x7CFD, 0x1A26,
+    0x7CFE, 0x7CFE, 0x0667, 0x7D00, 0x7D00, 0x07CF, 0x7D01, 0x7D01, 0x1BC2,
+    0x7D02, 0x7D02, 0x07CD, 0x7D03, 0x7D03, 0x1BC0, 0x7D04, 0x7D04, 0x07D2,
+    0x7D05, 0x7D05, 0x07CE, 0x7D06, 0x7D06, 0x07D3, 0x7D07, 0x7D07, 0x07D1,
+    0x7D08, 0x7D08, 0x1BC1, 0x7D09, 0x7D09, 0x07D0, 0x7D0A, 0x7D0A, 0x096E,
+    0x7D0B, 0x7D0B, 0x096D, 0x7D0C, 0x7D0C, 0x1DA7, 0x7D0D, 0x7D0D, 0x0976,
+    0x7D0E, 0x7D0E, 0x1DA0, 0x7D0F, 0x7D0F, 0x1DA6, 0x7D10, 0x7D10, 0x0972,
+    0x7D11, 0x7D11, 0x1D9F, 0x7D12, 0x7D12, 0x1DA5, 0x7D13, 0x7D13, 0x1DA3,
+    0x7D14, 0x7D14, 0x0971, 0x7D15, 0x7D15, 0x0973, 0x7D16, 0x7D16, 0x1DA2,
+    0x7D17, 0x7D17, 0x096C, 0x7D18, 0x7D18, 0x1DA1, 0x7D19, 0x7D19, 0x0977,
+    0x7D1A, 0x7D1A, 0x0974, 0x7D1B, 0x7D1B, 0x0978, 0x7D1C, 0x7D1C, 0x0975,
+    0x7D1D, 0x7D1D, 0x1D9E, 0x7D1E, 0x7D1E, 0x1D9D, 0x7D1F, 0x7D1F, 0x1DA4,
+    0x7D20, 0x7D20, 0x096F, 0x7D21, 0x7D21, 0x096B, 0x7D22, 0x7D22, 0x0970,
+    0x7D25, 0x7D25, 0x3EDE, 0x7D28, 0x7D28, 0x1FF2, 0x7D29, 0x7D29, 0x1FEB,
+    0x7D2B, 0x7D2B, 0x0D13, 0x7D2C, 0x7D2C, 0x1FEA, 0x7D2E, 0x7D2E, 0x0B56,
+    0x7D2F, 0x7D2F, 0x0B5D, 0x7D30, 0x7D30, 0x0B5A, 0x7D31, 0x7D31, 0x0B60,
+    0x7D32, 0x7D32, 0x0B5F, 0x7D33, 0x7D33, 0x0B5B, 0x7D35, 0x7D35, 0x1FE4,
+    0x7D36, 0x7D36, 0x1FE7, 0x7D38, 0x7D38, 0x1FE6, 0x7D39, 0x7D39, 0x0B57,
+    0x7D3A, 0x7D3A, 0x1FE8, 0x7D3B, 0x7D3B, 0x1FF1, 0x7D3C, 0x7D3C, 0x0B58,
+    0x7D3D, 0x7D3D, 0x1FE5, 0x7D3E, 0x7D3F, 0x1FEE, 0x7D40, 0x7D40, 0x0B59,
+    0x7D41, 0x7D41, 0x1FEC, 0x7D42, 0x7D42, 0x0B5E, 0x7D43, 0x7D43, 0x0B54,
+    0x7D44, 0x7D44, 0x0B5C, 0x7D45, 0x7D45, 0x1FE9, 0x7D46, 0x7D46, 0x0B53,
+    0x7D47, 0x7D47, 0x1FED, 0x7D4A, 0x7D4A, 0x1FF0, 0x7D4D, 0x7D4D, 0x3FDD,
+    0x7D4E, 0x7D4E, 0x2270, 0x7D4F, 0x7D4F, 0x2267, 0x7D50, 0x7D50, 0x0D10,
+    0x7D51, 0x7D51, 0x226E, 0x7D52, 0x7D52, 0x226B, 0x7D53, 0x7D53, 0x2263,
+    0x7D54, 0x7D54, 0x226C, 0x7D55, 0x7D55, 0x0D12, 0x7D56, 0x7D56, 0x2264,
+    0x7D58, 0x7D58, 0x2260, 0x7D5A, 0x7D5A, 0x3E93, 0x7D5B, 0x7D5B, 0x0EC3,
+    0x7D5C, 0x7D5C, 0x2269, 0x7D5D, 0x7D5D, 0x3769, 0x7D5E, 0x7D5E, 0x0D0F,
+    0x7D5F, 0x7D5F, 0x226F, 0x7D61, 0x7D61, 0x0D16, 0x7D62, 0x7D62, 0x0D18,
+    0x7D63, 0x7D63, 0x2262, 0x7D66, 0x7D66, 0x0D17, 0x7D67, 0x7D67, 0x2265,
+    0x7D68, 0x7D68, 0x0D11, 0x7D69, 0x7D69, 0x226D, 0x7D6A, 0x7D6A, 0x2266,
+    0x7D6B, 0x7D6B, 0x226A, 0x7D6D, 0x7D6D, 0x2268, 0x7D6E, 0x7D6E, 0x0D14,
+    0x7D6F, 0x7D6F, 0x2261, 0x7D70, 0x7D70, 0x0D19, 0x7D71, 0x7D71, 0x0B55,
+    0x7D72, 0x7D72, 0x0D15, 0x7D73, 0x7D73, 0x0D1A, 0x7D79, 0x7D79, 0x0EBF,
+    0x7D7A, 0x7D7A, 0x2505, 0x7D7B, 0x7D7B, 0x2507, 0x7D7C, 0x7D7C, 0x2509,
+    0x7D7D, 0x7D7D, 0x250D, 0x7D7F, 0x7D7F, 0x2503, 0x7D80, 0x7D80, 0x2501,
+    0x7D81, 0x7D81, 0x0EC1, 0x7D83, 0x7D83, 0x2508, 0x7D84, 0x7D84, 0x250C,
+    0x7D85, 0x7D85, 0x2504, 0x7D86, 0x7D86, 0x2500, 0x7D88, 0x7D88, 0x24FF,
+    0x7D89, 0x7D89, 0x376B, 0x7D8C, 0x7D8C, 0x250A, 0x7D8D, 0x7D8D, 0x2502,
+    0x7D8E, 0x7D8E, 0x2506, 0x7D8F, 0x7D8F, 0x0EC2, 0x7D91, 0x7D91, 0x0EC0,
+    0x7D92, 0x7D92, 0x250E, 0x7D93, 0x7D93, 0x0EBE, 0x7D94, 0x7D94, 0x250B,
+    0x7D96, 0x7D96, 0x278E, 0x7D97, 0x7D97, 0x3B53, 0x7D9C, 0x7D9C, 0x105D,
+    0x7D9D, 0x7D9D, 0x2786, 0x7D9E, 0x7D9E, 0x11E1, 0x7D9F, 0x7D9F, 0x2790,
+    0x7DA0, 0x7DA0, 0x1060, 0x7DA1, 0x7DA1, 0x2794, 0x7DA2, 0x7DA2, 0x1066,
+    0x7DA3, 0x7DA3, 0x2781, 0x7DA4, 0x7DA4, 0x46D7, 0x7DA6, 0x7DA6, 0x2791,
+    0x7DA7, 0x7DA7, 0x277E, 0x7DA8, 0x7DA8, 0x3C9C, 0x7DA9, 0x7DA9, 0x2793,
+    0x7DAA, 0x7DAA, 0x2782, 0x7DAB, 0x7DAB, 0x376C, 0x7DAC, 0x7DAC, 0x106D,
+    0x7DAD, 0x7DAD, 0x106A, 0x7DAE, 0x7DAE, 0x2792, 0x7DAF, 0x7DAF, 0x278C,
+    0x7DB0, 0x7DB0, 0x105C, 0x7DB1, 0x7DB1, 0x1064, 0x7DB2, 0x7DB2, 0x1063,
+    0x7DB3, 0x7DB3, 0x376E, 0x7DB4, 0x7DB4, 0x1062, 0x7DB5, 0x7DB5, 0x1068,
+    0x7DB7, 0x7DB7, 0x277F, 0x7DB8, 0x7DB8, 0x1069, 0x7DB9, 0x7DB9, 0x278D,
+    0x7DBA, 0x7DBA, 0x1065, 0x7DBB, 0x7DBB, 0x105B, 0x7DBC, 0x7DBC, 0x278F,
+    0x7DBD, 0x7DBE, 0x105E, 0x7DBF, 0x7DBF, 0x1067, 0x7DC0, 0x7DC0, 0x2784,
+    0x7DC1, 0x7DC1, 0x2783, 0x7DC2, 0x7DC2, 0x2780, 0x7DC4, 0x7DC4, 0x2788,
+    0x7DC5, 0x7DC5, 0x2785, 0x7DC6, 0x7DC6, 0x2789, 0x7DC7, 0x7DC7, 0x106C,
+    0x7DC9, 0x7DC9, 0x2795, 0x7DCA, 0x7DCA, 0x1061, 0x7DCB, 0x7DCC, 0x278A,
+    0x7DCD, 0x7DCD, 0x456E, 0x7DCE, 0x7DCE, 0x2787, 0x7DCF, 0x7DCF, 0x4735,
+    0x7DD0, 0x7DD0, 0x4737, 0x7DD2, 0x7DD2, 0x106B, 0x7DD3, 0x7DD3, 0x3B4E,
+    0x7DD4, 0x7DD4, 0x4736, 0x7DD6, 0x7DD6, 0x376F, 0x7DD7, 0x7DD7, 0x29B8,
+    0x7DD8, 0x7DD8, 0x11D9, 0x7DD9, 0x7DD9, 0x11E2, 0x7DDA, 0x7DDA, 0x11DE,
+    0x7DDB, 0x7DDB, 0x29B5, 0x7DDC, 0x7DDC, 0x3B4C, 0x7DDD, 0x7DDD, 0x11DB,
+    0x7DDE, 0x7DDE, 0x11DF, 0x7DDF, 0x7DDF, 0x29C1, 0x7DE0, 0x7DE0, 0x11D5,
+    0x7DE1, 0x7DE1, 0x29B9, 0x7DE3, 0x7DE3, 0x11DD, 0x7DE4, 0x7DE4, 0x3772,
+    0x7DE5, 0x7DE5, 0x3776, 0x7DE6, 0x7DE6, 0x29BC, 0x7DE7, 0x7DE7, 0x29B7,
+    0x7DE8, 0x7DE8, 0x11DC, 0x7DE9, 0x7DE9, 0x11E0, 0x7DEA, 0x7DEA, 0x29B6,
+    0x7DEC, 0x7DEC, 0x11DA, 0x7DEE, 0x7DEE, 0x29C0, 0x7DEF, 0x7DEF, 0x11D7,
+    0x7DF0, 0x7DF0, 0x29BF, 0x7DF1, 0x7DF1, 0x29BE, 0x7DF2, 0x7DF2, 0x11E3,
+    0x7DF3, 0x7DF3, 0x28C8, 0x7DF4, 0x7DF4, 0x11D6, 0x7DF5, 0x7DF5, 0x3774,
+    0x7DF6, 0x7DF6, 0x29BD, 0x7DF7, 0x7DF7, 0x29B4, 0x7DF9, 0x7DF9, 0x11E4,
+    0x7DFA, 0x7DFA, 0x29BB, 0x7DFB, 0x7DFB, 0x11D8, 0x7DFD, 0x7DFD, 0x4738,
+    0x7DFE, 0x7DFE, 0x3CCF, 0x7E03, 0x7E03, 0x29BA, 0x7E07, 0x7E07, 0x3B4D,
+    0x7E08, 0x7E08, 0x1322, 0x7E09, 0x7E09, 0x1327, 0x7E0A, 0x7E0A, 0x1320,
+    0x7E0B, 0x7E0B, 0x2C1F, 0x7E0C, 0x7E0C, 0x2C16, 0x7E0D, 0x7E0D, 0x2C22,
+    0x7E0E, 0x7E0E, 0x2C1A, 0x7E0F, 0x7E0F, 0x2C20, 0x7E10, 0x7E10, 0x1328,
+    0x7E11, 0x7E11, 0x1321, 0x7E12, 0x7E12, 0x2C13, 0x7E13, 0x7E13, 0x2C19,
+    0x7E14, 0x7E14, 0x2C23, 0x7E15, 0x7E15, 0x2C1C, 0x7E16, 0x7E16, 0x2C21,
+    0x7E17, 0x7E17, 0x2C15, 0x7E1A, 0x7E1A, 0x2C1D, 0x7E1B, 0x7E1B, 0x1323,
+    0x7E1C, 0x7E1C, 0x2C1B, 0x7E1D, 0x7E1D, 0x1326, 0x7E1E, 0x7E1E, 0x1325,
+    0x7E1F, 0x7E20, 0x2C17, 0x7E21, 0x7E21, 0x2C14, 0x7E22, 0x7E22, 0x2C1E,
+    0x7E23, 0x7E23, 0x1324, 0x7E24, 0x7E24, 0x2C25, 0x7E25, 0x7E25, 0x2C24,
+    0x7E27, 0x7E27, 0x377F, 0x7E29, 0x7E29, 0x2DF8, 0x7E2A, 0x7E2A, 0x2DF4,
+    0x7E2B, 0x7E2B, 0x143B, 0x7E2D, 0x7E2D, 0x2DEE, 0x7E2E, 0x7E2E, 0x1435,
+    0x7E2F, 0x7E2F, 0x1445, 0x7E30, 0x7E30, 0x2DFA, 0x7E31, 0x7E31, 0x143D,
+    0x7E32, 0x7E32, 0x1439, 0x7E33, 0x7E33, 0x2DF1, 0x7E34, 0x7E34, 0x1440,
+    0x7E35, 0x7E35, 0x1443, 0x7E36, 0x7E36, 0x2DFC, 0x7E37, 0x7E37, 0x1438,
+    0x7E38, 0x7E38, 0x2DF3, 0x7E39, 0x7E39, 0x1441, 0x7E3A, 0x7E3A, 0x2DFE,
+    0x7E3B, 0x7E3B, 0x2DFB, 0x7E3C, 0x7E3C, 0x2DEF, 0x7E3D, 0x7E3D, 0x143C,
+    0x7E3E, 0x7E3E, 0x1436, 0x7E3F, 0x7E3F, 0x1444, 0x7E40, 0x7E40, 0x2DF6,
+    0x7E41, 0x7E41, 0x143F, 0x7E42, 0x7E42, 0x2DF0, 0x7E43, 0x7E43, 0x143A,
+    0x7E44, 0x7E44, 0x2DFD, 0x7E45, 0x7E45, 0x143E, 0x7E46, 0x7E46, 0x1437,
+    0x7E47, 0x7E47, 0x2DF7, 0x7E48, 0x7E48, 0x1442, 0x7E49, 0x7E49, 0x2DF5,
+    0x7E4C, 0x7E4C, 0x2DF9, 0x7E50, 0x7E50, 0x2F83, 0x7E51, 0x7E51, 0x2F89,
+    0x7E52, 0x7E52, 0x1511, 0x7E53, 0x7E53, 0x2F8C, 0x7E54, 0x7E55, 0x150C,
+    0x7E56, 0x7E56, 0x2F84, 0x7E57, 0x7E57, 0x2F8B, 0x7E58, 0x7E58, 0x2F86,
+    0x7E59, 0x7E59, 0x1512, 0x7E5A, 0x7E5A, 0x150F, 0x7E5C, 0x7E5C, 0x2F82,
+    0x7E5E, 0x7E5E, 0x150E, 0x7E5F, 0x7E5F, 0x2F88, 0x7E60, 0x7E60, 0x2F8A,
+    0x7E61, 0x7E61, 0x1510, 0x7E62, 0x7E62, 0x2F87, 0x7E63, 0x7E63, 0x2F85,
+    0x7E65, 0x7E65, 0x46D2, 0x7E67, 0x7E67, 0x3766, 0x7E68, 0x7E68, 0x30E3,
+    0x7E69, 0x7E6A, 0x15AC, 0x7E6B, 0x7E6B, 0x15A9, 0x7E6D, 0x7E6D, 0x15AA,
+    0x7E6E, 0x7E6E, 0x377B, 0x7E6F, 0x7E6F, 0x30DF, 0x7E70, 0x7E70, 0x30DD,
+    0x7E72, 0x7E72, 0x30E1, 0x7E73, 0x7E73, 0x15AE, 0x7E74, 0x7E74, 0x30E2,
+    0x7E75, 0x7E75, 0x30DB, 0x7E76, 0x7E76, 0x30DA, 0x7E77, 0x7E77, 0x30DE,
+    0x7E78, 0x7E78, 0x30DC, 0x7E79, 0x7E79, 0x15AB, 0x7E7A, 0x7E7A, 0x30E0,
+    0x7E7B, 0x7E7B, 0x3214, 0x7E7C, 0x7E7C, 0x1631, 0x7E7D, 0x7E7D, 0x1630,
+    0x7E7E, 0x7E7E, 0x3215, 0x7E7F, 0x7E7F, 0x3E51, 0x7E80, 0x7E80, 0x3217,
+    0x7E81, 0x7E81, 0x3216, 0x7E82, 0x7E82, 0x1632, 0x7E86, 0x7E86, 0x32F0,
+    0x7E87, 0x7E88, 0x32ED, 0x7E8A, 0x7E8A, 0x32EC, 0x7E8B, 0x7E8B, 0x32EF,
+    0x7E8C, 0x7E8C, 0x1683, 0x7E8D, 0x7E8D, 0x32F1, 0x7E8E, 0x7E8E, 0x3EC9,
+    0x7E8F, 0x7E8F, 0x1682, 0x7E91, 0x7E91, 0x33A2, 0x7E92, 0x7E92, 0x469E,
+    0x7E93, 0x7E93, 0x1703, 0x7E94, 0x7E94, 0x1705, 0x7E95, 0x7E95, 0x342C,
+    0x7E96, 0x7E96, 0x1704, 0x7E97, 0x7E97, 0x3494, 0x7E98, 0x7E98, 0x34DA,
+    0x7E99, 0x7E99, 0x34DC, 0x7E9A, 0x7E9A, 0x34D9, 0x7E9B, 0x7E9B, 0x34DB,
+    0x7E9C, 0x7E9C, 0x1759, 0x7E9F, 0x7E9F, 0x48BB, 0x7EA4, 0x7EA4, 0x455B,
+    0x7EAC, 0x7EAC, 0x455C, 0x7EBA, 0x7EBA, 0x455D, 0x7EC7, 0x7EC7, 0x455E,
+    0x7ECF, 0x7ECF, 0x455F, 0x7EDF, 0x7EDF, 0x4560, 0x7F06, 0x7F06, 0x4561,
+    0x7F36, 0x7F36, 0x03F9, 0x7F37, 0x7F37, 0x4562, 0x7F38, 0x7F38, 0x07D4,
+    0x7F39, 0x7F39, 0x1D1F, 0x7F3A, 0x7F3A, 0x0979, 0x7F3D, 0x7F3D, 0x0B61,
+    0x7F3E, 0x7F3F, 0x2271, 0x7F40, 0x7F41, 0x3780, 0x7F43, 0x7F43, 0x2C26,
+    0x7F44, 0x7F44, 0x1446, 0x7F45, 0x7F45, 0x2DFF, 0x7F47, 0x7F47, 0x3782,
+    0x7F48, 0x7F48, 0x1513, 0x7F49, 0x7F49, 0x3E69, 0x7F4A, 0x7F4A, 0x30E5,
+    0x7F4B, 0x7F4B, 0x30E4, 0x7F4C, 0x7F4C, 0x1633, 0x7F4D, 0x7F4D, 0x32F2,
+    0x7F4E, 0x7F4E, 0x3B4F, 0x7F4F, 0x7F4F, 0x33A3, 0x7F50, 0x7F50, 0x1726,
+    0x7F51, 0x7F51, 0x1812, 0x7F52, 0x7F52, 0x44F6, 0x7F53, 0x7F53, 0x44F9,
+    0x7F54, 0x7F54, 0x0668, 0x7F55, 0x7F55, 0x04FC, 0x7F58, 0x7F58, 0x1BC3,
+    0x7F5B, 0x7F5B, 0x1DAD, 0x7F5C, 0x7F5C, 0x1DA8, 0x7F5D, 0x7F5D, 0x1DAC,
+    0x7F5E, 0x7F5E, 0x1DAA, 0x7F5F, 0x7F5F, 0x097A, 0x7F60, 0x7F60, 0x1DAB,
+    0x7F61, 0x7F61, 0x1DA9, 0x7F63, 0x7F63, 0x1FF3, 0x7F65, 0x7F66, 0x2273,
+    0x7F67, 0x7F68, 0x2511, 0x7F69, 0x7F6A, 0x0EC5, 0x7F6B, 0x7F6B, 0x2510,
+    0x7F6C, 0x7F6C, 0x2513, 0x7F6D, 0x7F6D, 0x250F, 0x7F6E, 0x7F6E, 0x0EC4,
+    0x7F70, 0x7F70, 0x106E, 0x7F71, 0x7F71, 0x4007, 0x7F72, 0x7F72, 0x0EC7,
+    0x7F73, 0x7F73, 0x2796, 0x7F75, 0x7F75, 0x11E5, 0x7F76, 0x7F76, 0x29C2,
+    0x7F77, 0x7F77, 0x11E6, 0x7F78, 0x7F78, 0x3F7B, 0x7F79, 0x7F79, 0x1329,
+    0x7F7A, 0x7F7A, 0x2C29, 0x7F7B, 0x7F7C, 0x2C27, 0x7F7D, 0x7F7D, 0x2E02,
+    0x7F7E, 0x7F7E, 0x2E01, 0x7F7F, 0x7F7F, 0x2E00, 0x7F83, 0x7F83, 0x30E6,
+    0x7F85, 0x7F85, 0x15AF, 0x7F86, 0x7F86, 0x30E7, 0x7F87, 0x7F87, 0x33A4,
+    0x7F88, 0x7F88, 0x1727, 0x7F89, 0x7F89, 0x3495, 0x7F8A, 0x7F8A, 0x03FA,
+    0x7F8B, 0x7F8B, 0x066A, 0x7F8C, 0x7F8C, 0x0669, 0x7F8D, 0x7F8D, 0x1BC5,
+    0x7F8E, 0x7F8E, 0x07D5, 0x7F8F, 0x7F8F, 0x421C, 0x7F91, 0x7F91, 0x1BC4,
+    0x7F92, 0x7F92, 0x1DAF, 0x7F93, 0x7F93, 0x43DB, 0x7F94, 0x7F94, 0x097B,
+    0x7F95, 0x7F95, 0x1FF4, 0x7F96, 0x7F96, 0x1DAE, 0x7F97, 0x7F97, 0x3786,
+    0x7F9A, 0x7F9A, 0x0B63, 0x7F9B, 0x7F9B, 0x1FF7, 0x7F9C, 0x7F9D, 0x1FF5,
+    0x7F9E, 0x7F9E, 0x0B62, 0x7FA0, 0x7FA1, 0x2276, 0x7FA2, 0x7FA2, 0x2275,
+    0x7FA3, 0x7FA3, 0x3788, 0x7FA4, 0x7FA4, 0x0ECA, 0x7FA5, 0x7FA5, 0x2515,
+    0x7FA6, 0x7FA6, 0x2514, 0x7FA7, 0x7FA7, 0x2516, 0x7FA8, 0x7FA8, 0x0EC9,
+    0x7FA9, 0x7FA9, 0x0EC8, 0x7FAC, 0x7FAC, 0x29C3, 0x7FAD, 0x7FAD, 0x29C5,
+    0x7FAE, 0x7FAE, 0x43DC, 0x7FAF, 0x7FAF, 0x11E7, 0x7FB0, 0x7FB0, 0x29C4,
+    0x7FB1, 0x7FB1, 0x2C2A, 0x7FB2, 0x7FB2, 0x132A, 0x7FB3, 0x7FB3, 0x2F8E,
+    0x7FB4, 0x7FB4, 0x4739, 0x7FB5, 0x7FB5, 0x2F8D, 0x7FB6, 0x7FB6, 0x15B0,
+    0x7FB7, 0x7FB7, 0x30E8, 0x7FB8, 0x7FB8, 0x15B2, 0x7FB9, 0x7FB9, 0x15B1,
+    0x7FBA, 0x7FBA, 0x3218, 0x7FBB, 0x7FBB, 0x32F3, 0x7FBC, 0x7FBC, 0x1684,
+    0x7FBD, 0x7FBD, 0x03FB, 0x7FBE, 0x7FBE, 0x1BC6, 0x7FBF, 0x7FBF, 0x07D6,
+    0x7FC0, 0x7FC0, 0x1DB2, 0x7FC1, 0x7FC1, 0x097D, 0x7FC2, 0x7FC2, 0x1DB1,
+    0x7FC3, 0x7FC3, 0x1DB0, 0x7FC5, 0x7FC5, 0x097C, 0x7FC7, 0x7FC7, 0x1FFD,
+    0x7FC9, 0x7FC9, 0x1FFF, 0x7FCA, 0x7FCB, 0x1FF8, 0x7FCC, 0x7FCC, 0x0B64,
+    0x7FCD, 0x7FCD, 0x1FFA, 0x7FCE, 0x7FCE, 0x0B65, 0x7FCF, 0x7FCF, 0x1FFE,
+    0x7FD0, 0x7FD1, 0x1FFB, 0x7FD2, 0x7FD2, 0x0B66, 0x7FD4, 0x7FD5, 0x0D1C,
+    0x7FD7, 0x7FD7, 0x2278, 0x7FDB, 0x7FDC, 0x2517, 0x7FDD, 0x7FDD, 0x3B5E,
+    0x7FDE, 0x7FDE, 0x279A, 0x7FDF, 0x7FDF, 0x1071, 0x7FE0, 0x7FE1, 0x106F,
+    0x7FE2, 0x7FE3, 0x2797, 0x7FE5, 0x7FE5, 0x2799, 0x7FE6, 0x7FE6, 0x29CA,
+    0x7FE7, 0x7FE7, 0x46E9, 0x7FE8, 0x7FE8, 0x29CB, 0x7FE9, 0x7FE9, 0x11E8,
+    0x7FEA, 0x7FEA, 0x29C8, 0x7FEB, 0x7FEB, 0x29C7, 0x7FEC, 0x7FEC, 0x29C9,
+    0x7FED, 0x7FED, 0x29C6, 0x7FEE, 0x7FEE, 0x132D, 0x7FEF, 0x7FEF, 0x2C2B,
+    0x7FF0, 0x7FF1, 0x132B, 0x7FF2, 0x7FF2, 0x2E04, 0x7FF3, 0x7FF3, 0x1447,
+    0x7FF4, 0x7FF4, 0x2E03, 0x7FF5, 0x7FF5, 0x2EFF, 0x7FF7, 0x7FF8, 0x2F8F,
+    0x7FF9, 0x7FF9, 0x1514, 0x7FFA, 0x7FFA, 0x378E, 0x7FFB, 0x7FFB, 0x1515,
+    0x7FFC, 0x7FFC, 0x1448, 0x7FFD, 0x7FFE, 0x30E9, 0x7FFF, 0x7FFF, 0x3219,
+    0x8000, 0x8000, 0x1634, 0x8001, 0x8001, 0x03FC, 0x8002, 0x8002, 0x44FD,
+    0x8003, 0x8003, 0x03FD, 0x8004, 0x8004, 0x097F, 0x8005, 0x8005, 0x066B,
+    0x8006, 0x8006, 0x097E, 0x8007, 0x8007, 0x1BC7, 0x8008, 0x8008, 0x3791,
+    0x800B, 0x800B, 0x0D1E, 0x800C, 0x800C, 0x03FE, 0x800D, 0x800D, 0x07D8,
+    0x800E, 0x800F, 0x1BC8, 0x8010, 0x8010, 0x07D7, 0x8011, 0x8011, 0x07D9,
+    0x8012, 0x8012, 0x03FF, 0x8014, 0x8014, 0x1BCA, 0x8015, 0x8015, 0x0981,
+    0x8016, 0x8016, 0x1DB3, 0x8017, 0x8017, 0x0983, 0x8018, 0x8018, 0x0980,
+    0x8019, 0x8019, 0x0982, 0x801B, 0x801B, 0x2002, 0x801C, 0x801C, 0x0B67,
+    0x801D, 0x801D, 0x3792, 0x801E, 0x801E, 0x2001, 0x801F, 0x801F, 0x2000,
+    0x8020, 0x8020, 0x473C, 0x8021, 0x8021, 0x2519, 0x8024, 0x8024, 0x279B,
+    0x8025, 0x8025, 0x473D, 0x8026, 0x8026, 0x11E9, 0x8028, 0x8028, 0x132E,
+    0x8029, 0x8029, 0x2C2D, 0x802A, 0x802A, 0x2C2C, 0x802C, 0x802C, 0x2E05,
+    0x802E, 0x802E, 0x473E, 0x802F, 0x802F, 0x3794, 0x8030, 0x8030, 0x32F4,
+    0x8031, 0x8031, 0x473F, 0x8033, 0x8033, 0x0400, 0x8034, 0x8034, 0x18D8,
+    0x8035, 0x8035, 0x1A27, 0x8036, 0x8036, 0x07DA, 0x8037, 0x8037, 0x1BCB,
+    0x8039, 0x8039, 0x1DB5, 0x803B, 0x803C, 0x3797, 0x803D, 0x803D, 0x0984,
+    0x803E, 0x803E, 0x1DB4, 0x803F, 0x803F, 0x0985, 0x8043, 0x8043, 0x2004,
+    0x8046, 0x8046, 0x0B69, 0x8047, 0x8047, 0x2003, 0x8048, 0x8048, 0x2005,
+    0x804A, 0x804A, 0x0B68, 0x804F, 0x8050, 0x227A, 0x8051, 0x8051, 0x2279,
+    0x8052, 0x8052, 0x0D1F, 0x8054, 0x8054, 0x4740, 0x8056, 0x8056, 0x0ECB,
+    0x8058, 0x8058, 0x0ECC, 0x805A, 0x805A, 0x1073, 0x805B, 0x805B, 0x3FE5,
+    0x805C, 0x805C, 0x279D, 0x805D, 0x805D, 0x279C, 0x805E, 0x805E, 0x1072,
+    0x8061, 0x8061, 0x3799, 0x8062, 0x8062, 0x3FE3, 0x8063, 0x8063, 0x3FDC,
+    0x8064, 0x8064, 0x29CC, 0x8066, 0x8066, 0x3FDB, 0x8067, 0x8067, 0x29CD,
+    0x806C, 0x806C, 0x2C2E, 0x806F, 0x806F, 0x144C, 0x8070, 0x8070, 0x144B,
+    0x8071, 0x8072, 0x1449, 0x8073, 0x8073, 0x144D, 0x8075, 0x8075, 0x2F91,
+    0x8076, 0x8076, 0x1517, 0x8077, 0x8077, 0x1516, 0x8078, 0x8078, 0x30EB,
+    0x8079, 0x8079, 0x321A, 0x807D, 0x807D, 0x16D3, 0x807E, 0x807E, 0x16D2,
+    0x807F, 0x807F, 0x0401, 0x8080, 0x8080, 0x44FE, 0x8082, 0x8082, 0x1CEC,
+    0x8084, 0x8084, 0x0ECE, 0x8085, 0x8085, 0x0D20, 0x8086, 0x8086, 0x0ECD,
+    0x8087, 0x8087, 0x1074, 0x8089, 0x8089, 0x0402, 0x808A, 0x808A, 0x17B3,
+    0x808B, 0x808C, 0x0403, 0x808F, 0x808F, 0x1A28, 0x8090, 0x8090, 0x18DB,
+    0x8092, 0x8092, 0x18DC, 0x8093, 0x8093, 0x04FE, 0x8095, 0x8095, 0x18D9,
+    0x8096, 0x8096, 0x04FD, 0x8098, 0x8098, 0x0500, 0x8099, 0x8099, 0x18DA,
+    0x809A, 0x809A, 0x0502, 0x809B, 0x809B, 0x0501, 0x809C, 0x809C, 0x18DD,
+    0x809D, 0x809D, 0x04FF, 0x809F, 0x809F, 0x4576, 0x80A1, 0x80A1, 0x0670,
+    0x80A2, 0x80A2, 0x066E, 0x80A3, 0x80A3, 0x1A2A, 0x80A5, 0x80A5, 0x066D,
+    0x80A7, 0x80A7, 0x37A0, 0x80A9, 0x80A9, 0x0672, 0x80AA, 0x80AA, 0x0674,
+    0x80AB, 0x80AB, 0x0671, 0x80AD, 0x80AD, 0x1A2D, 0x80AE, 0x80AE, 0x1A29,
+    0x80AF, 0x80AF, 0x0675, 0x80B1, 0x80B1, 0x066F, 0x80B2, 0x80B2, 0x0503,
+    0x80B4, 0x80B4, 0x0673, 0x80B5, 0x80B5, 0x1A2C, 0x80B6, 0x80B6, 0x3EAE,
+    0x80B7, 0x80B7, 0x4743, 0x80B8, 0x80B8, 0x1A2B, 0x80BA, 0x80BA, 0x066C,
+    0x80BC, 0x80BC, 0x4572, 0x80BD, 0x80BD, 0x3E7B, 0x80C2, 0x80C2, 0x1BD1,
+    0x80C3, 0x80C4, 0x07DE, 0x80C5, 0x80C5, 0x1BD3, 0x80C6, 0x80C6, 0x3B74,
+    0x80C7, 0x80C7, 0x1BCD, 0x80C8, 0x80C8, 0x1BD0, 0x80C9, 0x80C9, 0x1BD9,
+    0x80CA, 0x80CA, 0x1BD7, 0x80CC, 0x80CC, 0x07E0, 0x80CD, 0x80CD, 0x1BDD,
+    0x80CE, 0x80CE, 0x07E3, 0x80CF, 0x80CF, 0x1BDA, 0x80D0, 0x80D0, 0x1BD2,
+    0x80D1, 0x80D1, 0x1BCF, 0x80D4, 0x80D4, 0x227D, 0x80D5, 0x80D5, 0x1BD8,
+    0x80D6, 0x80D6, 0x07DB, 0x80D7, 0x80D7, 0x1BDB, 0x80D8, 0x80D8, 0x1BCC,
+    0x80D9, 0x80D9, 0x1BD5, 0x80DA, 0x80DA, 0x07DD, 0x80DB, 0x80DB, 0x07E2,
+    0x80DC, 0x80DC, 0x1BD6, 0x80DD, 0x80DD, 0x07E6, 0x80DE, 0x80DE, 0x07E4,
+    0x80E0, 0x80E0, 0x1BCE, 0x80E1, 0x80E1, 0x07E1, 0x80E3, 0x80E3, 0x1BD4,
+    0x80E4, 0x80E4, 0x07E5, 0x80E5, 0x80E5, 0x07DC, 0x80E6, 0x80E6, 0x1BDC,
+    0x80E9, 0x80E9, 0x4744, 0x80EC, 0x80EC, 0x45E9, 0x80ED, 0x80ED, 0x098A,
+    0x80EF, 0x80EF, 0x0993, 0x80F0, 0x80F0, 0x0988, 0x80F1, 0x80F1, 0x0986,
+    0x80F2, 0x80F2, 0x1DB7, 0x80F3, 0x80F3, 0x098E, 0x80F4, 0x80F4, 0x098B,
+    0x80F5, 0x80F5, 0x1DB9, 0x80F6, 0x80F6, 0x4574, 0x80F8, 0x80F8, 0x098D,
+    0x80F9, 0x80F9, 0x1DB8, 0x80FA, 0x80FA, 0x1DB6, 0x80FB, 0x80FB, 0x1DBB,
+    0x80FC, 0x80FC, 0x0992, 0x80FD, 0x80FD, 0x0990, 0x80FE, 0x80FE, 0x227C,
+    0x8100, 0x8100, 0x1DBC, 0x8101, 0x8101, 0x1DBA, 0x8102, 0x8102, 0x0987,
+    0x8103, 0x8103, 0x3FE7, 0x8105, 0x8105, 0x0989, 0x8106, 0x8106, 0x098C,
+    0x8107, 0x8107, 0x37A2, 0x8108, 0x8108, 0x098F, 0x8109, 0x8109, 0x3B75,
+    0x810A, 0x810A, 0x0991, 0x810C, 0x810C, 0x4746, 0x810E, 0x810E, 0x4747,
+    0x8112, 0x8112, 0x4748, 0x8114, 0x8114, 0x4749, 0x8115, 0x8115, 0x200F,
+    0x8116, 0x8116, 0x0B6B, 0x8117, 0x8117, 0x3E6D, 0x8118, 0x8118, 0x2006,
+    0x8119, 0x8119, 0x2008, 0x811A, 0x811A, 0x37A3, 0x811B, 0x811B, 0x2009,
+    0x811D, 0x811D, 0x2011, 0x811E, 0x811E, 0x200D, 0x811F, 0x811F, 0x200B,
+    0x8121, 0x8121, 0x200E, 0x8122, 0x8122, 0x2012, 0x8123, 0x8123, 0x0B6C,
+    0x8124, 0x8124, 0x0B70, 0x8125, 0x8125, 0x2007, 0x8127, 0x8127, 0x2010,
+    0x8129, 0x8129, 0x0B6E, 0x812A, 0x812A, 0x3A39, 0x812B, 0x812B, 0x0B6D,
+    0x812C, 0x812C, 0x200C, 0x812D, 0x812D, 0x200A, 0x812F, 0x812F, 0x0B6A,
+    0x8130, 0x8130, 0x0B6F, 0x8132, 0x8132, 0x3E79, 0x8134, 0x8134, 0x45EC,
+    0x8137, 0x8137, 0x3B72, 0x8139, 0x8139, 0x0D26, 0x813A, 0x813A, 0x2285,
+    0x813D, 0x813D, 0x2283, 0x813E, 0x813E, 0x0D28, 0x8142, 0x8142, 0x3B76,
+    0x8143, 0x8143, 0x227E, 0x8144, 0x8144, 0x2527, 0x8146, 0x8146, 0x0D27,
+    0x8147, 0x8147, 0x2282, 0x8148, 0x8148, 0x3E76, 0x814A, 0x814A, 0x227F,
+    0x814B, 0x814B, 0x0D23, 0x814C, 0x814C, 0x0D29, 0x814D, 0x814D, 0x2284,
+    0x814E, 0x814E, 0x0D25, 0x814F, 0x814F, 0x2281, 0x8150, 0x8150, 0x1075,
+    0x8151, 0x8151, 0x0D24, 0x8152, 0x8152, 0x2280, 0x8153, 0x8153, 0x0D2A,
+    0x8154, 0x8154, 0x0D22, 0x8155, 0x8155, 0x0D21, 0x8156, 0x8156, 0x474C,
+    0x8159, 0x815A, 0x474D, 0x815B, 0x815B, 0x251F, 0x815C, 0x815C, 0x251D,
+    0x815E, 0x815E, 0x2523, 0x8160, 0x8160, 0x251B, 0x8161, 0x8161, 0x2528,
+    0x8162, 0x8162, 0x2520, 0x8164, 0x8164, 0x251A, 0x8165, 0x8165, 0x0ED2,
+    0x8166, 0x8166, 0x0ED8, 0x8167, 0x8167, 0x2525, 0x8169, 0x8169, 0x251E,
+    0x816B, 0x816B, 0x0ED5, 0x816D, 0x816D, 0x43C4, 0x816E, 0x816E, 0x0ED3,
+    0x816F, 0x816F, 0x2526, 0x8170, 0x8170, 0x0ED0, 0x8171, 0x8171, 0x0ECF,
+    0x8172, 0x8172, 0x2521, 0x8173, 0x8173, 0x0ED4, 0x8174, 0x8174, 0x0D2B,
+    0x8176, 0x8176, 0x2524, 0x8177, 0x8177, 0x251C, 0x8178, 0x8178, 0x0ED1,
+    0x8179, 0x817A, 0x0ED6, 0x817C, 0x817C, 0x4750, 0x817F, 0x817F, 0x107A,
+    0x8180, 0x8180, 0x1076, 0x8182, 0x8182, 0x107B, 0x8183, 0x8183, 0x27A0,
+    0x8184, 0x8184, 0x43C5, 0x8186, 0x8186, 0x279F, 0x8187, 0x8187, 0x27A1,
+    0x8188, 0x8188, 0x1078, 0x8189, 0x8189, 0x279E, 0x818A, 0x818A, 0x1079,
+    0x818B, 0x818B, 0x27A4, 0x818C, 0x818C, 0x27A3, 0x818D, 0x818D, 0x27A2,
+    0x818F, 0x818F, 0x1077, 0x8193, 0x8193, 0x43C6, 0x8195, 0x8195, 0x29D1,
+    0x8197, 0x8197, 0x29D4, 0x8198, 0x8198, 0x11EF, 0x8199, 0x8199, 0x29D3,
+    0x819A, 0x819A, 0x11EE, 0x819B, 0x819D, 0x11EA, 0x819E, 0x819E, 0x29D0,
+    0x819F, 0x819F, 0x29CF, 0x81A0, 0x81A0, 0x11ED, 0x81A2, 0x81A2, 0x29D2,
+    0x81A3, 0x81A3, 0x29CE, 0x81A5, 0x81A5, 0x4753, 0x81A6, 0x81A6, 0x2C30,
+    0x81A7, 0x81A7, 0x2C3A, 0x81A8, 0x81A8, 0x1331, 0x81A9, 0x81A9, 0x1330,
+    0x81AA, 0x81AA, 0x4364, 0x81AB, 0x81AB, 0x2C34, 0x81AC, 0x81AC, 0x2C36,
+    0x81AE, 0x81AE, 0x2C31, 0x81B0, 0x81B0, 0x2C35, 0x81B1, 0x81B1, 0x2C2F,
+    0x81B2, 0x81B2, 0x2C38, 0x81B3, 0x81B3, 0x132F, 0x81B4, 0x81B4, 0x2C37,
+    0x81B5, 0x81B5, 0x2C33, 0x81B6, 0x81B6, 0x3EB2, 0x81B7, 0x81B7, 0x2C39,
+    0x81B9, 0x81B9, 0x2C32, 0x81BA, 0x81BA, 0x1450, 0x81BB, 0x81BB, 0x2E06,
+    0x81BC, 0x81BC, 0x2E0C, 0x81BD, 0x81BD, 0x1454, 0x81BE, 0x81BE, 0x1456,
+    0x81BF, 0x81BF, 0x1453, 0x81C0, 0x81C0, 0x1452, 0x81C1, 0x81C1, 0x4755,
+    0x81C2, 0x81C2, 0x1451, 0x81C3, 0x81C3, 0x144F, 0x81C4, 0x81C4, 0x2E07,
+    0x81C5, 0x81C5, 0x2E0A, 0x81C6, 0x81C6, 0x144E, 0x81C7, 0x81C7, 0x2E0B,
+    0x81C8, 0x81C8, 0x3FEE, 0x81C9, 0x81C9, 0x1455, 0x81CA, 0x81CA, 0x2E09,
+    0x81CC, 0x81CC, 0x2E08, 0x81CD, 0x81CD, 0x1518, 0x81CF, 0x81CF, 0x1519,
+    0x81D0, 0x81D0, 0x2F94, 0x81D1, 0x81D2, 0x2F92, 0x81D5, 0x81D5, 0x30ED,
+    0x81D7, 0x81D7, 0x30EC, 0x81D8, 0x81D8, 0x15B3, 0x81D9, 0x81D9, 0x321C,
+    0x81DA, 0x81DA, 0x1635, 0x81DB, 0x81DB, 0x321B, 0x81DD, 0x81DD, 0x32F5,
+    0x81DE, 0x81DE, 0x33A5, 0x81DF, 0x81DF, 0x16D4, 0x81E0, 0x81E1, 0x34DD,
+    0x81E2, 0x81E2, 0x1706, 0x81E3, 0x81E3, 0x0405, 0x81E4, 0x81E4, 0x4756,
+    0x81E5, 0x81E5, 0x0676, 0x81E6, 0x81E6, 0x2286, 0x81E7, 0x81E7, 0x107C,
+    0x81E8, 0x81E8, 0x1457, 0x81E9, 0x81E9, 0x2E0D, 0x81EA, 0x81EA, 0x0406,
+    0x81EC, 0x81EC, 0x0995, 0x81ED, 0x81ED, 0x0994, 0x81EE, 0x81EE, 0x2287,
+    0x81EF, 0x81EF, 0x42D1, 0x81F2, 0x81F2, 0x2C3B, 0x81F3, 0x81F3, 0x0407,
+    0x81F4, 0x81F4, 0x07E7, 0x81F6, 0x81F6, 0x3D61, 0x81F7, 0x81F9, 0x2288,
+    0x81FA, 0x81FA, 0x107D, 0x81FB, 0x81FB, 0x1332, 0x81FC, 0x81FC, 0x0408,
+    0x81FE, 0x81FE, 0x0677, 0x81FF, 0x81FF, 0x1BDE, 0x8200, 0x8200, 0x0996,
+    0x8201, 0x8201, 0x1DBD, 0x8202, 0x8202, 0x0B71, 0x8204, 0x8204, 0x228B,
+    0x8205, 0x8205, 0x0ED9, 0x8207, 0x8207, 0x107E, 0x8208, 0x8208, 0x1333,
+    0x8209, 0x8209, 0x1458, 0x820A, 0x820A, 0x151A, 0x820B, 0x820B, 0x30EE,
+    0x820C, 0x820C, 0x0409, 0x820D, 0x820D, 0x0678, 0x8210, 0x8210, 0x0997,
+    0x8211, 0x8211, 0x2013, 0x8212, 0x8212, 0x0D2C, 0x8214, 0x8214, 0x107F,
+    0x8215, 0x8215, 0x27A5, 0x8216, 0x8216, 0x29D5, 0x8218, 0x8218, 0x37AA,
+    0x821A, 0x821A, 0x3FE1, 0x821B, 0x821B, 0x040A, 0x821C, 0x821C, 0x0D2D,
+    0x821D, 0x821D, 0x2529, 0x821E, 0x821E, 0x1080, 0x821F, 0x821F, 0x040B,
+    0x8220, 0x8220, 0x1A2E, 0x8221, 0x8221, 0x1BDF, 0x8222, 0x8222, 0x07E8,
+    0x8225, 0x8225, 0x1DBF, 0x8226, 0x8226, 0x420D, 0x8228, 0x8228, 0x099A,
+    0x8229, 0x8229, 0x37B0, 0x822A, 0x822B, 0x0998, 0x822C, 0x822C, 0x099B,
+    0x822D, 0x822D, 0x3ED0, 0x822F, 0x822F, 0x1DBE, 0x8232, 0x8232, 0x2018,
+    0x8233, 0x8233, 0x2015, 0x8234, 0x8234, 0x2017, 0x8235, 0x8235, 0x0B72,
+    0x8236, 0x8236, 0x0B74, 0x8237, 0x8237, 0x0B73, 0x8238, 0x8238, 0x2014,
+    0x8239, 0x8239, 0x0B75, 0x823A, 0x823A, 0x2016, 0x823C, 0x823D, 0x228C,
+    0x823E, 0x823E, 0x4582, 0x823F, 0x823F, 0x228E, 0x8240, 0x8240, 0x252C,
+    0x8242, 0x8242, 0x252D, 0x8244, 0x8244, 0x252B, 0x8245, 0x8245, 0x252E,
+    0x8247, 0x8247, 0x0EDA, 0x8249, 0x8249, 0x252A, 0x824B, 0x824B, 0x1081,
+    0x824E, 0x824E, 0x29DA, 0x824F, 0x824F, 0x29D6, 0x8250, 0x8250, 0x29D9,
+    0x8251, 0x8251, 0x29DB, 0x8252, 0x8252, 0x29D8, 0x8253, 0x8253, 0x29D7,
+    0x8254, 0x8254, 0x4757, 0x8255, 0x8257, 0x2C3C, 0x8258, 0x8259, 0x1334,
+    0x825A, 0x825A, 0x2E0F, 0x825B, 0x825B, 0x2E0E, 0x825C, 0x825C, 0x2E10,
+    0x825E, 0x825E, 0x2F96, 0x825F, 0x825F, 0x2F95, 0x8261, 0x8261, 0x30F0,
+    0x8262, 0x8262, 0x3B7A, 0x8263, 0x8263, 0x30F1, 0x8264, 0x8264, 0x30EF,
+    0x8265, 0x8265, 0x3B7B, 0x8266, 0x8266, 0x1636, 0x8268, 0x8269, 0x321D,
+    0x826B, 0x826B, 0x33A6, 0x826C, 0x826C, 0x342D, 0x826D, 0x826D, 0x3496,
+    0x826E, 0x826E, 0x040C, 0x826F, 0x826F, 0x0504, 0x8271, 0x8271, 0x1459,
+    0x8272, 0x8272, 0x040D, 0x8274, 0x8274, 0x2019, 0x8275, 0x8275, 0x228F,
+    0x8276, 0x8276, 0x4759, 0x8277, 0x8277, 0x172E, 0x8278, 0x8278, 0x1813,
+    0x8279, 0x8279, 0x4722, 0x827A, 0x827A, 0x4563, 0x827B, 0x827B, 0x37C8,
+    0x827C, 0x827C, 0x1814, 0x827D, 0x827D, 0x1816, 0x827E, 0x827E, 0x040E,
+    0x827F, 0x827F, 0x1817, 0x8280, 0x8280, 0x1815, 0x8283, 0x8284, 0x18E5,
+    0x8285, 0x8285, 0x18E0, 0x8287, 0x8287, 0x4132, 0x828A, 0x828A, 0x18E4,
+    0x828B, 0x828B, 0x0506, 0x828D, 0x828D, 0x0507, 0x828E, 0x828E, 0x18E1,
+    0x828F, 0x828F, 0x18DF, 0x8290, 0x8290, 0x18DE, 0x8291, 0x8291, 0x18E2,
+    0x8292, 0x8292, 0x0505, 0x8293, 0x8293, 0x18E3, 0x8294, 0x8294, 0x1BE0,
+    0x8298, 0x8298, 0x1A33, 0x8299, 0x8299, 0x067B, 0x829A, 0x829A, 0x1A32,
+    0x829B, 0x829B, 0x1A34, 0x829D, 0x829D, 0x067A, 0x829E, 0x829E, 0x1A39,
+    0x829F, 0x829F, 0x067E, 0x82A0, 0x82A0, 0x1A2F, 0x82A1, 0x82A1, 0x1A3D,
+    0x82A2, 0x82A2, 0x1A43, 0x82A3, 0x82A3, 0x0685, 0x82A4, 0x82A4, 0x1A40,
+    0x82A5, 0x82A5, 0x0682, 0x82A6, 0x82A6, 0x3D73, 0x82A7, 0x82A7, 0x1A36,
+    0x82A8, 0x82A8, 0x1A3C, 0x82A9, 0x82A9, 0x1A3E, 0x82AA, 0x82AA, 0x37BC,
+    0x82AB, 0x82AB, 0x1A31, 0x82AC, 0x82AC, 0x0681, 0x82AD, 0x82AD, 0x067C,
+    0x82AE, 0x82AE, 0x1A37, 0x82AF, 0x82AF, 0x0683, 0x82B0, 0x82B0, 0x0686,
+    0x82B1, 0x82B1, 0x0680, 0x82B3, 0x82B3, 0x0679, 0x82B4, 0x82B4, 0x1A3B,
+    0x82B5, 0x82B5, 0x1A35, 0x82B6, 0x82B6, 0x1A42, 0x82B7, 0x82B7, 0x0688,
+    0x82B8, 0x82B8, 0x0684, 0x82B9, 0x82B9, 0x067F, 0x82BA, 0x82BA, 0x1A3A,
+    0x82BB, 0x82BB, 0x099C, 0x82BC, 0x82BC, 0x1A38, 0x82BD, 0x82BD, 0x067D,
+    0x82BE, 0x82BE, 0x0687, 0x82C0, 0x82C0, 0x1A30, 0x82C2, 0x82C2, 0x1A3F,
+    0x82C3, 0x82C3, 0x1A41, 0x82C4, 0x82C4, 0x45E3, 0x82CA, 0x82CA, 0x475A,
+    0x82CF, 0x82CF, 0x4564, 0x82D0, 0x82D0, 0x37C1, 0x82D1, 0x82D1, 0x07F9,
+    0x82D2, 0x82D2, 0x07F3, 0x82D3, 0x82D3, 0x07FB, 0x82D4, 0x82D4, 0x07F8,
+    0x82D5, 0x82D5, 0x1BE7, 0x82D6, 0x82D6, 0x1BEA, 0x82D7, 0x82D7, 0x07F4,
+    0x82D8, 0x82D8, 0x475B, 0x82D9, 0x82D9, 0x1BE1, 0x82DB, 0x82DB, 0x07ED,
+    0x82DC, 0x82DC, 0x07F7, 0x82DE, 0x82DE, 0x07FA, 0x82DF, 0x82DF, 0x07FC,
+    0x82E0, 0x82E0, 0x1BF6, 0x82E1, 0x82E1, 0x1BED, 0x82E2, 0x82E2, 0x37C9,
+    0x82E3, 0x82E3, 0x07EC, 0x82E4, 0x82E4, 0x1BF5, 0x82E5, 0x82E5, 0x07F0,
+    0x82E6, 0x82E6, 0x07EE, 0x82E7, 0x82E7, 0x07E9, 0x82E8, 0x82E8, 0x1BE5,
+    0x82EA, 0x82EA, 0x1BF4, 0x82EB, 0x82EB, 0x1BE9, 0x82EC, 0x82EC, 0x1BEC,
+    0x82ED, 0x82ED, 0x1BF9, 0x82EE, 0x82EE, 0x4018, 0x82EF, 0x82EF, 0x07FD,
+    0x82F0, 0x82F0, 0x1BF3, 0x82F1, 0x82F1, 0x07F5, 0x82F2, 0x82F2, 0x1BEE,
+    0x82F3, 0x82F3, 0x1BF8, 0x82F4, 0x82F4, 0x1BEB, 0x82F5, 0x82F5, 0x1BEF,
+    0x82F6, 0x82F6, 0x1BF2, 0x82F7, 0x82F7, 0x3E77, 0x82F9, 0x82F9, 0x1BE3,
+    0x82FA, 0x82FA, 0x1BF7, 0x82FB, 0x82FB, 0x1BF1, 0x82FC, 0x82FC, 0x412D,
+    0x82FD, 0x82FD, 0x3D92, 0x82FE, 0x82FE, 0x1BE2, 0x82FF, 0x82FF, 0x43DE,
+    0x8300, 0x8300, 0x1BE6, 0x8301, 0x8301, 0x07F6, 0x8302, 0x8302, 0x07F1,
+    0x8303, 0x8303, 0x07EA, 0x8304, 0x8304, 0x07EF, 0x8305, 0x8305, 0x07EB,
+    0x8306, 0x8306, 0x07FE, 0x8307, 0x8307, 0x1BE4, 0x8308, 0x8308, 0x1DD0,
+    0x8309, 0x8309, 0x07F2, 0x830B, 0x830B, 0x3EB6, 0x830C, 0x830C, 0x1BF0,
+    0x830D, 0x830D, 0x1A7D, 0x8316, 0x8316, 0x1DD3, 0x8317, 0x8317, 0x09AA,
+    0x8318, 0x8318, 0x37CA, 0x8319, 0x8319, 0x1DC3, 0x831A, 0x831A, 0x37C2,
+    0x831B, 0x831B, 0x1DCE, 0x831C, 0x831C, 0x1DCA, 0x831D, 0x831D, 0x37D1,
+    0x831E, 0x831E, 0x1DDD, 0x8320, 0x8320, 0x1DD5, 0x8322, 0x8322, 0x1DCB,
+    0x8324, 0x8324, 0x1DD4, 0x8325, 0x8325, 0x1DC5, 0x8326, 0x8326, 0x1DC9,
+    0x8327, 0x8327, 0x1DE0, 0x8328, 0x8328, 0x09AD, 0x8329, 0x8329, 0x1DD8,
+    0x832A, 0x832A, 0x1DCF, 0x832B, 0x832B, 0x099D, 0x832C, 0x832C, 0x1DDE,
+    0x832D, 0x832D, 0x1DC1, 0x832F, 0x832F, 0x1DD7, 0x8331, 0x8331, 0x09AC,
+    0x8332, 0x8332, 0x09A7, 0x8333, 0x8333, 0x1DC0, 0x8334, 0x8334, 0x09A5,
+    0x8335, 0x8335, 0x09A4, 0x8336, 0x8336, 0x09A9, 0x8337, 0x8337, 0x1DD6,
+    0x8338, 0x8338, 0x09A1, 0x8339, 0x8339, 0x09A8, 0x833A, 0x833A, 0x1BE8,
+    0x833B, 0x833B, 0x2290, 0x833C, 0x833C, 0x1DD1, 0x833D, 0x833D, 0x3D2A,
+    0x833F, 0x833F, 0x1DC7, 0x8340, 0x8340, 0x09AB, 0x8341, 0x8341, 0x1DC8,
+    0x8342, 0x8342, 0x1DCC, 0x8343, 0x8343, 0x09AE, 0x8344, 0x8344, 0x1DC2,
+    0x8345, 0x8345, 0x1DDA, 0x8347, 0x8347, 0x1DD9, 0x8348, 0x8348, 0x1DE1,
+    0x8349, 0x8349, 0x09A3, 0x834A, 0x834A, 0x09A0, 0x834B, 0x834B, 0x1DDF,
+    0x834C, 0x834C, 0x1DDB, 0x834D, 0x834D, 0x1DD2, 0x834E, 0x834E, 0x1DCD,
+    0x834F, 0x834F, 0x09A6, 0x8350, 0x8350, 0x09A2, 0x8351, 0x8351, 0x1DC4,
+    0x8352, 0x8352, 0x099E, 0x8353, 0x8353, 0x1DDC, 0x8354, 0x8354, 0x099F,
+    0x8356, 0x8356, 0x1DC6, 0x8357, 0x8357, 0x475D, 0x8362, 0x8362, 0x37B6,
+    0x8363, 0x8363, 0x41EB, 0x8366, 0x8366, 0x3E1E, 0x836F, 0x836F, 0x4565,
+    0x8373, 0x8373, 0x201F, 0x8374, 0x8374, 0x2021, 0x8375, 0x8375, 0x2026,
+    0x8376, 0x8376, 0x203A, 0x8377, 0x8377, 0x0B83, 0x8378, 0x8378, 0x0B79,
+    0x837A, 0x837A, 0x201E, 0x837B, 0x837C, 0x0B84, 0x837D, 0x837D, 0x2029,
+    0x837E, 0x837E, 0x2030, 0x837F, 0x837F, 0x2036, 0x8381, 0x8381, 0x2023,
+    0x8383, 0x8383, 0x202A, 0x8385, 0x8385, 0x37D3, 0x8386, 0x8386, 0x0B86,
+    0x8387, 0x8387, 0x2038, 0x8388, 0x8388, 0x2033, 0x8389, 0x8389, 0x0B81,
+    0x838A, 0x838A, 0x0B7F, 0x838B, 0x838B, 0x202F, 0x838C, 0x838C, 0x202B,
+    0x838D, 0x838D, 0x201D, 0x838E, 0x838E, 0x0B76, 0x838F, 0x838F, 0x2022,
+    0x8390, 0x8390, 0x201A, 0x8391, 0x8391, 0x37EC, 0x8392, 0x8392, 0x0B7E,
+    0x8393, 0x8393, 0x0B80, 0x8394, 0x8394, 0x2027, 0x8395, 0x8395, 0x2024,
+    0x8396, 0x8396, 0x0B7B, 0x8397, 0x8397, 0x2034, 0x8398, 0x8398, 0x0B78,
+    0x8399, 0x8399, 0x2025, 0x839A, 0x839A, 0x22B9, 0x839B, 0x839B, 0x202D,
+    0x839C, 0x839C, 0x374D, 0x839D, 0x839D, 0x202C, 0x839E, 0x839E, 0x0B77,
+    0x83A0, 0x83A0, 0x0B82, 0x83A2, 0x83A2, 0x0B7A, 0x83A3, 0x83A3, 0x201B,
+    0x83A4, 0x83A4, 0x2020, 0x83A5, 0x83A5, 0x2031, 0x83A6, 0x83A6, 0x2037,
+    0x83A7, 0x83A7, 0x0B87, 0x83A8, 0x83A8, 0x201C, 0x83A9, 0x83A9, 0x2028,
+    0x83AA, 0x83AA, 0x202E, 0x83AB, 0x83AB, 0x0B7D, 0x83AC, 0x83AC, 0x37D6,
+    0x83AE, 0x83AE, 0x2039, 0x83AF, 0x83AF, 0x2032, 0x83B0, 0x83B0, 0x2035,
+    0x83B9, 0x83B9, 0x42A7, 0x83BD, 0x83BD, 0x0B7C, 0x83BE, 0x83BE, 0x3F59,
+    0x83BF, 0x83BF, 0x22A0, 0x83C0, 0x83C0, 0x2294, 0x83C1, 0x83C1, 0x0D35,
+    0x83C2, 0x83C2, 0x22B1, 0x83C3, 0x83C3, 0x22BA, 0x83C4, 0x83C4, 0x22BD,
+    0x83C5, 0x83C5, 0x0D33, 0x83C6, 0x83C6, 0x229C, 0x83C7, 0x83C7, 0x22B5,
+    0x83C8, 0x83C8, 0x229D, 0x83C9, 0x83C9, 0x22AB, 0x83CA, 0x83CA, 0x0D40,
+    0x83CB, 0x83CB, 0x22A7, 0x83CC, 0x83CC, 0x0D3D, 0x83CD, 0x83CD, 0x4055,
+    0x83CE, 0x83CE, 0x22A8, 0x83CF, 0x83CF, 0x2291, 0x83D1, 0x83D1, 0x22B6,
+    0x83D3, 0x83D3, 0x37D8, 0x83D4, 0x83D4, 0x0D46, 0x83D5, 0x83D5, 0x22B3,
+    0x83D6, 0x83D6, 0x22A9, 0x83D7, 0x83D7, 0x22BF, 0x83D8, 0x83D8, 0x22A4,
+    0x83D9, 0x83D9, 0x254E, 0x83DB, 0x83DB, 0x22C2, 0x83DC, 0x83DC, 0x0D44,
+    0x83DD, 0x83DD, 0x22A2, 0x83DE, 0x83DE, 0x22AE, 0x83DF, 0x83DF, 0x0D47,
+    0x83E0, 0x83E0, 0x0D32, 0x83E1, 0x83E1, 0x22A6, 0x83E2, 0x83E2, 0x22C0,
+    0x83E3, 0x83E3, 0x229F, 0x83E4, 0x83E4, 0x2298, 0x83E5, 0x83E5, 0x22A3,
+    0x83E7, 0x83E7, 0x2297, 0x83E8, 0x83E8, 0x2295, 0x83E9, 0x83E9, 0x0D2E,
+    0x83EA, 0x83EA, 0x22B7, 0x83EB, 0x83EB, 0x229E, 0x83EC, 0x83EC, 0x22BB,
+    0x83ED, 0x83ED, 0x3D2C, 0x83EE, 0x83EE, 0x22BC, 0x83EF, 0x83EF, 0x0D36,
+    0x83F0, 0x83F0, 0x0D3B, 0x83F1, 0x83F1, 0x0D37, 0x83F2, 0x83F2, 0x0D3F,
+    0x83F3, 0x83F3, 0x22B2, 0x83F4, 0x83F4, 0x0D38, 0x83F5, 0x83F5, 0x22AA,
+    0x83F6, 0x83F6, 0x229A, 0x83F8, 0x83F8, 0x0D30, 0x83F9, 0x83F9, 0x2292,
+    0x83FA, 0x83FA, 0x22B4, 0x83FB, 0x83FB, 0x22BE, 0x83FC, 0x83FC, 0x2299,
+    0x83FD, 0x83FD, 0x0D3E, 0x83FE, 0x83FE, 0x22C3, 0x83FF, 0x83FF, 0x22A5,
+    0x8401, 0x8401, 0x22A1, 0x8403, 0x8403, 0x0D2F, 0x8404, 0x8404, 0x0D43,
+    0x8405, 0x8405, 0x475F, 0x8406, 0x8406, 0x22B0, 0x8407, 0x8407, 0x0D45,
+    0x8409, 0x8409, 0x22AC, 0x840A, 0x840A, 0x0D3A, 0x840B, 0x840B, 0x0D34,
+    0x840C, 0x840C, 0x0D3C, 0x840D, 0x840D, 0x0D31, 0x840E, 0x840E, 0x0D42,
+    0x840F, 0x840F, 0x22AD, 0x8410, 0x8410, 0x229B, 0x8411, 0x8411, 0x22AF,
+    0x8412, 0x8412, 0x2296, 0x8413, 0x8413, 0x22B8, 0x8414, 0x8414, 0x3C10,
+    0x8416, 0x8416, 0x4037, 0x8418, 0x8418, 0x3E7A, 0x841B, 0x841B, 0x22C1,
+    0x841C, 0x841C, 0x3EB3, 0x8420, 0x8420, 0x3C55, 0x8421, 0x8421, 0x3751,
+    0x8423, 0x8423, 0x2293, 0x8424, 0x8424, 0x4951, 0x8426, 0x8426, 0x46D8,
+    0x8429, 0x8429, 0x254D, 0x842B, 0x842B, 0x2563, 0x842C, 0x842C, 0x0EAC,
+    0x842D, 0x842D, 0x2552, 0x842E, 0x842E, 0x422D, 0x842F, 0x842F, 0x2550,
+    0x8430, 0x8430, 0x253B, 0x8431, 0x8431, 0x0EDE, 0x8432, 0x8432, 0x254B,
+    0x8433, 0x8433, 0x255F, 0x8434, 0x8434, 0x2547, 0x8435, 0x8435, 0x0EE6,
+    0x8436, 0x8436, 0x255E, 0x8437, 0x8437, 0x2545, 0x8438, 0x8438, 0x0D41,
+    0x8439, 0x8439, 0x2555, 0x843A, 0x843A, 0x2546, 0x843B, 0x843B, 0x255C,
+    0x843C, 0x843C, 0x0EE5, 0x843D, 0x843D, 0x0EDD, 0x843E, 0x843E, 0x3D21,
+    0x843F, 0x843F, 0x2530, 0x8440, 0x8440, 0x2538, 0x8442, 0x8442, 0x2551,
+    0x8443, 0x8443, 0x2549, 0x8444, 0x8444, 0x2562, 0x8445, 0x8445, 0x254C,
+    0x8446, 0x8446, 0x0EEB, 0x8447, 0x8447, 0x255D, 0x8448, 0x8448, 0x4718,
+    0x8449, 0x8449, 0x0EE2, 0x844A, 0x844A, 0x37E4, 0x844B, 0x844B, 0x254F,
+    0x844C, 0x844C, 0x2557, 0x844D, 0x844D, 0x253C, 0x844E, 0x844E, 0x2556,
+    0x8450, 0x8450, 0x2567, 0x8451, 0x8451, 0x2537, 0x8452, 0x8452, 0x2558,
+    0x8453, 0x8453, 0x3B7D, 0x8454, 0x8454, 0x2565, 0x8455, 0x8455, 0x398B,
+    0x8456, 0x8456, 0x2531, 0x8457, 0x8457, 0x0D39, 0x8458, 0x8458, 0x37DE,
+    0x8459, 0x8459, 0x253F, 0x845A, 0x845A, 0x253E, 0x845B, 0x845B, 0x0EE4,
+    0x845C, 0x845C, 0x3EDB, 0x845D, 0x845D, 0x2542, 0x845E, 0x845E, 0x2544,
+    0x845F, 0x845F, 0x2553, 0x8460, 0x8460, 0x2564, 0x8461, 0x8461, 0x0EE7,
+    0x8462, 0x8462, 0x42DA, 0x8463, 0x8463, 0x0EE8, 0x8464, 0x8464, 0x4761,
+    0x8465, 0x8465, 0x2536, 0x8466, 0x8466, 0x0EE0, 0x8467, 0x8467, 0x253A,
+    0x8468, 0x8468, 0x2560, 0x8469, 0x8469, 0x0EE9, 0x846B, 0x846B, 0x0EE1,
+    0x846C, 0x846C, 0x0EE3, 0x846D, 0x846D, 0x0EEA, 0x846E, 0x846E, 0x2566,
+    0x846F, 0x846F, 0x2559, 0x8470, 0x8470, 0x2554, 0x8471, 0x8471, 0x37E0,
+    0x8472, 0x8472, 0x3C93, 0x8473, 0x8473, 0x2541, 0x8474, 0x8474, 0x2540,
+    0x8475, 0x8475, 0x0EDF, 0x8476, 0x8476, 0x2532, 0x8477, 0x8477, 0x0EDC,
+    0x8478, 0x8478, 0x254A, 0x8479, 0x8479, 0x2533, 0x847A, 0x847A, 0x2548,
+    0x847D, 0x847D, 0x253D, 0x847E, 0x847E, 0x2561, 0x847F, 0x847F, 0x394E,
+    0x8480, 0x8480, 0x3B6E, 0x8482, 0x8482, 0x0EDB, 0x8486, 0x8486, 0x2539,
+    0x8488, 0x8488, 0x4762, 0x848D, 0x848D, 0x2535, 0x848E, 0x848E, 0x255B,
+    0x848F, 0x848F, 0x2534, 0x8490, 0x8490, 0x108E, 0x8491, 0x8491, 0x27CD,
+    0x8492, 0x8492, 0x3756, 0x8493, 0x8493, 0x37EE, 0x8494, 0x8494, 0x27BC,
+    0x8496, 0x8496, 0x3B1D, 0x8497, 0x8497, 0x27A6, 0x8498, 0x8498, 0x27C4,
+    0x8499, 0x8499, 0x1086, 0x849A, 0x849A, 0x27B5, 0x849B, 0x849B, 0x27BF,
+    0x849C, 0x849C, 0x1089, 0x849D, 0x849D, 0x27B8, 0x849E, 0x849E, 0x1087,
+    0x849F, 0x849F, 0x27A9, 0x84A0, 0x84A0, 0x27C7, 0x84A1, 0x84A1, 0x27A8,
+    0x84A2, 0x84A2, 0x27BB, 0x84A3, 0x84A3, 0x3B9E, 0x84A4, 0x84A4, 0x27A7,
+    0x84A7, 0x84A7, 0x27B9, 0x84A8, 0x84A8, 0x27C2, 0x84A9, 0x84A9, 0x27C0,
+    0x84AA, 0x84AA, 0x27B4, 0x84AB, 0x84AB, 0x27AF, 0x84AC, 0x84AC, 0x27AD,
+    0x84AD, 0x84AD, 0x3D8C, 0x84AE, 0x84AE, 0x27AE, 0x84AF, 0x84AF, 0x27C1,
+    0x84B0, 0x84B0, 0x27CC, 0x84B1, 0x84B1, 0x27B6, 0x84B2, 0x84B2, 0x1088,
+    0x84B4, 0x84B4, 0x27B1, 0x84B6, 0x84B6, 0x27C5, 0x84B8, 0x84B8, 0x108B,
+    0x84B9, 0x84B9, 0x27B0, 0x84BA, 0x84BA, 0x27AA, 0x84BB, 0x84BB, 0x27BA,
+    0x84BC, 0x84BC, 0x108F, 0x84BD, 0x84BD, 0x3C4C, 0x84BE, 0x84BE, 0x4764,
+    0x84BF, 0x84BF, 0x1083, 0x84C0, 0x84C0, 0x108C, 0x84C1, 0x84C1, 0x27B2,
+    0x84C2, 0x84C2, 0x27AC, 0x84C4, 0x84C4, 0x1085, 0x84C5, 0x84C5, 0x255A,
+    0x84C6, 0x84C6, 0x1084, 0x84C7, 0x84C7, 0x27BD, 0x84C9, 0x84C9, 0x1082,
+    0x84CA, 0x84CA, 0x1091, 0x84CB, 0x84CB, 0x108A, 0x84CC, 0x84CC, 0x27BE,
+    0x84CD, 0x84CD, 0x27B3, 0x84CE, 0x84CE, 0x27AB, 0x84CF, 0x84CF, 0x27C6,
+    0x84D0, 0x84D0, 0x27B7, 0x84D1, 0x84D1, 0x1090, 0x84D2, 0x84D2, 0x27CA,
+    0x84D3, 0x84D3, 0x108D, 0x84D4, 0x84D4, 0x27C9, 0x84D6, 0x84D6, 0x27C3,
+    0x84D7, 0x84D7, 0x27C8, 0x84DA, 0x84DA, 0x3FF5, 0x84DB, 0x84DB, 0x27CB,
+    0x84DE, 0x84DE, 0x37EA, 0x84E1, 0x84E1, 0x4765, 0x84E2, 0x84E2, 0x37B5,
+    0x84E4, 0x84E4, 0x37EF, 0x84E5, 0x84E5, 0x3BD0, 0x84E7, 0x84E8, 0x2A03,
+    0x84E9, 0x84E9, 0x29F7, 0x84EA, 0x84EA, 0x29F6, 0x84EB, 0x84EB, 0x29F2,
+    0x84EC, 0x84EC, 0x11FB, 0x84EE, 0x84EE, 0x11F3, 0x84EF, 0x84EF, 0x2A06,
+    0x84F0, 0x84F0, 0x2A05, 0x84F1, 0x84F1, 0x252F, 0x84F2, 0x84F2, 0x29EF,
+    0x84F3, 0x84F3, 0x29F3, 0x84F4, 0x84F4, 0x29ED, 0x84F6, 0x84F6, 0x2A00,
+    0x84F7, 0x84F7, 0x29F1, 0x84F8, 0x84F8, 0x4766, 0x84F9, 0x84F9, 0x2A07,
+    0x84FA, 0x84FA, 0x29EA, 0x84FB, 0x84FB, 0x29E8, 0x84FC, 0x84FC, 0x29F4,
+    0x84FD, 0x84FD, 0x29FE, 0x84FE, 0x84FE, 0x29F9, 0x84FF, 0x84FF, 0x11FD,
+    0x8500, 0x8500, 0x29DF, 0x8502, 0x8502, 0x29FD, 0x8503, 0x8503, 0x398A,
+    0x8505, 0x8505, 0x40EB, 0x8506, 0x8506, 0x11FE, 0x8507, 0x8507, 0x2543,
+    0x8508, 0x8508, 0x29EB, 0x8509, 0x8509, 0x29E2, 0x850A, 0x850A, 0x29E5,
+    0x850B, 0x850B, 0x2A0B, 0x850C, 0x850C, 0x29EC, 0x850D, 0x850D, 0x29E3,
+    0x850E, 0x850E, 0x29E1, 0x850F, 0x850F, 0x29DE, 0x8510, 0x8510, 0x4767,
+    0x8511, 0x8511, 0x11F7, 0x8512, 0x8512, 0x29F5, 0x8513, 0x8513, 0x11F6,
+    0x8514, 0x8514, 0x11FA, 0x8515, 0x8515, 0x29F0, 0x8516, 0x8516, 0x29F8,
+    0x8517, 0x8517, 0x11F0, 0x8518, 0x8518, 0x2A08, 0x8519, 0x8519, 0x2A0C,
+    0x851A, 0x851A, 0x11F2, 0x851C, 0x851C, 0x29E7, 0x851D, 0x851D, 0x29FB,
+    0x851E, 0x851E, 0x29FF, 0x851F, 0x851F, 0x29E4, 0x8520, 0x8520, 0x2A09,
+    0x8521, 0x8521, 0x11F9, 0x8523, 0x8523, 0x11F8, 0x8524, 0x8524, 0x29DC,
+    0x8525, 0x8525, 0x11FC, 0x8526, 0x8526, 0x2A02, 0x8527, 0x8527, 0x29E6,
+    0x8528, 0x8528, 0x29FA, 0x8529, 0x8529, 0x29E0, 0x852A, 0x852A, 0x29EE,
+    0x852B, 0x852B, 0x29E9, 0x852C, 0x852D, 0x11F4, 0x852E, 0x852E, 0x29FC,
+    0x852F, 0x852F, 0x2A0D, 0x8530, 0x8530, 0x2A0A, 0x8531, 0x8531, 0x2A01,
+    0x8533, 0x8533, 0x4228, 0x8534, 0x8534, 0x37F4, 0x8538, 0x8538, 0x4768,
+    0x853B, 0x853B, 0x29DD, 0x853D, 0x853D, 0x11F1, 0x853E, 0x853E, 0x2C4F,
+    0x8540, 0x8540, 0x2C46, 0x8541, 0x8541, 0x2C49, 0x8542, 0x8542, 0x4062,
+    0x8543, 0x8543, 0x133B, 0x8544, 0x8544, 0x2C4B, 0x8545, 0x8545, 0x2C40,
+    0x8546, 0x8546, 0x2C47, 0x8547, 0x8547, 0x2C4D, 0x8548, 0x8548, 0x1338,
+    0x8549, 0x8549, 0x133C, 0x854A, 0x854A, 0x1336, 0x854B, 0x854B, 0x37C0,
+    0x854C, 0x854C, 0x400F, 0x854D, 0x854D, 0x2C42, 0x854E, 0x854E, 0x2C52,
+    0x8551, 0x8551, 0x2C4C, 0x8552, 0x8552, 0x4769, 0x8553, 0x8553, 0x2C43,
+    0x8554, 0x8554, 0x2C5B, 0x8555, 0x8555, 0x2C55, 0x8556, 0x8556, 0x2C3F,
+    0x8557, 0x8557, 0x2E23, 0x8558, 0x8558, 0x2C45, 0x8559, 0x8559, 0x1337,
+    0x855A, 0x855A, 0x37DB, 0x855B, 0x855B, 0x2C50, 0x855D, 0x855D, 0x2C5A,
+    0x855E, 0x855E, 0x133F, 0x8560, 0x8560, 0x2C57, 0x8561, 0x8561, 0x2C44,
+    0x8562, 0x8562, 0x2C4A, 0x8563, 0x8563, 0x2C4E, 0x8564, 0x8564, 0x2C48,
+    0x8565, 0x8565, 0x2C5C, 0x8566, 0x8566, 0x2C59, 0x8567, 0x8567, 0x2C56,
+    0x8568, 0x8569, 0x1339, 0x856A, 0x856A, 0x133E, 0x856B, 0x856B, 0x2C41,
+    0x856C, 0x856C, 0x2C5D, 0x856D, 0x856D, 0x133D, 0x856E, 0x856E, 0x2C53,
+    0x856F, 0x8570, 0x476B, 0x8571, 0x8571, 0x2C51, 0x8573, 0x8573, 0x37F8,
+    0x8575, 0x8575, 0x2C54, 0x8576, 0x8576, 0x2E30, 0x8577, 0x8577, 0x2E1D,
+    0x8578, 0x8578, 0x2E22, 0x8579, 0x8579, 0x2E2F, 0x857A, 0x857A, 0x2E21,
+    0x857B, 0x857B, 0x2E19, 0x857C, 0x857C, 0x2E1E, 0x857E, 0x857E, 0x145C,
+    0x8580, 0x8580, 0x2E12, 0x8581, 0x8581, 0x2E2A, 0x8582, 0x8582, 0x2E2C,
+    0x8583, 0x8583, 0x2E11, 0x8584, 0x8584, 0x145B, 0x8585, 0x8585, 0x2E2E,
+    0x8586, 0x8586, 0x2E26, 0x8587, 0x8587, 0x1462, 0x8588, 0x8588, 0x2E2D,
+    0x8589, 0x8589, 0x2E1F, 0x858A, 0x858A, 0x1464, 0x858B, 0x858B, 0x2E17,
+    0x858C, 0x858C, 0x2C58, 0x858D, 0x858D, 0x2E27, 0x858E, 0x858E, 0x2E24,
+    0x858F, 0x858F, 0x2E13, 0x8590, 0x8590, 0x2E32, 0x8591, 0x8591, 0x145E,
+    0x8594, 0x8594, 0x145F, 0x8595, 0x8595, 0x2E15, 0x8596, 0x8596, 0x2E25,
+    0x8598, 0x8598, 0x2E31, 0x8599, 0x8599, 0x2E28, 0x859A, 0x859A, 0x2E1B,
+    0x859B, 0x859B, 0x1461, 0x859C, 0x859C, 0x145D, 0x859D, 0x859D, 0x2E29,
+    0x859E, 0x859E, 0x2E1C, 0x859F, 0x859F, 0x2E33, 0x85A0, 0x85A0, 0x2E16,
+    0x85A1, 0x85A1, 0x2E20, 0x85A2, 0x85A2, 0x2E2B, 0x85A3, 0x85A3, 0x2E18,
+    0x85A4, 0x85A4, 0x2E1A, 0x85A6, 0x85A6, 0x1465, 0x85A7, 0x85A7, 0x2E14,
+    0x85A8, 0x85A8, 0x1463, 0x85A9, 0x85A9, 0x151C, 0x85AA, 0x85AA, 0x145A,
+    0x85AF, 0x85AF, 0x1460, 0x85B0, 0x85B0, 0x1520, 0x85B1, 0x85B1, 0x2FA6,
+    0x85B3, 0x85B3, 0x2F9C, 0x85B4, 0x85B4, 0x2F97, 0x85B5, 0x85B5, 0x2F9D,
+    0x85B6, 0x85B6, 0x2FA7, 0x85B7, 0x85B7, 0x2FAB, 0x85B8, 0x85B8, 0x2FAA,
+    0x85B9, 0x85B9, 0x1522, 0x85BA, 0x85BA, 0x1521, 0x85BD, 0x85BD, 0x2F9E,
+    0x85BE, 0x85BE, 0x2FAC, 0x85BF, 0x85BF, 0x2FA1, 0x85C0, 0x85C0, 0x2F99,
+    0x85C1, 0x85C1, 0x37FE, 0x85C2, 0x85C2, 0x2F9B, 0x85C3, 0x85C3, 0x2F9A,
+    0x85C4, 0x85C4, 0x2FA0, 0x85C5, 0x85C5, 0x2FA5, 0x85C6, 0x85C6, 0x2F98,
+    0x85C7, 0x85C7, 0x2F9F, 0x85C8, 0x85C8, 0x2FA4, 0x85C9, 0x85C9, 0x151F,
+    0x85CB, 0x85CB, 0x2FA2, 0x85CD, 0x85CD, 0x151D, 0x85CE, 0x85CE, 0x2FA3,
+    0x85CF, 0x85CF, 0x151B, 0x85D0, 0x85D0, 0x151E, 0x85D1, 0x85D1, 0x3101,
+    0x85D2, 0x85D2, 0x2FA8, 0x85D5, 0x85D5, 0x15B7, 0x85D7, 0x85D7, 0x30F9,
+    0x85D8, 0x85D8, 0x30FD, 0x85D9, 0x85D9, 0x30F5, 0x85DA, 0x85DA, 0x30F8,
+    0x85DC, 0x85DC, 0x3100, 0x85DD, 0x85DD, 0x15B5, 0x85DE, 0x85DE, 0x3105,
+    0x85DF, 0x85DF, 0x30FE, 0x85E0, 0x85E0, 0x476D, 0x85E1, 0x85E1, 0x30F6,
+    0x85E2, 0x85E2, 0x3106, 0x85E3, 0x85E3, 0x30FF, 0x85E4, 0x85E5, 0x15B8,
+    0x85E6, 0x85E6, 0x3103, 0x85E8, 0x85E8, 0x30F7, 0x85E9, 0x85E9, 0x15B4,
+    0x85EA, 0x85EA, 0x15B6, 0x85EB, 0x85EB, 0x30F2, 0x85EC, 0x85EC, 0x30FA,
+    0x85ED, 0x85ED, 0x30F4, 0x85EE, 0x85EE, 0x3C56, 0x85EF, 0x85EF, 0x3104,
+    0x85F0, 0x85F0, 0x3102, 0x85F1, 0x85F1, 0x30F3, 0x85F2, 0x85F2, 0x30FB,
+    0x85F6, 0x85F6, 0x3225, 0x85F7, 0x85F7, 0x15BA, 0x85F8, 0x85F8, 0x30FC,
+    0x85F9, 0x85F9, 0x1638, 0x85FA, 0x85FA, 0x163A, 0x85FB, 0x85FB, 0x1637,
+    0x85FC, 0x85FC, 0x3C50, 0x85FD, 0x85FD, 0x322A, 0x85FE, 0x85FE, 0x3222,
+    0x85FF, 0x85FF, 0x3220, 0x8600, 0x8600, 0x3224, 0x8601, 0x8601, 0x3221,
+    0x8602, 0x8602, 0x3800, 0x8604, 0x8604, 0x3226, 0x8605, 0x8605, 0x3228,
+    0x8606, 0x8606, 0x163B, 0x8607, 0x8607, 0x163D, 0x8609, 0x8609, 0x3227,
+    0x860A, 0x860A, 0x163E, 0x860B, 0x860B, 0x163C, 0x860C, 0x860C, 0x3229,
+    0x860D, 0x860D, 0x4064, 0x8610, 0x8610, 0x3B7F, 0x8611, 0x8611, 0x1639,
+    0x8614, 0x8614, 0x46BE, 0x8616, 0x8616, 0x37FB, 0x8617, 0x8617, 0x1685,
+    0x8618, 0x8618, 0x32F6, 0x8619, 0x8619, 0x32FC, 0x861A, 0x861A, 0x1687,
+    0x861B, 0x861B, 0x3223, 0x861C, 0x861C, 0x32FB, 0x861E, 0x861E, 0x3302,
+    0x861F, 0x861F, 0x32F9, 0x8620, 0x8620, 0x3300, 0x8621, 0x8621, 0x32FF,
+    0x8622, 0x8622, 0x321F, 0x8623, 0x8623, 0x32FA, 0x8624, 0x8624, 0x2FA9,
+    0x8625, 0x8625, 0x3303, 0x8626, 0x8626, 0x32F8, 0x8627, 0x8627, 0x32FD,
+    0x8628, 0x8628, 0x3805, 0x8629, 0x8629, 0x3301, 0x862A, 0x862A, 0x32F7,
+    0x862C, 0x862C, 0x33AA, 0x862D, 0x862D, 0x1686, 0x862E, 0x862E, 0x32FE,
+    0x862F, 0x862F, 0x3F9E, 0x8631, 0x8631, 0x3432, 0x8632, 0x8632, 0x33AB,
+    0x8633, 0x8633, 0x33A9, 0x8634, 0x8635, 0x33A7, 0x8636, 0x8636, 0x33AC,
+    0x8638, 0x8638, 0x1707, 0x8639, 0x8639, 0x3430, 0x863A, 0x863A, 0x342E,
+    0x863B, 0x863B, 0x3433, 0x863C, 0x863C, 0x3431, 0x863E, 0x863E, 0x3434,
+    0x863F, 0x863F, 0x1708, 0x8640, 0x8640, 0x342F, 0x8642, 0x8642, 0x38C1,
+    0x8643, 0x8643, 0x3497, 0x8645, 0x8645, 0x3B66, 0x8646, 0x8648, 0x34DF,
+    0x864B, 0x864B, 0x353E, 0x864C, 0x864C, 0x3536, 0x864D, 0x864D, 0x1818,
+    0x864E, 0x864E, 0x0689, 0x8650, 0x8650, 0x07FF, 0x8652, 0x8652, 0x1DE3,
+    0x8653, 0x8653, 0x1DE2, 0x8654, 0x8654, 0x09AF, 0x8655, 0x8655, 0x0B88,
+    0x8656, 0x8656, 0x203C, 0x8659, 0x8659, 0x203B, 0x865B, 0x865B, 0x0D48,
+    0x865C, 0x865C, 0x0EED, 0x865E, 0x865E, 0x0EEC, 0x865F, 0x865F, 0x0EEE,
+    0x8661, 0x8661, 0x27CE, 0x8662, 0x8662, 0x2A0E, 0x8663, 0x8663, 0x2C5E,
+    0x8664, 0x8664, 0x2C60, 0x8665, 0x8665, 0x2C5F, 0x8667, 0x8667, 0x1466,
+    0x8668, 0x8668, 0x2E34, 0x8669, 0x8669, 0x2FAD, 0x866A, 0x866A, 0x351E,
+    0x866B, 0x866B, 0x040F, 0x866C, 0x866C, 0x3813, 0x866D, 0x866E, 0x1A46,
+    0x866F, 0x866F, 0x1A45, 0x8670, 0x8670, 0x1A44, 0x8671, 0x8671, 0x068A,
+    0x8672, 0x8672, 0x476F, 0x8673, 0x8673, 0x1BFD, 0x8674, 0x8674, 0x1BFB,
+    0x8677, 0x8677, 0x1BFA, 0x8679, 0x8679, 0x0800, 0x867A, 0x867A, 0x0802,
+    0x867B, 0x867B, 0x0801, 0x867C, 0x867C, 0x1BFC, 0x867E, 0x867E, 0x380A,
+    0x8685, 0x8685, 0x1DEF, 0x8686, 0x8686, 0x1DEC, 0x8687, 0x8687, 0x1DEA,
+    0x868A, 0x868A, 0x09B0, 0x868B, 0x868B, 0x1DED, 0x868C, 0x868C, 0x09B5,
+    0x868D, 0x868D, 0x1DE7, 0x868E, 0x868E, 0x1DF6, 0x8690, 0x8690, 0x1DF8,
+    0x8691, 0x8691, 0x1DE8, 0x8692, 0x8692, 0x4770, 0x8693, 0x8693, 0x09B2,
+    0x8694, 0x8694, 0x1DF9, 0x8695, 0x8695, 0x1DF4, 0x8696, 0x8696, 0x1DE6,
+    0x8697, 0x8697, 0x1DEB, 0x8698, 0x8698, 0x1DF5, 0x8699, 0x8699, 0x1DF1,
+    0x869A, 0x869A, 0x1DEE, 0x869C, 0x869C, 0x09B7, 0x869D, 0x869D, 0x1DF7,
+    0x869E, 0x869E, 0x1DE9, 0x86A0, 0x86A0, 0x3B88, 0x86A1, 0x86A1, 0x1DF2,
+    0x86A2, 0x86A2, 0x1DE4, 0x86A3, 0x86A3, 0x09B6, 0x86A4, 0x86A4, 0x09B3,
+    0x86A5, 0x86A5, 0x1DF0, 0x86A7, 0x86A7, 0x1DF3, 0x86A8, 0x86A8, 0x1DE5,
+    0x86A9, 0x86A9, 0x09B4, 0x86AA, 0x86AA, 0x09B1, 0x86AD, 0x86AD, 0x3F06,
+    0x86AF, 0x86AF, 0x0B92, 0x86B0, 0x86B0, 0x2043, 0x86B1, 0x86B1, 0x0B91,
+    0x86B2, 0x86B2, 0x43E0, 0x86B3, 0x86B3, 0x2046, 0x86B4, 0x86B4, 0x2049,
+    0x86B5, 0x86B5, 0x0B8E, 0x86B6, 0x86B6, 0x0B8C, 0x86B7, 0x86B7, 0x203E,
+    0x86B8, 0x86B8, 0x2047, 0x86B9, 0x86B9, 0x2045, 0x86BA, 0x86BA, 0x2042,
+    0x86BB, 0x86BC, 0x204A, 0x86BD, 0x86BE, 0x204D, 0x86BF, 0x86BF, 0x203D,
+    0x86C0, 0x86C0, 0x0B8B, 0x86C1, 0x86C1, 0x2040, 0x86C2, 0x86C2, 0x203F,
+    0x86C3, 0x86C3, 0x204C, 0x86C4, 0x86C4, 0x0B8D, 0x86C5, 0x86C5, 0x2041,
+    0x86C6, 0x86C6, 0x0B8F, 0x86C7, 0x86C7, 0x0B8A, 0x86C8, 0x86C8, 0x2044,
+    0x86C9, 0x86C9, 0x0B93, 0x86CB, 0x86CB, 0x0B90, 0x86CC, 0x86CC, 0x2048,
+    0x86D0, 0x86D0, 0x0D4F, 0x86D1, 0x86D1, 0x22D2, 0x86D3, 0x86D3, 0x22C7,
+    0x86D4, 0x86D4, 0x0D4C, 0x86D6, 0x86D6, 0x256D, 0x86D7, 0x86D7, 0x22D0,
+    0x86D8, 0x86D8, 0x22C4, 0x86D9, 0x86D9, 0x0D4A, 0x86DA, 0x86DA, 0x22C9,
+    0x86DB, 0x86DB, 0x0D4D, 0x86DC, 0x86DC, 0x22CD, 0x86DD, 0x86DD, 0x22CB,
+    0x86DE, 0x86DE, 0x0D50, 0x86DF, 0x86DF, 0x0D49, 0x86E2, 0x86E2, 0x22C5,
+    0x86E3, 0x86E3, 0x22C8, 0x86E4, 0x86E4, 0x0D4E, 0x86E6, 0x86E6, 0x22C6,
+    0x86E8, 0x86E8, 0x22D1, 0x86E9, 0x86E9, 0x22CF, 0x86EA, 0x86EA, 0x22CA,
+    0x86EB, 0x86EB, 0x22CC, 0x86EC, 0x86EC, 0x22CE, 0x86ED, 0x86ED, 0x0D4B,
+    0x86EF, 0x86EF, 0x4771, 0x86F5, 0x86F5, 0x256E, 0x86F6, 0x86F6, 0x2574,
+    0x86F7, 0x86F7, 0x256A, 0x86F8, 0x86F8, 0x2570, 0x86F9, 0x86F9, 0x0EEF,
+    0x86FA, 0x86FA, 0x256C, 0x86FB, 0x86FB, 0x0EF5, 0x86FE, 0x86FE, 0x0EF4,
+    0x8700, 0x8700, 0x0EF3, 0x8701, 0x8701, 0x2573, 0x8702, 0x8703, 0x0EF6,
+    0x8704, 0x8704, 0x2569, 0x8705, 0x8705, 0x2576, 0x8706, 0x8706, 0x0EF8,
+    0x8707, 0x8707, 0x0EF2, 0x8708, 0x8708, 0x0EF1, 0x8709, 0x8709, 0x2572,
+    0x870A, 0x870A, 0x0EF9, 0x870B, 0x870B, 0x2568, 0x870C, 0x870C, 0x256B,
+    0x870D, 0x870D, 0x2575, 0x870E, 0x870E, 0x2571, 0x8711, 0x8711, 0x27EE,
+    0x8712, 0x8712, 0x27E3, 0x8713, 0x8713, 0x0EF0, 0x8718, 0x8718, 0x1098,
+    0x8719, 0x8719, 0x27D7, 0x871A, 0x871A, 0x27EC, 0x871B, 0x871B, 0x27D8,
+    0x871C, 0x871C, 0x1093, 0x871E, 0x871E, 0x27D5, 0x8720, 0x8720, 0x27DE,
+    0x8721, 0x8721, 0x27D6, 0x8722, 0x8722, 0x1095, 0x8723, 0x8723, 0x27D0,
+    0x8724, 0x8724, 0x27EB, 0x8725, 0x8725, 0x1096, 0x8726, 0x8727, 0x27E8,
+    0x8728, 0x8728, 0x27D1, 0x8729, 0x8729, 0x109B, 0x872A, 0x872A, 0x27E0,
+    0x872C, 0x872C, 0x27DA, 0x872D, 0x872D, 0x27E1, 0x872E, 0x872E, 0x27D4,
+    0x8730, 0x8730, 0x27ED, 0x8731, 0x8731, 0x27E5, 0x8732, 0x8732, 0x27DF,
+    0x8733, 0x8733, 0x27CF, 0x8734, 0x8734, 0x1097, 0x8735, 0x8735, 0x27E6,
+    0x8737, 0x8737, 0x109A, 0x8738, 0x8738, 0x27EA, 0x873A, 0x873A, 0x27E4,
+    0x873B, 0x873B, 0x1094, 0x873C, 0x873C, 0x27E2, 0x873E, 0x873E, 0x27DC,
+    0x873F, 0x873F, 0x1092, 0x8740, 0x8740, 0x27D3, 0x8741, 0x8741, 0x27DB,
+    0x8742, 0x8742, 0x27E7, 0x8743, 0x8743, 0x27D9, 0x8746, 0x8746, 0x27DD,
+    0x874C, 0x874C, 0x1208, 0x874D, 0x874D, 0x256F, 0x874E, 0x874E, 0x2A20,
+    0x874F, 0x874F, 0x2A29, 0x8750, 0x8750, 0x2A1F, 0x8751, 0x8751, 0x2A1B,
+    0x8752, 0x8752, 0x2A18, 0x8753, 0x8753, 0x1209, 0x8754, 0x8754, 0x2A16,
+    0x8755, 0x8755, 0x1099, 0x8756, 0x8756, 0x2A0F, 0x8757, 0x8757, 0x1207,
+    0x8758, 0x8758, 0x2A15, 0x8759, 0x8759, 0x1206, 0x875A, 0x875A, 0x2A1A,
+    0x875B, 0x875B, 0x2A17, 0x875C, 0x875C, 0x2A27, 0x875D, 0x875D, 0x2A22,
+    0x875E, 0x875E, 0x2A1C, 0x875F, 0x875F, 0x2A21, 0x8760, 0x8760, 0x1202,
+    0x8761, 0x8761, 0x2A19, 0x8762, 0x8762, 0x2A2C, 0x8763, 0x8764, 0x2A10,
+    0x8765, 0x8765, 0x2A28, 0x8766, 0x8766, 0x1203, 0x8767, 0x8767, 0x2A2D,
+    0x8768, 0x8768, 0x1205, 0x8769, 0x8769, 0x2A2E, 0x876A, 0x876A, 0x2A1E,
+    0x876B, 0x876B, 0x27D2, 0x876C, 0x876C, 0x2A24, 0x876D, 0x876D, 0x2A1D,
+    0x876E, 0x876E, 0x2A26, 0x876F, 0x876F, 0x2A23, 0x8770, 0x8770, 0x3E6C,
+    0x8771, 0x8771, 0x380B, 0x8773, 0x8773, 0x2A14, 0x8774, 0x8774, 0x1200,
+    0x8775, 0x8775, 0x2A2B, 0x8776, 0x8776, 0x1201, 0x8777, 0x8777, 0x2A12,
+    0x8778, 0x8778, 0x1204, 0x8779, 0x8779, 0x2C6B, 0x877A, 0x877A, 0x2A25,
+    0x877B, 0x877B, 0x2A2A, 0x877D, 0x877D, 0x4045, 0x8781, 0x8781, 0x2C68,
+    0x8782, 0x8782, 0x11FF, 0x8783, 0x8783, 0x1340, 0x8784, 0x8784, 0x2C72,
+    0x8785, 0x8785, 0x2C6E, 0x8786, 0x8786, 0x3EB0, 0x8787, 0x8787, 0x2C6C,
+    0x8788, 0x8788, 0x2C67, 0x8789, 0x8789, 0x2C76, 0x878B, 0x878B, 0x43E2,
+    0x878C, 0x878C, 0x3FEF, 0x878D, 0x878D, 0x1344, 0x878F, 0x878F, 0x2C63,
+    0x8790, 0x8791, 0x2C6F, 0x8792, 0x8792, 0x2C66, 0x8793, 0x8793, 0x2C65,
+    0x8794, 0x8794, 0x2C73, 0x8796, 0x8796, 0x2C69, 0x8797, 0x8797, 0x2C64,
+    0x8798, 0x8798, 0x2C6A, 0x879A, 0x879A, 0x2C75, 0x879B, 0x879B, 0x2C62,
+    0x879C, 0x879C, 0x2C74, 0x879D, 0x879D, 0x2C71, 0x879E, 0x879E, 0x1342,
+    0x879F, 0x879F, 0x1341, 0x87A2, 0x87A2, 0x1343, 0x87A3, 0x87A3, 0x2C6D,
+    0x87A4, 0x87A4, 0x2C61, 0x87A5, 0x87A5, 0x3D88, 0x87A9, 0x87A9, 0x3FEC,
+    0x87AA, 0x87AA, 0x2E36, 0x87AB, 0x87AB, 0x146C, 0x87AC, 0x87AC, 0x2E3A,
+    0x87AD, 0x87AD, 0x2E37, 0x87AE, 0x87AE, 0x2E3E, 0x87AF, 0x87AF, 0x2E44,
+    0x87B0, 0x87B0, 0x2E39, 0x87B1, 0x87B1, 0x380F, 0x87B2, 0x87B2, 0x2E4D,
+    0x87B3, 0x87B3, 0x1469, 0x87B4, 0x87B4, 0x2E47, 0x87B5, 0x87B5, 0x2E3C,
+    0x87B6, 0x87B6, 0x2E48, 0x87B7, 0x87B7, 0x2E43, 0x87B8, 0x87B8, 0x2E4A,
+    0x87B9, 0x87B9, 0x2E3B, 0x87BA, 0x87BA, 0x146E, 0x87BB, 0x87BB, 0x146D,
+    0x87BC, 0x87BC, 0x2E3D, 0x87BD, 0x87BD, 0x2E4B, 0x87BE, 0x87BE, 0x2E35,
+    0x87BF, 0x87BF, 0x2E49, 0x87C0, 0x87C0, 0x1467, 0x87C1, 0x87C1, 0x3FFC,
+    0x87C2, 0x87C2, 0x2E41, 0x87C3, 0x87C3, 0x2E40, 0x87C4, 0x87C4, 0x2E45,
+    0x87C5, 0x87C5, 0x2E38, 0x87C6, 0x87C6, 0x146B, 0x87C8, 0x87C8, 0x146F,
+    0x87C9, 0x87C9, 0x2E3F, 0x87CA, 0x87CA, 0x2E46, 0x87CB, 0x87CB, 0x1470,
+    0x87CC, 0x87CC, 0x2E42, 0x87CE, 0x87CE, 0x3FED, 0x87D1, 0x87D1, 0x1468,
+    0x87D2, 0x87D2, 0x146A, 0x87D3, 0x87D3, 0x2FBA, 0x87D4, 0x87D4, 0x2FB8,
+    0x87D6, 0x87D6, 0x3F92, 0x87D7, 0x87D7, 0x2FBE, 0x87D8, 0x87D8, 0x2FBC,
+    0x87D9, 0x87D9, 0x2FBF, 0x87DA, 0x87DA, 0x3810, 0x87DB, 0x87DB, 0x2FB1,
+    0x87DC, 0x87DC, 0x2FB9, 0x87DD, 0x87DD, 0x2FC3, 0x87DE, 0x87DE, 0x2E4C,
+    0x87DF, 0x87DF, 0x2FB5, 0x87E0, 0x87E0, 0x1526, 0x87E1, 0x87E1, 0x2A13,
+    0x87E2, 0x87E2, 0x2FB0, 0x87E3, 0x87E3, 0x2FBD, 0x87E4, 0x87E4, 0x2FB7,
+    0x87E5, 0x87E5, 0x2FB4, 0x87E6, 0x87E6, 0x2FAF, 0x87E7, 0x87E7, 0x2FAE,
+    0x87E8, 0x87E8, 0x2FC2, 0x87EA, 0x87EA, 0x2FB3, 0x87EB, 0x87EB, 0x2FB2,
+    0x87EC, 0x87EC, 0x1524, 0x87ED, 0x87ED, 0x2FBB, 0x87EE, 0x87EE, 0x380D,
+    0x87EF, 0x87EF, 0x1523, 0x87F2, 0x87F2, 0x1525, 0x87F3, 0x87F3, 0x2FB6,
+    0x87F4, 0x87F4, 0x2FC1, 0x87F5, 0x87F5, 0x3FAE, 0x87F6, 0x87F7, 0x310A,
+    0x87F9, 0x87F9, 0x15BE, 0x87FA, 0x87FA, 0x3108, 0x87FB, 0x87FB, 0x15BB,
+    0x87FC, 0x87FC, 0x3110, 0x87FE, 0x87FE, 0x15BF, 0x87FF, 0x87FF, 0x3112,
+    0x8800, 0x8800, 0x3107, 0x8801, 0x8801, 0x2FC0, 0x8802, 0x8802, 0x3114,
+    0x8803, 0x8803, 0x3109, 0x8804, 0x8804, 0x3EAF, 0x8805, 0x8805, 0x15BC,
+    0x8806, 0x8806, 0x310F, 0x8808, 0x8808, 0x3111, 0x8809, 0x8809, 0x310C,
+    0x880A, 0x880A, 0x3113, 0x880B, 0x880B, 0x310E, 0x880C, 0x880C, 0x310D,
+    0x880D, 0x880D, 0x15BD, 0x880F, 0x880F, 0x3811, 0x8810, 0x8811, 0x322C,
+    0x8813, 0x8813, 0x322F, 0x8814, 0x8815, 0x163F, 0x8816, 0x8816, 0x3230,
+    0x8817, 0x8817, 0x322E, 0x8818, 0x8818, 0x3F7A, 0x8819, 0x8819, 0x322B,
+    0x881B, 0x881B, 0x3306, 0x881C, 0x881C, 0x3309, 0x881D, 0x881D, 0x3305,
+    0x881F, 0x881F, 0x168B, 0x8820, 0x8820, 0x3307, 0x8821, 0x8821, 0x168A,
+    0x8822, 0x8822, 0x1689, 0x8823, 0x8823, 0x1688, 0x8824, 0x8824, 0x3308,
+    0x8825, 0x8825, 0x33B1, 0x8826, 0x8826, 0x33AF, 0x8827, 0x8827, 0x3E07,
+    0x8828, 0x8828, 0x33AE, 0x8829, 0x8829, 0x3304, 0x882A, 0x882A, 0x33B0,
+    0x882B, 0x882B, 0x330A, 0x882C, 0x882C, 0x33AD, 0x882D, 0x882D, 0x3B8B,
+    0x882E, 0x882E, 0x3437, 0x882F, 0x882F, 0x3415, 0x8830, 0x8830, 0x3435,
+    0x8831, 0x8831, 0x1709, 0x8832, 0x8832, 0x3436, 0x8833, 0x8833, 0x3438,
+    0x8835, 0x8835, 0x349A, 0x8836, 0x8836, 0x1728, 0x8837, 0x8837, 0x3499,
+    0x8838, 0x8838, 0x3498, 0x8839, 0x8839, 0x1729, 0x883B, 0x883B, 0x1747,
+    0x883C, 0x883C, 0x3508, 0x883D, 0x883D, 0x3520, 0x883E, 0x883E, 0x351F,
+    0x883F, 0x883F, 0x3521, 0x8840, 0x8840, 0x0410, 0x8841, 0x8841, 0x1BFE,
+    0x8842, 0x8842, 0x3F5A, 0x8843, 0x8844, 0x1DFA, 0x8845, 0x8846, 0x3816,
+    0x8848, 0x8848, 0x22D3, 0x884A, 0x884A, 0x330B, 0x884B, 0x884B, 0x349B,
+    0x884C, 0x884C, 0x0411, 0x884D, 0x884D, 0x0803, 0x884E, 0x884E, 0x1BFF,
+    0x884F, 0x884F, 0x3844, 0x8852, 0x8852, 0x204F, 0x8853, 0x8853, 0x0B94,
+    0x8855, 0x8855, 0x22D5, 0x8856, 0x8856, 0x22D4, 0x8857, 0x8857, 0x0D51,
+    0x8859, 0x8859, 0x0EFA, 0x885A, 0x885A, 0x2A2F, 0x885B, 0x885B, 0x120A,
+    0x885D, 0x885D, 0x120B, 0x885E, 0x885E, 0x381B, 0x8860, 0x8860, 0x3A46,
+    0x8861, 0x8861, 0x1345, 0x8862, 0x8862, 0x172A, 0x8863, 0x8863, 0x0412,
+    0x8864, 0x8864, 0x4502, 0x8865, 0x8865, 0x3DFC, 0x8867, 0x8867, 0x1C00,
+    0x8868, 0x8868, 0x068C, 0x8869, 0x8869, 0x1C02, 0x886A, 0x886A, 0x1C01,
+    0x886B, 0x886B, 0x0804, 0x886D, 0x886D, 0x1DFC, 0x886E, 0x886E, 0x3B8E,
+    0x886F, 0x886F, 0x1E03, 0x8870, 0x8870, 0x09B8, 0x8871, 0x8871, 0x1E01,
+    0x8872, 0x8872, 0x1DFF, 0x8874, 0x8874, 0x1E06, 0x8875, 0x8876, 0x1DFD,
+    0x8877, 0x8877, 0x09B9, 0x8879, 0x8879, 0x09BD, 0x887C, 0x887C, 0x1E07,
+    0x887D, 0x887D, 0x09BC, 0x887E, 0x887E, 0x1E05, 0x887F, 0x887F, 0x1E02,
+    0x8880, 0x8880, 0x1E00, 0x8881, 0x8882, 0x09BA, 0x8883, 0x8883, 0x1E04,
+    0x8884, 0x8884, 0x42F7, 0x8887, 0x8887, 0x3B90, 0x8888, 0x8888, 0x0B96,
+    0x8889, 0x8889, 0x2050, 0x888B, 0x888B, 0x0B9B, 0x888C, 0x888C, 0x2060,
+    0x888D, 0x888D, 0x0B9A, 0x888E, 0x888E, 0x2062, 0x8891, 0x8891, 0x2056,
+    0x8892, 0x8892, 0x0B98, 0x8893, 0x8893, 0x2061, 0x8895, 0x8895, 0x2051,
+    0x8896, 0x8896, 0x0B99, 0x8897, 0x8897, 0x205D, 0x8898, 0x8898, 0x2059,
+    0x8899, 0x8899, 0x205B, 0x889A, 0x889A, 0x2055, 0x889B, 0x889B, 0x205C,
+    0x889C, 0x889C, 0x381C, 0x889E, 0x889E, 0x0B95, 0x889F, 0x889F, 0x2058,
+    0x88A0, 0x88A0, 0x3FA0, 0x88A1, 0x88A1, 0x2057, 0x88A2, 0x88A2, 0x2053,
+    0x88A4, 0x88A4, 0x205E, 0x88A7, 0x88A7, 0x205A, 0x88A8, 0x88A8, 0x2052,
+    0x88AA, 0x88AA, 0x2054, 0x88AB, 0x88AB, 0x0B97, 0x88AC, 0x88AC, 0x205F,
+    0x88AE, 0x88AE, 0x4775, 0x88B1, 0x88B1, 0x0D54, 0x88B2, 0x88B2, 0x22E0,
+    0x88B4, 0x88B5, 0x381E, 0x88B6, 0x88B6, 0x22DC, 0x88B7, 0x88B7, 0x22DE,
+    0x88B8, 0x88B8, 0x22D9, 0x88B9, 0x88B9, 0x22D8, 0x88BA, 0x88BA, 0x22D6,
+    0x88BC, 0x88BC, 0x22DD, 0x88BD, 0x88BD, 0x22DF, 0x88BE, 0x88BE, 0x22DB,
+    0x88BF, 0x88BF, 0x3B91, 0x88C0, 0x88C0, 0x22DA, 0x88C1, 0x88C2, 0x0D52,
+    0x88C5, 0x88C5, 0x3820, 0x88C7, 0x88C7, 0x3EB1, 0x88C9, 0x88C9, 0x22E2,
+    0x88CA, 0x88CA, 0x0F02, 0x88CB, 0x88CB, 0x2578, 0x88CC, 0x88CC, 0x257E,
+    0x88CD, 0x88CE, 0x2579, 0x88CF, 0x88CF, 0x36EA, 0x88D0, 0x88D0, 0x257F,
+    0x88D2, 0x88D2, 0x0F04, 0x88D4, 0x88D4, 0x0EFC, 0x88D5, 0x88D5, 0x0F03,
+    0x88D6, 0x88D6, 0x2577, 0x88D7, 0x88D7, 0x22D7, 0x88D8, 0x88D8, 0x0EFF,
+    0x88D9, 0x88D9, 0x0EFD, 0x88DA, 0x88DA, 0x257D, 0x88DB, 0x88DB, 0x257C,
+    0x88DC, 0x88DC, 0x0EFE, 0x88DD, 0x88DD, 0x0F00, 0x88DE, 0x88DE, 0x257B,
+    0x88DF, 0x88DF, 0x0EFB, 0x88E1, 0x88E1, 0x0F01, 0x88E6, 0x88E6, 0x3B92,
+    0x88E7, 0x88E7, 0x27F0, 0x88E8, 0x88E8, 0x10A2, 0x88EB, 0x88EB, 0x27FB,
+    0x88EC, 0x88EC, 0x27FA, 0x88EE, 0x88EE, 0x27F5, 0x88EF, 0x88EF, 0x10A4,
+    0x88F0, 0x88F0, 0x27F9, 0x88F1, 0x88F2, 0x27F1, 0x88F3, 0x88F3, 0x109C,
+    0x88F4, 0x88F4, 0x109E, 0x88F5, 0x88F5, 0x3E08, 0x88F6, 0x88F6, 0x27F7,
+    0x88F7, 0x88F7, 0x27EF, 0x88F8, 0x88F8, 0x10A0, 0x88F9, 0x88F9, 0x109F,
+    0x88FA, 0x88FA, 0x27F3, 0x88FB, 0x88FB, 0x27F8, 0x88FC, 0x88FC, 0x27F6,
+    0x88FD, 0x88FD, 0x10A1, 0x88FE, 0x88FE, 0x27F4, 0x88FF, 0x88FF, 0x4776,
+    0x8900, 0x8900, 0x42FA, 0x8901, 0x8901, 0x22E1, 0x8902, 0x8902, 0x109D,
+    0x8905, 0x8905, 0x2A30, 0x8906, 0x8906, 0x2A37, 0x8907, 0x8907, 0x120D,
+    0x8909, 0x8909, 0x2A3B, 0x890A, 0x890A, 0x1211, 0x890B, 0x890B, 0x2A33,
+    0x890C, 0x890C, 0x2A31, 0x890E, 0x890E, 0x2A3A, 0x8910, 0x8910, 0x120C,
+    0x8911, 0x8911, 0x2A39, 0x8912, 0x8913, 0x120E, 0x8914, 0x8914, 0x2A32,
+    0x8915, 0x8915, 0x1210, 0x8916, 0x8916, 0x2A38, 0x8917, 0x8919, 0x2A34,
+    0x891A, 0x891A, 0x10A3, 0x891E, 0x891E, 0x2C77, 0x891F, 0x891F, 0x2C83,
+    0x8921, 0x8921, 0x134A, 0x8922, 0x8922, 0x2C7E, 0x8923, 0x8923, 0x2C80,
+    0x8924, 0x8924, 0x4777, 0x8925, 0x8925, 0x1348, 0x8926, 0x8926, 0x2C78,
+    0x8927, 0x8927, 0x2C7C, 0x8929, 0x8929, 0x2C7F, 0x892A, 0x892A, 0x1346,
+    0x892B, 0x892B, 0x1349, 0x892C, 0x892C, 0x2C82, 0x892D, 0x892E, 0x2C7A,
+    0x892F, 0x892F, 0x2C81, 0x8930, 0x8930, 0x2C79, 0x8931, 0x8931, 0x2C7D,
+    0x8932, 0x8932, 0x1347, 0x8933, 0x8933, 0x2E4F, 0x8935, 0x8935, 0x2E4E,
+    0x8936, 0x8936, 0x1472, 0x8937, 0x8937, 0x2E54, 0x8938, 0x8938, 0x1474,
+    0x893B, 0x893B, 0x1471, 0x893C, 0x893C, 0x2E50, 0x893D, 0x893D, 0x1475,
+    0x893E, 0x893E, 0x2E51, 0x8941, 0x8941, 0x2E52, 0x8942, 0x8942, 0x2E55,
+    0x8943, 0x8943, 0x3E16, 0x8944, 0x8944, 0x1473, 0x8946, 0x8946, 0x2FC8,
+    0x8947, 0x8947, 0x43E3, 0x8949, 0x8949, 0x2FCB, 0x894B, 0x894B, 0x2FC5,
+    0x894C, 0x894C, 0x2FC7, 0x894D, 0x894D, 0x3B94, 0x894F, 0x894F, 0x2FC6,
+    0x8950, 0x8951, 0x2FC9, 0x8952, 0x8952, 0x2E53, 0x8953, 0x8953, 0x2FC4,
+    0x8954, 0x8954, 0x3B96, 0x8956, 0x8956, 0x15C2, 0x8957, 0x8957, 0x3118,
+    0x8958, 0x8958, 0x311B, 0x8959, 0x8959, 0x311D, 0x895A, 0x895B, 0x3116,
+    0x895C, 0x895C, 0x311A, 0x895D, 0x895D, 0x311C, 0x895E, 0x895E, 0x15C3,
+    0x895F, 0x895F, 0x15C1, 0x8960, 0x8960, 0x15C0, 0x8961, 0x8961, 0x3119,
+    0x8962, 0x8962, 0x3115, 0x8963, 0x8963, 0x3231, 0x8964, 0x8964, 0x1641,
+    0x8965, 0x8965, 0x3B93, 0x8966, 0x8966, 0x3232, 0x8969, 0x8969, 0x330D,
+    0x896A, 0x896A, 0x168C, 0x896B, 0x896B, 0x330F, 0x896C, 0x896C, 0x168D,
+    0x896D, 0x896D, 0x330C, 0x896E, 0x896E, 0x330E, 0x896F, 0x896F, 0x16D6,
+    0x8971, 0x8971, 0x33B2, 0x8972, 0x8972, 0x16D5, 0x8973, 0x8973, 0x343B,
+    0x8974, 0x8974, 0x343A, 0x8976, 0x8976, 0x3439, 0x8977, 0x8977, 0x3DEA,
+    0x8979, 0x897A, 0x34E2, 0x897B, 0x897B, 0x34E5, 0x897C, 0x897C, 0x34E4,
+    0x897E, 0x897E, 0x1819, 0x897F, 0x897F, 0x0413, 0x8980, 0x8980, 0x4708,
+    0x8981, 0x8981, 0x0805, 0x8982, 0x8982, 0x2063, 0x8983, 0x8983, 0x0D55,
+    0x8985, 0x8985, 0x2580, 0x8986, 0x8986, 0x1527, 0x8987, 0x8987, 0x3822,
+    0x8988, 0x8988, 0x311E, 0x8989, 0x8989, 0x3FE9, 0x898A, 0x898A, 0x3823,
+    0x898B, 0x898B, 0x0508, 0x898F, 0x898F, 0x0B9D, 0x8991, 0x8991, 0x4778,
+    0x8993, 0x8993, 0x0B9C, 0x8994, 0x8994, 0x3FE0, 0x8995, 0x8995, 0x22E3,
+    0x8996, 0x8996, 0x0D56, 0x8997, 0x8997, 0x22E5, 0x8998, 0x8998, 0x22E4,
+    0x899B, 0x899B, 0x2581, 0x899C, 0x899C, 0x0F05, 0x899D, 0x899D, 0x27FC,
+    0x899E, 0x899E, 0x27FF, 0x899F, 0x899F, 0x27FE, 0x89A1, 0x89A1, 0x27FD,
+    0x89A2, 0x89A2, 0x2A3C, 0x89A3, 0x89A3, 0x2A3E, 0x89A4, 0x89A4, 0x2A3D,
+    0x89A5, 0x89A5, 0x3D93, 0x89A6, 0x89A6, 0x134C, 0x89A7, 0x89A7, 0x3826,
+    0x89A9, 0x89A9, 0x3825, 0x89AA, 0x89AA, 0x134B, 0x89AC, 0x89AC, 0x1476,
+    0x89AD, 0x89AD, 0x2E56, 0x89AE, 0x89AE, 0x2E58, 0x89AF, 0x89AF, 0x2E57,
+    0x89B2, 0x89B2, 0x1528, 0x89B6, 0x89B6, 0x3120, 0x89B7, 0x89B7, 0x311F,
+    0x89B9, 0x89B9, 0x3233, 0x89BA, 0x89BA, 0x1642, 0x89BC, 0x89BC, 0x3827,
+    0x89BD, 0x89BD, 0x168E, 0x89BE, 0x89BE, 0x33B4, 0x89BF, 0x89BF, 0x33B3,
+    0x89C0, 0x89C0, 0x1748, 0x89C1, 0x89C1, 0x4503, 0x89C6, 0x89C6, 0x4566,
+    0x89D2, 0x89D2, 0x0509, 0x89D3, 0x89D3, 0x1C03, 0x89D4, 0x89D4, 0x0806,
+    0x89D5, 0x89D5, 0x2066, 0x89D6, 0x89D6, 0x2064, 0x89D9, 0x89D9, 0x2065,
+    0x89DA, 0x89DB, 0x22E7, 0x89DC, 0x89DC, 0x2588, 0x89DD, 0x89DD, 0x22E6,
+    0x89DF, 0x89DF, 0x2582, 0x89E0, 0x89E0, 0x2586, 0x89E1, 0x89E1, 0x2585,
+    0x89E2, 0x89E2, 0x2587, 0x89E3, 0x89E3, 0x0F06, 0x89E4, 0x89E4, 0x2584,
+    0x89E5, 0x89E5, 0x2583, 0x89E6, 0x89E6, 0x2589, 0x89E7, 0x89E7, 0x3829,
+    0x89E8, 0x89E8, 0x2802, 0x89E9, 0x89E9, 0x2800, 0x89EB, 0x89EB, 0x2801,
+    0x89EC, 0x89EC, 0x2A41, 0x89ED, 0x89ED, 0x2A3F, 0x89F0, 0x89F0, 0x2A40,
+    0x89F1, 0x89F1, 0x2C84, 0x89F2, 0x89F3, 0x2E59, 0x89F4, 0x89F4, 0x1529,
+    0x89F6, 0x89F6, 0x3121, 0x89F7, 0x89F7, 0x3234, 0x89F8, 0x89F8, 0x1643,
+    0x89FA, 0x89FA, 0x3310, 0x89FB, 0x89FB, 0x33B5, 0x89FC, 0x89FC, 0x16D7,
+    0x89FE, 0x89FE, 0x343C, 0x89FF, 0x89FF, 0x34E6, 0x8A00, 0x8A00, 0x050A,
+    0x8A02, 0x8A03, 0x0808, 0x8A04, 0x8A04, 0x1C04, 0x8A07, 0x8A07, 0x1C05,
+    0x8A08, 0x8A08, 0x0807, 0x8A0A, 0x8A0A, 0x09C3, 0x8A0C, 0x8A0C, 0x09C1,
+    0x8A0E, 0x8A0E, 0x09C0, 0x8A0F, 0x8A0F, 0x09C7, 0x8A10, 0x8A10, 0x09BF,
+    0x8A11, 0x8A11, 0x09C8, 0x8A12, 0x8A12, 0x1E08, 0x8A13, 0x8A13, 0x09C5,
+    0x8A15, 0x8A15, 0x09C2, 0x8A16, 0x8A16, 0x09C6, 0x8A17, 0x8A17, 0x09C4,
+    0x8A18, 0x8A18, 0x09BE, 0x8A1B, 0x8A1B, 0x0BA5, 0x8A1C, 0x8A1C, 0x3BA3,
+    0x8A1D, 0x8A1D, 0x0B9F, 0x8A1E, 0x8A1E, 0x206A, 0x8A1F, 0x8A1F, 0x0BA4,
+    0x8A22, 0x8A22, 0x0BA6, 0x8A23, 0x8A23, 0x0BA0, 0x8A25, 0x8A25, 0x0BA1,
+    0x8A27, 0x8A27, 0x2068, 0x8A29, 0x8A29, 0x43E5, 0x8A2A, 0x8A2A, 0x0B9E,
+    0x8A2B, 0x8A2B, 0x3BD1, 0x8A2C, 0x8A2C, 0x2069, 0x8A2D, 0x8A2D, 0x0BA3,
+    0x8A30, 0x8A30, 0x2067, 0x8A31, 0x8A31, 0x0BA2, 0x8A34, 0x8A34, 0x0D61,
+    0x8A36, 0x8A36, 0x0D63, 0x8A38, 0x8A38, 0x477A, 0x8A39, 0x8A39, 0x22EB,
+    0x8A3A, 0x8A3A, 0x0D62, 0x8A3B, 0x8A3B, 0x0D57, 0x8A3C, 0x8A3C, 0x0D5B,
+    0x8A3D, 0x8A3D, 0x3BA2, 0x8A3E, 0x8A3E, 0x0F19, 0x8A3F, 0x8A3F, 0x258E,
+    0x8A40, 0x8A40, 0x22ED, 0x8A41, 0x8A41, 0x0D5C, 0x8A44, 0x8A45, 0x22F0,
+    0x8A46, 0x8A46, 0x0D60, 0x8A48, 0x8A48, 0x22F3, 0x8A49, 0x8A49, 0x3FF0,
+    0x8A4A, 0x8A4A, 0x22F5, 0x8A4C, 0x8A4C, 0x22F6, 0x8A4D, 0x8A4D, 0x22EA,
+    0x8A4E, 0x8A4E, 0x22E9, 0x8A4F, 0x8A4F, 0x22F7, 0x8A50, 0x8A50, 0x0D5F,
+    0x8A51, 0x8A51, 0x22F4, 0x8A52, 0x8A52, 0x22F2, 0x8A54, 0x8A54, 0x0D5D,
+    0x8A55, 0x8A55, 0x0D59, 0x8A56, 0x8A56, 0x0D64, 0x8A57, 0x8A58, 0x22EE,
+    0x8A59, 0x8A59, 0x22EC, 0x8A5B, 0x8A5B, 0x0D5E, 0x8A5E, 0x8A5E, 0x0D5A,
+    0x8A60, 0x8A60, 0x0D58, 0x8A61, 0x8A61, 0x258D, 0x8A62, 0x8A62, 0x0F14,
+    0x8A63, 0x8A63, 0x0F0F, 0x8A66, 0x8A66, 0x0F0A, 0x8A67, 0x8A67, 0x3F8E,
+    0x8A68, 0x8A68, 0x0F1A, 0x8A69, 0x8A69, 0x0F0B, 0x8A6B, 0x8A6B, 0x0F07,
+    0x8A6C, 0x8A6C, 0x0F16, 0x8A6D, 0x8A6D, 0x0F13, 0x8A6E, 0x8A6E, 0x0F15,
+    0x8A70, 0x8A70, 0x0F0C, 0x8A71, 0x8A71, 0x0F11, 0x8A72, 0x8A73, 0x0F08,
+    0x8A74, 0x8A74, 0x2595, 0x8A75, 0x8A75, 0x2592, 0x8A76, 0x8A76, 0x258A,
+    0x8A77, 0x8A77, 0x258F, 0x8A79, 0x8A79, 0x0F17, 0x8A7A, 0x8A7A, 0x2596,
+    0x8A7B, 0x8A7B, 0x0F18, 0x8A7C, 0x8A7C, 0x0F0E, 0x8A7E, 0x8A7E, 0x3FA5,
+    0x8A7F, 0x8A7F, 0x258C, 0x8A81, 0x8A81, 0x2594, 0x8A82, 0x8A82, 0x2590,
+    0x8A83, 0x8A83, 0x2593, 0x8A84, 0x8A84, 0x2591, 0x8A85, 0x8A85, 0x0F12,
+    0x8A86, 0x8A86, 0x258B, 0x8A87, 0x8A87, 0x0F0D, 0x8A8B, 0x8A8B, 0x2805,
+    0x8A8C, 0x8A8C, 0x10A6, 0x8A8D, 0x8A8D, 0x10A9, 0x8A8F, 0x8A8F, 0x2807,
+    0x8A90, 0x8A90, 0x382F, 0x8A91, 0x8A91, 0x10B1, 0x8A92, 0x8A92, 0x2806,
+    0x8A93, 0x8A93, 0x10AB, 0x8A94, 0x8A94, 0x477B, 0x8A95, 0x8A95, 0x1216,
+    0x8A96, 0x8A96, 0x2808, 0x8A98, 0x8A98, 0x10B0, 0x8A99, 0x8A99, 0x2804,
+    0x8A9A, 0x8A9A, 0x10B2, 0x8A9C, 0x8A9C, 0x382C, 0x8A9E, 0x8A9E, 0x10A7,
+    0x8AA0, 0x8AA0, 0x0F10, 0x8AA1, 0x8AA1, 0x10AA, 0x8AA3, 0x8AA3, 0x10A8,
+    0x8AA4, 0x8AA4, 0x10AC, 0x8AA5, 0x8AA5, 0x10AE, 0x8AA6, 0x8AA6, 0x10A5,
+    0x8AA7, 0x8AA7, 0x10B3, 0x8AA8, 0x8AA8, 0x10AF, 0x8AA9, 0x8AA9, 0x383D,
+    0x8AAA, 0x8AAA, 0x10AD, 0x8AAB, 0x8AAB, 0x2803, 0x8AAF, 0x8AAF, 0x3841,
+    0x8AB0, 0x8AB0, 0x121D, 0x8AB2, 0x8AB2, 0x1219, 0x8AB4, 0x8AB4, 0x477C,
+    0x8AB6, 0x8AB6, 0x1220, 0x8AB8, 0x8AB8, 0x2A44, 0x8AB9, 0x8AB9, 0x1221,
+    0x8ABA, 0x8ABA, 0x2A50, 0x8ABB, 0x8ABB, 0x2A49, 0x8ABC, 0x8ABC, 0x1212,
+    0x8ABD, 0x8ABD, 0x2A51, 0x8ABE, 0x8ABE, 0x2A4B, 0x8ABF, 0x8ABF, 0x121C,
+    0x8AC0, 0x8AC0, 0x2A4C, 0x8AC2, 0x8AC2, 0x121B, 0x8AC3, 0x8AC3, 0x2A4F,
+    0x8AC4, 0x8AC4, 0x1215, 0x8AC5, 0x8AC5, 0x2A4D, 0x8AC6, 0x8AC6, 0x2A43,
+    0x8AC7, 0x8AC7, 0x1214, 0x8AC8, 0x8AC8, 0x2C8F, 0x8AC9, 0x8AC9, 0x121A,
+    0x8ACB, 0x8ACB, 0x1217, 0x8ACD, 0x8ACD, 0x121F, 0x8ACF, 0x8ACF, 0x2A42,
+    0x8AD1, 0x8AD1, 0x2A46, 0x8AD2, 0x8AD2, 0x1213, 0x8AD3, 0x8AD3, 0x2A45,
+    0x8AD4, 0x8AD5, 0x2A47, 0x8AD6, 0x8AD6, 0x121E, 0x8AD7, 0x8AD7, 0x2A4A,
+    0x8AD8, 0x8AD8, 0x2A4E, 0x8AD9, 0x8AD9, 0x2A52, 0x8ADA, 0x8ADA, 0x39C2,
+    0x8ADB, 0x8ADB, 0x1222, 0x8ADC, 0x8ADC, 0x1352, 0x8ADD, 0x8ADD, 0x2C8A,
+    0x8ADE, 0x8ADE, 0x2C90, 0x8ADF, 0x8ADF, 0x2C8D, 0x8AE0, 0x8AE0, 0x2C85,
+    0x8AE1, 0x8AE1, 0x2C91, 0x8AE2, 0x8AE2, 0x2C86, 0x8AE4, 0x8AE4, 0x2C8C,
+    0x8AE6, 0x8AE6, 0x134D, 0x8AE7, 0x8AE7, 0x1353, 0x8AE8, 0x8AE8, 0x2C92,
+    0x8AEA, 0x8AEA, 0x3DD9, 0x8AEB, 0x8AEB, 0x134F, 0x8AED, 0x8AED, 0x1359,
+    0x8AEE, 0x8AEE, 0x1354, 0x8AEF, 0x8AEF, 0x2C94, 0x8AF0, 0x8AF0, 0x2C8E,
+    0x8AF1, 0x8AF1, 0x1350, 0x8AF2, 0x8AF2, 0x2C87, 0x8AF3, 0x8AF3, 0x135A,
+    0x8AF4, 0x8AF5, 0x2C88, 0x8AF6, 0x8AF6, 0x135B, 0x8AF7, 0x8AF7, 0x1358,
+    0x8AF8, 0x8AF8, 0x1218, 0x8AFA, 0x8AFA, 0x134E, 0x8AFB, 0x8AFB, 0x2C95,
+    0x8AFC, 0x8AFC, 0x135C, 0x8AFE, 0x8AFE, 0x1355, 0x8AFF, 0x8AFF, 0x2C93,
+    0x8B00, 0x8B00, 0x1351, 0x8B01, 0x8B02, 0x1356, 0x8B04, 0x8B04, 0x147E,
+    0x8B05, 0x8B05, 0x2E5F, 0x8B06, 0x8B06, 0x2E68, 0x8B07, 0x8B07, 0x2E65,
+    0x8B08, 0x8B08, 0x2E67, 0x8B0A, 0x8B0A, 0x147B, 0x8B0B, 0x8B0B, 0x2E60,
+    0x8B0C, 0x8B0C, 0x3836, 0x8B0D, 0x8B0D, 0x2E66, 0x8B0E, 0x8B0E, 0x1477,
+    0x8B0F, 0x8B0F, 0x2E62, 0x8B10, 0x8B10, 0x147F, 0x8B11, 0x8B11, 0x2E5E,
+    0x8B12, 0x8B12, 0x2E63, 0x8B13, 0x8B13, 0x2E6A, 0x8B14, 0x8B14, 0x2C8B,
+    0x8B15, 0x8B15, 0x2E64, 0x8B16, 0x8B16, 0x2E5D, 0x8B17, 0x8B17, 0x1478,
+    0x8B18, 0x8B18, 0x2E5C, 0x8B19, 0x8B19, 0x1479, 0x8B1A, 0x8B1A, 0x2E6B,
+    0x8B1B, 0x8B1B, 0x147A, 0x8B1C, 0x8B1C, 0x2E69, 0x8B1D, 0x8B1D, 0x147D,
+    0x8B1E, 0x8B1E, 0x2E5B, 0x8B1F, 0x8B1F, 0x3837, 0x8B20, 0x8B20, 0x147C,
+    0x8B22, 0x8B22, 0x2E61, 0x8B23, 0x8B23, 0x2FCE, 0x8B24, 0x8B24, 0x2FDC,
+    0x8B25, 0x8B25, 0x2FD7, 0x8B26, 0x8B26, 0x2FD9, 0x8B27, 0x8B27, 0x2FCD,
+    0x8B28, 0x8B28, 0x152A, 0x8B2A, 0x8B2A, 0x2FCC, 0x8B2B, 0x8B2B, 0x152D,
+    0x8B2C, 0x8B2C, 0x152C, 0x8B2D, 0x8B2D, 0x3F99, 0x8B2E, 0x8B2E, 0x2FDB,
+    0x8B2F, 0x8B2F, 0x2FD3, 0x8B30, 0x8B30, 0x2FD0, 0x8B31, 0x8B31, 0x2FD6,
+    0x8B33, 0x8B33, 0x2FCF, 0x8B35, 0x8B35, 0x2FD1, 0x8B36, 0x8B36, 0x2FDA,
+    0x8B37, 0x8B37, 0x2FD8, 0x8B39, 0x8B39, 0x152B, 0x8B3A, 0x8B3A, 0x2FDF,
+    0x8B3B, 0x8B3B, 0x2FDD, 0x8B3C, 0x8B3C, 0x2FD4, 0x8B3D, 0x8B3D, 0x2FDE,
+    0x8B3E, 0x8B3E, 0x2FD5, 0x8B3F, 0x8B3F, 0x383A, 0x8B40, 0x8B40, 0x3125,
+    0x8B41, 0x8B41, 0x15C4, 0x8B42, 0x8B42, 0x312C, 0x8B43, 0x8B43, 0x3FF2,
+    0x8B45, 0x8B45, 0x3313, 0x8B46, 0x8B46, 0x15CB, 0x8B47, 0x8B47, 0x2FD2,
+    0x8B48, 0x8B48, 0x3123, 0x8B49, 0x8B49, 0x15C7, 0x8B4A, 0x8B4A, 0x3124,
+    0x8B4B, 0x8B4B, 0x3129, 0x8B4C, 0x8B4D, 0x383B, 0x8B4E, 0x8B4F, 0x15C9,
+    0x8B50, 0x8B50, 0x3122, 0x8B51, 0x8B51, 0x312B, 0x8B52, 0x8B52, 0x312D,
+    0x8B53, 0x8B53, 0x3126, 0x8B54, 0x8B54, 0x3128, 0x8B55, 0x8B55, 0x312A,
+    0x8B56, 0x8B56, 0x3127, 0x8B57, 0x8B57, 0x312E, 0x8B58, 0x8B58, 0x15C6,
+    0x8B59, 0x8B59, 0x15CC, 0x8B5A, 0x8B5A, 0x15C8, 0x8B5C, 0x8B5C, 0x15C5,
+    0x8B5D, 0x8B5D, 0x3237, 0x8B5E, 0x8B5E, 0x3DB8, 0x8B5F, 0x8B5F, 0x1648,
+    0x8B60, 0x8B60, 0x3235, 0x8B62, 0x8B62, 0x3DD4, 0x8B63, 0x8B63, 0x3239,
+    0x8B65, 0x8B65, 0x323A, 0x8B66, 0x8B66, 0x1646, 0x8B67, 0x8B67, 0x323B,
+    0x8B68, 0x8B68, 0x3238, 0x8B69, 0x8B69, 0x3BF7, 0x8B6A, 0x8B6A, 0x3236,
+    0x8B6B, 0x8B6B, 0x1649, 0x8B6C, 0x8B6C, 0x1645, 0x8B6D, 0x8B6D, 0x323C,
+    0x8B6F, 0x8B6F, 0x1647, 0x8B70, 0x8B70, 0x1644, 0x8B74, 0x8B74, 0x168F,
+    0x8B77, 0x8B77, 0x1690, 0x8B78, 0x8B78, 0x3312, 0x8B79, 0x8B79, 0x3311,
+    0x8B7A, 0x8B7B, 0x3314, 0x8B7D, 0x8B7D, 0x1691, 0x8B7E, 0x8B7E, 0x33B6,
+    0x8B7F, 0x8B7F, 0x33BB, 0x8B80, 0x8B80, 0x16D8, 0x8B81, 0x8B81, 0x3D8D,
+    0x8B82, 0x8B82, 0x33B8, 0x8B84, 0x8B84, 0x33B7, 0x8B85, 0x8B85, 0x33BA,
+    0x8B86, 0x8B86, 0x33B9, 0x8B88, 0x8B88, 0x3440, 0x8B8A, 0x8B8A, 0x170A,
+    0x8B8B, 0x8B8B, 0x343F, 0x8B8C, 0x8B8C, 0x343D, 0x8B8E, 0x8B8E, 0x343E,
+    0x8B90, 0x8B90, 0x383F, 0x8B92, 0x8B92, 0x172C, 0x8B93, 0x8B93, 0x172B,
+    0x8B94, 0x8B95, 0x349C, 0x8B96, 0x8B96, 0x172D, 0x8B98, 0x8B99, 0x34E7,
+    0x8B9A, 0x8B9A, 0x1754, 0x8B9B, 0x8B9B, 0x3840, 0x8B9C, 0x8B9C, 0x175A,
+    0x8B9E, 0x8B9E, 0x3522, 0x8B9F, 0x8B9F, 0x353F, 0x8BA0, 0x8BA0, 0x4505,
+    0x8BBE, 0x8BBE, 0x4567, 0x8BE2, 0x8BE2, 0x4568, 0x8C37, 0x8C37, 0x050B,
+    0x8C39, 0x8C39, 0x206B, 0x8C3B, 0x8C3B, 0x206C, 0x8C3C, 0x8C3C, 0x2597,
+    0x8C3D, 0x8C3D, 0x2809, 0x8C3E, 0x8C3E, 0x2A53, 0x8C3F, 0x8C3F, 0x1481,
+    0x8C41, 0x8C41, 0x1480, 0x8C42, 0x8C42, 0x2FE0, 0x8C43, 0x8C43, 0x312F,
+    0x8C45, 0x8C45, 0x3441, 0x8C46, 0x8C46, 0x050C, 0x8C47, 0x8C47, 0x1E09,
+    0x8C48, 0x8C48, 0x09C9, 0x8C49, 0x8C49, 0x0BA7, 0x8C4A, 0x8C4A, 0x2599,
+    0x8C4B, 0x8C4B, 0x2598, 0x8C4C, 0x8C4C, 0x1223, 0x8C4D, 0x8C4D, 0x2A54,
+    0x8C4E, 0x8C4E, 0x1224, 0x8C4F, 0x8C4F, 0x2E6C, 0x8C50, 0x8C50, 0x152E,
+    0x8C51, 0x8C51, 0x477D, 0x8C54, 0x8C54, 0x1763, 0x8C55, 0x8C55, 0x050D,
+    0x8C56, 0x8C56, 0x1A48, 0x8C57, 0x8C57, 0x1E0A, 0x8C5A, 0x8C5A, 0x0BA8,
+    0x8C5C, 0x8C5D, 0x206D, 0x8C5F, 0x8C5F, 0x22F8, 0x8C61, 0x8C61, 0x0D65,
+    0x8C62, 0x8C62, 0x0F1B, 0x8C64, 0x8C64, 0x259B, 0x8C65, 0x8C65, 0x259A,
+    0x8C66, 0x8C66, 0x259C, 0x8C68, 0x8C69, 0x280A, 0x8C6A, 0x8C6A, 0x10B4,
+    0x8C6B, 0x8C6B, 0x135D, 0x8C6C, 0x8C6C, 0x1225, 0x8C6D, 0x8C6D, 0x135E,
+    0x8C6F, 0x8C6F, 0x2E70, 0x8C70, 0x8C70, 0x2E6D, 0x8C71, 0x8C71, 0x2E6F,
+    0x8C72, 0x8C72, 0x2E6E, 0x8C73, 0x8C73, 0x1482, 0x8C75, 0x8C75, 0x2FE1,
+    0x8C76, 0x8C76, 0x3131, 0x8C77, 0x8C77, 0x3130, 0x8C78, 0x8C78, 0x18E7,
+    0x8C79, 0x8C79, 0x09CB, 0x8C7A, 0x8C7A, 0x09CA, 0x8C7B, 0x8C7B, 0x1E0B,
+    0x8C7D, 0x8C7D, 0x206F, 0x8C80, 0x8C80, 0x22FA, 0x8C81, 0x8C81, 0x22F9,
+    0x8C82, 0x8C82, 0x0D66, 0x8C84, 0x8C85, 0x259E, 0x8C86, 0x8C86, 0x259D,
+    0x8C89, 0x8C89, 0x0F1D, 0x8C8A, 0x8C8A, 0x0F1C, 0x8C8C, 0x8C8C, 0x10B6,
+    0x8C8D, 0x8C8D, 0x10B5, 0x8C8F, 0x8C8F, 0x2A55, 0x8C90, 0x8C90, 0x2C98,
+    0x8C91, 0x8C92, 0x2C96, 0x8C93, 0x8C93, 0x135F, 0x8C94, 0x8C94, 0x2E72,
+    0x8C95, 0x8C95, 0x2E71, 0x8C97, 0x8C97, 0x2FE4, 0x8C98, 0x8C98, 0x2FE3,
+    0x8C99, 0x8C99, 0x2FE2, 0x8C9A, 0x8C9A, 0x3132, 0x8C9B, 0x8C9B, 0x3845,
+    0x8C9C, 0x8C9C, 0x3523, 0x8C9D, 0x8C9D, 0x050E, 0x8C9E, 0x8C9E, 0x080A,
+    0x8C9F, 0x8C9F, 0x3BAD, 0x8CA0, 0x8CA0, 0x080B, 0x8CA1, 0x8CA2, 0x09CC,
+    0x8CA3, 0x8CA3, 0x1E0D, 0x8CA4, 0x8CA4, 0x1E0C, 0x8CA5, 0x8CA5, 0x2070,
+    0x8CA7, 0x8CA7, 0x0BAE, 0x8CA8, 0x8CA8, 0x0BAC, 0x8CA9, 0x8CA9, 0x0BA9,
+    0x8CAA, 0x8CAA, 0x0BAD, 0x8CAB, 0x8CAB, 0x0BAB, 0x8CAC, 0x8CAC, 0x0BAA,
+    0x8CAD, 0x8CAD, 0x3FF1, 0x8CAF, 0x8CAF, 0x0D67, 0x8CB0, 0x8CB0, 0x22FD,
+    0x8CB2, 0x8CB2, 0x0F22, 0x8CB3, 0x8CB3, 0x0D69, 0x8CB4, 0x8CB4, 0x0D6E,
+    0x8CB5, 0x8CB5, 0x22FF, 0x8CB6, 0x8CB6, 0x0D70, 0x8CB7, 0x8CB7, 0x0D6F,
+    0x8CB8, 0x8CB8, 0x0D72, 0x8CB9, 0x8CB9, 0x22FE, 0x8CBA, 0x8CBA, 0x22FB,
+    0x8CBB, 0x8CBB, 0x0D6C, 0x8CBC, 0x8CBC, 0x0D68, 0x8CBD, 0x8CBD, 0x0D6A,
+    0x8CBE, 0x8CBE, 0x22FC, 0x8CBF, 0x8CBF, 0x0D71, 0x8CC0, 0x8CC0, 0x0D6D,
+    0x8CC1, 0x8CC1, 0x0D6B, 0x8CC2, 0x8CC2, 0x0F24, 0x8CC3, 0x8CC3, 0x0F23,
+    0x8CC4, 0x8CC4, 0x0F21, 0x8CC5, 0x8CC5, 0x0F25, 0x8CC7, 0x8CC8, 0x0F1F,
+    0x8CCA, 0x8CCA, 0x0F1E, 0x8CCC, 0x8CCC, 0x25A0, 0x8CCD, 0x8CCD, 0x3E99,
+    0x8CCF, 0x8CCF, 0x280D, 0x8CD1, 0x8CD2, 0x10B8, 0x8CD3, 0x8CD3, 0x10B7,
+    0x8CD4, 0x8CD4, 0x477E, 0x8CD5, 0x8CD5, 0x280C, 0x8CD6, 0x8CD6, 0x384B,
+    0x8CD7, 0x8CD7, 0x280E, 0x8CD9, 0x8CD9, 0x2A58, 0x8CDA, 0x8CDA, 0x2A5A,
+    0x8CDB, 0x8CDB, 0x3851, 0x8CDC, 0x8CDC, 0x122E, 0x8CDD, 0x8CDD, 0x2A5B,
+    0x8CDE, 0x8CDE, 0x1227, 0x8CDF, 0x8CDF, 0x2A57, 0x8CE0, 0x8CE0, 0x1226,
+    0x8CE1, 0x8CE1, 0x1230, 0x8CE2, 0x8CE3, 0x122C, 0x8CE4, 0x8CE4, 0x1229,
+    0x8CE5, 0x8CE5, 0x2A56, 0x8CE6, 0x8CE6, 0x1228, 0x8CE7, 0x8CE7, 0x2A5C,
+    0x8CE8, 0x8CE8, 0x2A59, 0x8CE9, 0x8CE9, 0x3BAE, 0x8CEA, 0x8CEA, 0x122F,
+    0x8CEB, 0x8CEB, 0x3F9C, 0x8CEC, 0x8CED, 0x122A, 0x8CEE, 0x8CEE, 0x2C9A,
+    0x8CF0, 0x8CF0, 0x2C9C, 0x8CF1, 0x8CF1, 0x2C9B, 0x8CF2, 0x8CF2, 0x477F,
+    0x8CF3, 0x8CF3, 0x2C9D, 0x8CF4, 0x8CF4, 0x1360, 0x8CF5, 0x8CF5, 0x2C99,
+    0x8CF7, 0x8CF7, 0x3FB1, 0x8CF8, 0x8CF8, 0x1486, 0x8CF9, 0x8CF9, 0x2E73,
+    0x8CFA, 0x8CFA, 0x1483, 0x8CFB, 0x8CFB, 0x1487, 0x8CFC, 0x8CFC, 0x1485,
+    0x8CFD, 0x8CFD, 0x1484, 0x8CFE, 0x8CFE, 0x2FE5, 0x8D00, 0x8D00, 0x2FE8,
+    0x8D02, 0x8D02, 0x2FE7, 0x8D03, 0x8D03, 0x384F, 0x8D04, 0x8D04, 0x2FE6,
+    0x8D05, 0x8D05, 0x152F, 0x8D06, 0x8D07, 0x3133, 0x8D08, 0x8D08, 0x15CD,
+    0x8D09, 0x8D09, 0x3135, 0x8D0A, 0x8D0A, 0x15CE, 0x8D0B, 0x8D0B, 0x4573,
+    0x8D0C, 0x8D0C, 0x3F96, 0x8D0D, 0x8D0D, 0x164B, 0x8D0F, 0x8D0F, 0x164A,
+    0x8D10, 0x8D10, 0x3316, 0x8D11, 0x8D11, 0x3853, 0x8D12, 0x8D12, 0x384E,
+    0x8D13, 0x8D13, 0x1692, 0x8D14, 0x8D14, 0x3317, 0x8D15, 0x8D15, 0x33BC,
+    0x8D16, 0x8D17, 0x16D9, 0x8D18, 0x8D18, 0x3E6F, 0x8D19, 0x8D19, 0x3442,
+    0x8D1B, 0x8D1B, 0x172F, 0x8D1C, 0x8D1C, 0x4780, 0x8D1D, 0x8D1D, 0x4506,
+    0x8D64, 0x8D64, 0x050F, 0x8D66, 0x8D66, 0x0BB0, 0x8D67, 0x8D67, 0x0BAF,
+    0x8D68, 0x8D69, 0x25A1, 0x8D6B, 0x8D6B, 0x10BA, 0x8D6C, 0x8D6C, 0x2C9E,
+    0x8D6D, 0x8D6D, 0x1231, 0x8D6E, 0x8D6E, 0x2C9F, 0x8D6F, 0x8D6F, 0x2E74,
+    0x8D70, 0x8D70, 0x0510, 0x8D72, 0x8D72, 0x1C06, 0x8D73, 0x8D73, 0x080D,
+    0x8D74, 0x8D74, 0x080C, 0x8D76, 0x8D76, 0x1E0E, 0x8D77, 0x8D77, 0x09CE,
+    0x8D78, 0x8D78, 0x1E0F, 0x8D79, 0x8D79, 0x2073, 0x8D7A, 0x8D7A, 0x39E1,
+    0x8D7B, 0x8D7B, 0x2072, 0x8D7D, 0x8D7D, 0x2071, 0x8D80, 0x8D80, 0x2301,
+    0x8D81, 0x8D81, 0x0D75, 0x8D82, 0x8D82, 0x3F69, 0x8D84, 0x8D84, 0x2300,
+    0x8D85, 0x8D85, 0x0D74, 0x8D89, 0x8D89, 0x2302, 0x8D8A, 0x8D8A, 0x0D73,
+    0x8D8C, 0x8D8C, 0x25A4, 0x8D8D, 0x8D8D, 0x25A7, 0x8D8E, 0x8D8F, 0x25A5,
+    0x8D90, 0x8D90, 0x25AA, 0x8D91, 0x8D91, 0x25A3, 0x8D92, 0x8D92, 0x25AB,
+    0x8D93, 0x8D94, 0x25A8, 0x8D95, 0x8D95, 0x10BC, 0x8D96, 0x8D96, 0x280F,
+    0x8D99, 0x8D99, 0x10BB, 0x8D9B, 0x8D9B, 0x2A60, 0x8D9C, 0x8D9C, 0x2A5E,
+    0x8D9F, 0x8D9F, 0x1232, 0x8DA0, 0x8DA0, 0x2A5D, 0x8DA1, 0x8DA1, 0x2A5F,
+    0x8DA3, 0x8DA3, 0x1233, 0x8DA5, 0x8DA5, 0x2CA0, 0x8DA6, 0x8DA6, 0x3FF7,
+    0x8DA7, 0x8DA7, 0x2CA1, 0x8DA8, 0x8DA8, 0x1488, 0x8DA9, 0x8DA9, 0x3856,
+    0x8DAA, 0x8DAA, 0x3137, 0x8DAB, 0x8DAB, 0x3139, 0x8DAC, 0x8DAC, 0x3136,
+    0x8DAD, 0x8DAD, 0x3138, 0x8DAE, 0x8DAE, 0x323D, 0x8DAF, 0x8DAF, 0x3318,
+    0x8DB2, 0x8DB2, 0x3509, 0x8DB3, 0x8DB3, 0x0511, 0x8DB4, 0x8DB4, 0x080E,
+    0x8DB5, 0x8DB5, 0x1E10, 0x8DB6, 0x8DB6, 0x1E12, 0x8DB7, 0x8DB7, 0x1E11,
+    0x8DB9, 0x8DB9, 0x2076, 0x8DBA, 0x8DBA, 0x0BB2, 0x8DBC, 0x8DBC, 0x2074,
+    0x8DBE, 0x8DBE, 0x0BB1, 0x8DBF, 0x8DBF, 0x2077, 0x8DC0, 0x8DC0, 0x436A,
+    0x8DC1, 0x8DC1, 0x2078, 0x8DC2, 0x8DC2, 0x2075, 0x8DC3, 0x8DC3, 0x4782,
+    0x8DC5, 0x8DC5, 0x230E, 0x8DC6, 0x8DC6, 0x0D7D, 0x8DC7, 0x8DC7, 0x2306,
+    0x8DC8, 0x8DC8, 0x230C, 0x8DCB, 0x8DCB, 0x0D78, 0x8DCC, 0x8DCC, 0x0D7B,
+    0x8DCD, 0x8DCD, 0x2305, 0x8DCE, 0x8DCE, 0x0D76, 0x8DCF, 0x8DCF, 0x2309,
+    0x8DD0, 0x8DD0, 0x25B1, 0x8DD1, 0x8DD1, 0x0D7A, 0x8DD3, 0x8DD3, 0x2304,
+    0x8DD4, 0x8DD4, 0x3F82, 0x8DD5, 0x8DD5, 0x230A, 0x8DD6, 0x8DD6, 0x2307,
+    0x8DD7, 0x8DD7, 0x230D, 0x8DD8, 0x8DD8, 0x2303, 0x8DD9, 0x8DD9, 0x230B,
+    0x8DDA, 0x8DDA, 0x0D79, 0x8DDB, 0x8DDB, 0x0D7C, 0x8DDC, 0x8DDC, 0x2308,
+    0x8DDD, 0x8DDD, 0x0D77, 0x8DDF, 0x8DDF, 0x0F27, 0x8DE0, 0x8DE0, 0x25AD,
+    0x8DE1, 0x8DE1, 0x0F26, 0x8DE2, 0x8DE2, 0x25B4, 0x8DE3, 0x8DE3, 0x25B3,
+    0x8DE4, 0x8DE4, 0x0F2D, 0x8DE6, 0x8DE6, 0x0F2E, 0x8DE7, 0x8DE7, 0x25B5,
+    0x8DE8, 0x8DE8, 0x0F28, 0x8DE9, 0x8DE9, 0x25B2, 0x8DEA, 0x8DEA, 0x0F2C,
+    0x8DEB, 0x8DEB, 0x25B7, 0x8DEC, 0x8DEC, 0x25AE, 0x8DEE, 0x8DEE, 0x25B0,
+    0x8DEF, 0x8DEF, 0x0F29, 0x8DF0, 0x8DF0, 0x25AC, 0x8DF1, 0x8DF1, 0x25AF,
+    0x8DF2, 0x8DF2, 0x25B6, 0x8DF3, 0x8DF3, 0x0F2A, 0x8DF4, 0x8DF4, 0x25B8,
+    0x8DFA, 0x8DFA, 0x0F2B, 0x8DFC, 0x8DFC, 0x10BD, 0x8DFD, 0x8DFD, 0x2814,
+    0x8DFE, 0x8DFE, 0x281A, 0x8DFF, 0x8DFF, 0x2812, 0x8E00, 0x8E00, 0x281B,
+    0x8E01, 0x8E01, 0x3F85, 0x8E02, 0x8E02, 0x2811, 0x8E03, 0x8E03, 0x2816,
+    0x8E04, 0x8E04, 0x281C, 0x8E05, 0x8E05, 0x2819, 0x8E06, 0x8E06, 0x2818,
+    0x8E07, 0x8E07, 0x2817, 0x8E09, 0x8E09, 0x2810, 0x8E0A, 0x8E0A, 0x2815,
+    0x8E0D, 0x8E0D, 0x2813, 0x8E0E, 0x8E0E, 0x3E5E, 0x8E0F, 0x8E0F, 0x1238,
+    0x8E10, 0x8E10, 0x1235, 0x8E11, 0x8E11, 0x2A69, 0x8E12, 0x8E12, 0x2A6E,
+    0x8E13, 0x8E13, 0x2A70, 0x8E14, 0x8E14, 0x2A6D, 0x8E15, 0x8E15, 0x2A66,
+    0x8E16, 0x8E16, 0x2A68, 0x8E17, 0x8E17, 0x2A72, 0x8E18, 0x8E18, 0x2A6F,
+    0x8E19, 0x8E19, 0x2A6A, 0x8E1A, 0x8E1A, 0x2A73, 0x8E1B, 0x8E1B, 0x2A67,
+    0x8E1C, 0x8E1C, 0x2A71, 0x8E1D, 0x8E1D, 0x1236, 0x8E1E, 0x8E1E, 0x123C,
+    0x8E1F, 0x8E1F, 0x123A, 0x8E20, 0x8E20, 0x2A61, 0x8E21, 0x8E21, 0x123B,
+    0x8E22, 0x8E22, 0x1237, 0x8E23, 0x8E23, 0x2A62, 0x8E24, 0x8E24, 0x2A64,
+    0x8E25, 0x8E25, 0x2A63, 0x8E26, 0x8E27, 0x2A6B, 0x8E28, 0x8E28, 0x3F88,
+    0x8E29, 0x8E29, 0x1239, 0x8E2A, 0x8E2A, 0x3BB4, 0x8E2B, 0x8E2B, 0x1234,
+    0x8E2D, 0x8E2D, 0x3EAB, 0x8E2E, 0x8E2E, 0x2A65, 0x8E30, 0x8E30, 0x2CAB,
+    0x8E31, 0x8E31, 0x1362, 0x8E33, 0x8E33, 0x2CA2, 0x8E34, 0x8E34, 0x1363,
+    0x8E35, 0x8E35, 0x1366, 0x8E36, 0x8E36, 0x2CA7, 0x8E38, 0x8E38, 0x2CA4,
+    0x8E39, 0x8E39, 0x1365, 0x8E3A, 0x8E3A, 0x4784, 0x8E3C, 0x8E3D, 0x2CA8,
+    0x8E3E, 0x8E3E, 0x2CA3, 0x8E3F, 0x8E3F, 0x2CAC, 0x8E40, 0x8E40, 0x2CA5,
+    0x8E41, 0x8E41, 0x2CAA, 0x8E42, 0x8E42, 0x1364, 0x8E44, 0x8E44, 0x1361,
+    0x8E45, 0x8E45, 0x2CA6, 0x8E46, 0x8E46, 0x4312, 0x8E47, 0x8E47, 0x2E7A,
+    0x8E48, 0x8E48, 0x148B, 0x8E49, 0x8E49, 0x1489, 0x8E4A, 0x8E4A, 0x148C,
+    0x8E4B, 0x8E4B, 0x148A, 0x8E4C, 0x8E4C, 0x2E79, 0x8E4D, 0x8E4D, 0x2E76,
+    0x8E4E, 0x8E4E, 0x2E75, 0x8E4F, 0x8E4F, 0x3F83, 0x8E50, 0x8E50, 0x2E78,
+    0x8E53, 0x8E53, 0x2E77, 0x8E54, 0x8E54, 0x2FF6, 0x8E55, 0x8E55, 0x1535,
+    0x8E56, 0x8E56, 0x2FED, 0x8E57, 0x8E57, 0x2FEC, 0x8E59, 0x8E59, 0x1530,
+    0x8E5A, 0x8E5A, 0x2FF2, 0x8E5B, 0x8E5B, 0x2FF1, 0x8E5C, 0x8E5C, 0x2FE9,
+    0x8E5D, 0x8E5D, 0x2FF4, 0x8E5E, 0x8E5E, 0x2FEE, 0x8E5F, 0x8E5F, 0x1534,
+    0x8E60, 0x8E60, 0x2FEB, 0x8E61, 0x8E61, 0x2FF3, 0x8E62, 0x8E62, 0x2FEA,
+    0x8E63, 0x8E63, 0x1531, 0x8E64, 0x8E64, 0x1533, 0x8E65, 0x8E65, 0x2FEF,
+    0x8E66, 0x8E66, 0x1532, 0x8E67, 0x8E67, 0x2FF0, 0x8E68, 0x8E68, 0x434D,
+    0x8E69, 0x8E69, 0x2FF5, 0x8E6A, 0x8E6A, 0x313D, 0x8E6C, 0x8E6C, 0x15D3,
+    0x8E6D, 0x8E6D, 0x313A, 0x8E6F, 0x8E6F, 0x313E, 0x8E71, 0x8E71, 0x43E7,
+    0x8E72, 0x8E72, 0x15D0, 0x8E73, 0x8E73, 0x313C, 0x8E74, 0x8E74, 0x15D5,
+    0x8E75, 0x8E75, 0x3F89, 0x8E76, 0x8E76, 0x15D2, 0x8E77, 0x8E77, 0x3F7F,
+    0x8E78, 0x8E78, 0x313B, 0x8E7A, 0x8E7A, 0x15D4, 0x8E7B, 0x8E7B, 0x313F,
+    0x8E7C, 0x8E7C, 0x15CF, 0x8E7E, 0x8E7E, 0x4324, 0x8E80, 0x8E80, 0x3E57,
+    0x8E81, 0x8E81, 0x164D, 0x8E82, 0x8E82, 0x164F, 0x8E84, 0x8E84, 0x3240,
+    0x8E85, 0x8E85, 0x164E, 0x8E86, 0x8E86, 0x323E, 0x8E87, 0x8E87, 0x15D1,
+    0x8E88, 0x8E88, 0x323F, 0x8E89, 0x8E89, 0x164C, 0x8E8A, 0x8E8A, 0x1693,
+    0x8E8B, 0x8E8B, 0x1695, 0x8E8C, 0x8E8C, 0x331A, 0x8E8D, 0x8E8D, 0x1694,
+    0x8E8E, 0x8E8E, 0x3319, 0x8E90, 0x8E90, 0x33C1, 0x8E91, 0x8E91, 0x16DB,
+    0x8E92, 0x8E92, 0x33C0, 0x8E93, 0x8E93, 0x16DC, 0x8E94, 0x8E94, 0x33BE,
+    0x8E95, 0x8E95, 0x33BD, 0x8E96, 0x8E97, 0x33C2, 0x8E98, 0x8E98, 0x3443,
+    0x8E9A, 0x8E9A, 0x33BF, 0x8E9D, 0x8E9D, 0x34A1, 0x8E9E, 0x8EA0, 0x349E,
+    0x8EA1, 0x8EA1, 0x1749, 0x8EA3, 0x8EA3, 0x34EB, 0x8EA4, 0x8EA4, 0x34EA,
+    0x8EA5, 0x8EA5, 0x34E9, 0x8EA6, 0x8EA6, 0x350A, 0x8EA7, 0x8EA7, 0x3BB5,
+    0x8EA8, 0x8EA8, 0x3537, 0x8EA9, 0x8EA9, 0x3524, 0x8EAA, 0x8EAA, 0x175B,
+    0x8EAB, 0x8EAB, 0x0512, 0x8EAC, 0x8EAC, 0x09CF, 0x8EAD, 0x8EAD, 0x385E,
+    0x8EB0, 0x8EB0, 0x43E9, 0x8EB2, 0x8EB2, 0x0F2F, 0x8EB6, 0x8EB6, 0x385F,
+    0x8EBA, 0x8EBA, 0x123D, 0x8EBC, 0x8EBC, 0x38A0, 0x8EBD, 0x8EBD, 0x2CAD,
+    0x8EC0, 0x8EC0, 0x1536, 0x8EC2, 0x8EC2, 0x3140, 0x8EC3, 0x8EC3, 0x3860,
+    0x8EC9, 0x8EC9, 0x3525, 0x8ECA, 0x8ECA, 0x0513, 0x8ECB, 0x8ECB, 0x068D,
+    0x8ECC, 0x8ECC, 0x0810, 0x8ECD, 0x8ECD, 0x080F, 0x8ECE, 0x8ECE, 0x4788,
+    0x8ECF, 0x8ECF, 0x09D2, 0x8ED1, 0x8ED1, 0x1E13, 0x8ED2, 0x8ED2, 0x09D0,
+    0x8ED3, 0x8ED3, 0x1E14, 0x8ED4, 0x8ED4, 0x09D1, 0x8ED7, 0x8ED7, 0x207D,
+    0x8ED8, 0x8ED8, 0x2079, 0x8EDA, 0x8EDA, 0x3DBE, 0x8EDB, 0x8EDB, 0x0BB3,
+    0x8EDC, 0x8EDC, 0x207C, 0x8EDD, 0x8EDD, 0x207B, 0x8EDE, 0x8EDE, 0x207A,
+    0x8EDF, 0x8EDF, 0x0BB4, 0x8EE0, 0x8EE1, 0x207E, 0x8EE2, 0x8EE2, 0x4789,
+    0x8EE4, 0x8EE4, 0x478A, 0x8EE5, 0x8EE5, 0x2315, 0x8EE6, 0x8EE6, 0x2313,
+    0x8EE7, 0x8EE8, 0x2317, 0x8EE9, 0x8EE9, 0x231E, 0x8EEB, 0x8EEB, 0x231A,
+    0x8EEC, 0x8EEC, 0x231C, 0x8EED, 0x8EED, 0x478B, 0x8EEE, 0x8EEE, 0x2314,
+    0x8EEF, 0x8EEF, 0x230F, 0x8EF1, 0x8EF1, 0x231B, 0x8EF2, 0x8EF2, 0x478C,
+    0x8EF4, 0x8EF4, 0x231D, 0x8EF5, 0x8EF5, 0x2316, 0x8EF6, 0x8EF6, 0x2319,
+    0x8EF7, 0x8EF7, 0x2310, 0x8EF8, 0x8EF8, 0x0D7F, 0x8EF9, 0x8EF9, 0x2312,
+    0x8EFA, 0x8EFA, 0x2311, 0x8EFB, 0x8EFB, 0x0D7E, 0x8EFC, 0x8EFC, 0x0D80,
+    0x8EFE, 0x8EFE, 0x0F32, 0x8EFF, 0x8EFF, 0x25BA, 0x8F00, 0x8F00, 0x25BC,
+    0x8F01, 0x8F01, 0x25BB, 0x8F02, 0x8F02, 0x25C0, 0x8F03, 0x8F03, 0x0F30,
+    0x8F05, 0x8F05, 0x25BD, 0x8F06, 0x8F06, 0x25B9, 0x8F07, 0x8F08, 0x25BE,
+    0x8F09, 0x8F09, 0x0F31, 0x8F0A, 0x8F0A, 0x0F33, 0x8F0B, 0x8F0B, 0x25C1,
+    0x8F0D, 0x8F0D, 0x2820, 0x8F0E, 0x8F0E, 0x281F, 0x8F10, 0x8F11, 0x281D,
+    0x8F12, 0x8F12, 0x10BF, 0x8F13, 0x8F13, 0x10C1, 0x8F14, 0x8F14, 0x10BE,
+    0x8F15, 0x8F15, 0x10C0, 0x8F16, 0x8F17, 0x2A7A, 0x8F18, 0x8F18, 0x2A76,
+    0x8F19, 0x8F19, 0x3862, 0x8F1A, 0x8F1A, 0x2A77, 0x8F1B, 0x8F1B, 0x123F,
+    0x8F1C, 0x8F1C, 0x1244, 0x8F1D, 0x8F1D, 0x123E, 0x8F1E, 0x8F1E, 0x1245,
+    0x8F1F, 0x8F1F, 0x1240, 0x8F20, 0x8F20, 0x2A78, 0x8F23, 0x8F23, 0x2A79,
+    0x8F24, 0x8F24, 0x2A75, 0x8F25, 0x8F25, 0x1246, 0x8F26, 0x8F26, 0x1242,
+    0x8F29, 0x8F29, 0x1241, 0x8F2A, 0x8F2A, 0x1243, 0x8F2C, 0x8F2C, 0x2A74,
+    0x8F2D, 0x8F2D, 0x3863, 0x8F2E, 0x8F2E, 0x2CAF, 0x8F2F, 0x8F2F, 0x1368,
+    0x8F30, 0x8F30, 0x3BB7, 0x8F32, 0x8F32, 0x2CB1, 0x8F33, 0x8F33, 0x136A,
+    0x8F34, 0x8F34, 0x2CB4, 0x8F35, 0x8F35, 0x2CB0, 0x8F36, 0x8F36, 0x2CAE,
+    0x8F37, 0x8F37, 0x2CB3, 0x8F38, 0x8F38, 0x1369, 0x8F39, 0x8F39, 0x2CB2,
+    0x8F3B, 0x8F3B, 0x1367, 0x8F3E, 0x8F3E, 0x148E, 0x8F3F, 0x8F3F, 0x1491,
+    0x8F40, 0x8F40, 0x2E7C, 0x8F41, 0x8F41, 0x3D07, 0x8F42, 0x8F42, 0x148F,
+    0x8F43, 0x8F43, 0x2E7B, 0x8F44, 0x8F44, 0x148D, 0x8F45, 0x8F45, 0x1490,
+    0x8F46, 0x8F48, 0x2FF7, 0x8F49, 0x8F49, 0x1537, 0x8F4A, 0x8F4A, 0x3BB8,
+    0x8F4B, 0x8F4B, 0x2FFA, 0x8F4D, 0x8F4D, 0x1538, 0x8F4E, 0x8F4E, 0x15D7,
+    0x8F4F, 0x8F50, 0x3143, 0x8F51, 0x8F51, 0x3142, 0x8F52, 0x8F52, 0x3141,
+    0x8F53, 0x8F53, 0x3145, 0x8F54, 0x8F54, 0x15D6, 0x8F55, 0x8F55, 0x3244,
+    0x8F56, 0x8F57, 0x3242, 0x8F58, 0x8F58, 0x3245, 0x8F59, 0x8F59, 0x3241,
+    0x8F5A, 0x8F5A, 0x3246, 0x8F5B, 0x8F5B, 0x331C, 0x8F5C, 0x8F5C, 0x3F31,
+    0x8F5D, 0x8F5D, 0x331D, 0x8F5E, 0x8F5E, 0x331B, 0x8F5F, 0x8F5F, 0x1696,
+    0x8F60, 0x8F60, 0x33C4, 0x8F61, 0x8F61, 0x16DD, 0x8F62, 0x8F62, 0x33C5,
+    0x8F63, 0x8F63, 0x3445, 0x8F64, 0x8F64, 0x3444, 0x8F66, 0x8F67, 0x4569,
+    0x8F6E, 0x8F6E, 0x456B, 0x8F93, 0x8F93, 0x4732, 0x8F9B, 0x8F9B, 0x0514,
+    0x8F9C, 0x8F9C, 0x0D81, 0x8F9F, 0x8F9F, 0x0F34, 0x8FA0, 0x8FA0, 0x3D94,
+    0x8FA3, 0x8FA3, 0x10C2, 0x8FA5, 0x8FA5, 0x3866, 0x8FA6, 0x8FA6, 0x136C,
+    0x8FA8, 0x8FA8, 0x136B, 0x8FAD, 0x8FAD, 0x15D8, 0x8FAE, 0x8FAE, 0x162F,
+    0x8FAF, 0x8FAF, 0x1697, 0x8FB0, 0x8FB0, 0x0515, 0x8FB1, 0x8FB1, 0x09D3,
+    0x8FB2, 0x8FB2, 0x0F35, 0x8FB3, 0x8FB3, 0x386A, 0x8FB4, 0x8FB4, 0x3146,
+    0x8FB5, 0x8FB5, 0x0230, 0x8FB6, 0x8FB6, 0x47D3, 0x8FB7, 0x8FB7, 0x43FD,
+    0x8FB8, 0x8FB8, 0x42F6, 0x8FB9, 0x8FB9, 0x48C9, 0x8FBA, 0x8FBA, 0x48C7,
+    0x8FBB, 0x8FBC, 0x3D6B, 0x8FBE, 0x8FBE, 0x48C6, 0x8FBF, 0x8FBF, 0x18E9,
+    0x8FC1, 0x8FC1, 0x478D, 0x8FC2, 0x8FC2, 0x0516, 0x8FC4, 0x8FC4, 0x0519,
+    0x8FC5, 0x8FC5, 0x0518, 0x8FC6, 0x8FC6, 0x0517, 0x8FC9, 0x8FC9, 0x18E8,
+    0x8FCA, 0x8FCA, 0x478E, 0x8FCB, 0x8FCB, 0x1A4A, 0x8FCC, 0x8FCC, 0x478F,
+    0x8FCD, 0x8FCD, 0x1A4C, 0x8FCE, 0x8FCE, 0x068E, 0x8FD0, 0x8FD0, 0x48AE,
+    0x8FD1, 0x8FD1, 0x0690, 0x8FD2, 0x8FD2, 0x1A49, 0x8FD3, 0x8FD3, 0x1A4B,
+    0x8FD4, 0x8FD4, 0x068F, 0x8FD5, 0x8FD5, 0x1A4E, 0x8FD6, 0x8FD6, 0x1A4D,
+    0x8FD7, 0x8FD7, 0x1A4F, 0x8FDA, 0x8FDA, 0x3FCB, 0x8FE0, 0x8FE0, 0x1C0A,
+    0x8FE1, 0x8FE1, 0x1C08, 0x8FE2, 0x8FE2, 0x0813, 0x8FE3, 0x8FE3, 0x1C07,
+    0x8FE4, 0x8FE4, 0x0818, 0x8FE5, 0x8FE5, 0x0815, 0x8FE6, 0x8FE6, 0x0812,
+    0x8FE8, 0x8FE8, 0x0819, 0x8FEA, 0x8FEA, 0x0814, 0x8FEB, 0x8FEB, 0x0817,
+    0x8FED, 0x8FED, 0x0816, 0x8FEE, 0x8FEE, 0x1C09, 0x8FF0, 0x8FF0, 0x0811,
+    0x8FF4, 0x8FF4, 0x09D9, 0x8FF5, 0x8FF5, 0x1E16, 0x8FF6, 0x8FF6, 0x1E1C,
+    0x8FF7, 0x8FF7, 0x09D6, 0x8FF8, 0x8FF8, 0x09DD, 0x8FF9, 0x8FF9, 0x3871,
+    0x8FFA, 0x8FFA, 0x09D8, 0x8FFB, 0x8FFB, 0x1E19, 0x8FFC, 0x8FFC, 0x1E1B,
+    0x8FFD, 0x8FFD, 0x09DB, 0x8FFE, 0x8FFE, 0x1E15, 0x8FFF, 0x8FFF, 0x1E18,
+    0x9000, 0x9000, 0x09D7, 0x9001, 0x9001, 0x09D4, 0x9002, 0x9002, 0x1E17,
+    0x9003, 0x9003, 0x09DA, 0x9004, 0x9004, 0x1E1A, 0x9005, 0x9005, 0x09DC,
+    0x9006, 0x9006, 0x09D5, 0x9008, 0x9008, 0x3EE0, 0x900B, 0x900B, 0x2081,
+    0x900C, 0x900C, 0x2084, 0x900D, 0x900D, 0x0BB6, 0x900F, 0x900F, 0x0BC0,
+    0x9010, 0x9010, 0x0BBC, 0x9011, 0x9011, 0x2082, 0x9012, 0x9012, 0x3E4E,
+    0x9014, 0x9014, 0x0BC4, 0x9015, 0x9015, 0x0BBD, 0x9016, 0x9016, 0x0BC2,
+    0x9017, 0x9017, 0x0BB8, 0x9019, 0x9019, 0x0BB5, 0x901A, 0x901A, 0x0BB7,
+    0x901B, 0x901B, 0x0BC3, 0x901C, 0x901C, 0x2083, 0x901D, 0x901D, 0x0BBB,
+    0x901E, 0x901E, 0x0BBE, 0x901F, 0x901F, 0x0BBA, 0x9020, 0x9020, 0x0BBF,
+    0x9021, 0x9021, 0x2085, 0x9022, 0x9022, 0x0BC1, 0x9023, 0x9023, 0x0BB9,
+    0x9024, 0x9024, 0x2080, 0x902D, 0x902D, 0x231F, 0x902E, 0x902E, 0x0D82,
+    0x902F, 0x902F, 0x2321, 0x9031, 0x9031, 0x0D84, 0x9032, 0x9032, 0x0D86,
+    0x9033, 0x9033, 0x4790, 0x9034, 0x9034, 0x2320, 0x9035, 0x9035, 0x0D83,
+    0x9036, 0x9036, 0x0D87, 0x9037, 0x9037, 0x3876, 0x9038, 0x9038, 0x0D85,
+    0x903C, 0x903C, 0x0F3B, 0x903D, 0x903D, 0x25C6, 0x903E, 0x903E, 0x0F43,
+    0x903F, 0x903F, 0x25C3, 0x9041, 0x9041, 0x0F44, 0x9042, 0x9042, 0x0F39,
+    0x9044, 0x9044, 0x25C4, 0x9047, 0x9047, 0x0F3E, 0x9049, 0x9049, 0x25C5,
+    0x904A, 0x904A, 0x0F37, 0x904B, 0x904B, 0x0F36, 0x904C, 0x904C, 0x3F10,
+    0x904D, 0x904D, 0x0F41, 0x904E, 0x904E, 0x0F40, 0x904F, 0x904F, 0x0F3F,
+    0x9050, 0x9050, 0x0F3D, 0x9051, 0x9051, 0x0F42, 0x9052, 0x9052, 0x25C2,
+    0x9053, 0x9053, 0x0F38, 0x9054, 0x9054, 0x0F3A, 0x9055, 0x9055, 0x0F3C,
+    0x9056, 0x9056, 0x3DD2, 0x9058, 0x9058, 0x10C4, 0x9059, 0x9059, 0x10C7,
+    0x905B, 0x905B, 0x10CB, 0x905C, 0x905C, 0x10C5, 0x905D, 0x905D, 0x10CA,
+    0x905E, 0x905E, 0x10C8, 0x9060, 0x9060, 0x10C3, 0x9061, 0x9061, 0x3879,
+    0x9062, 0x9062, 0x10C9, 0x9063, 0x9063, 0x10C6, 0x9064, 0x9064, 0x3C68,
+    0x9067, 0x9067, 0x2A7F, 0x9068, 0x9068, 0x1249, 0x9069, 0x9069, 0x1247,
+    0x906B, 0x906B, 0x2A80, 0x906C, 0x906C, 0x3D60, 0x906D, 0x906D, 0x124A,
+    0x906E, 0x906E, 0x1248, 0x906F, 0x906F, 0x2A7E, 0x9070, 0x9070, 0x2A7D,
+    0x9072, 0x9072, 0x1370, 0x9073, 0x9073, 0x2A7C, 0x9074, 0x9074, 0x136E,
+    0x9075, 0x9075, 0x136D, 0x9076, 0x9076, 0x2CB5, 0x9077, 0x9077, 0x124B,
+    0x9078, 0x9078, 0x136F, 0x9079, 0x9079, 0x2CB6, 0x907A, 0x907A, 0x1372,
+    0x907B, 0x907B, 0x2CB7, 0x907C, 0x907C, 0x1371, 0x907D, 0x907D, 0x1493,
+    0x907E, 0x907E, 0x2E7E, 0x907F, 0x907F, 0x1492, 0x9080, 0x9080, 0x1497,
+    0x9081, 0x9082, 0x1495, 0x9083, 0x9083, 0x153A, 0x9084, 0x9084, 0x1494,
+    0x9085, 0x9085, 0x2E7D, 0x9086, 0x9086, 0x2CB8, 0x9087, 0x9087, 0x1539,
+    0x9088, 0x9088, 0x153B, 0x908A, 0x908B, 0x15D9, 0x908D, 0x908D, 0x3247,
+    0x908F, 0x908F, 0x170C, 0x9090, 0x9090, 0x170B, 0x9091, 0x9091, 0x051B,
+    0x9094, 0x9094, 0x181E, 0x9095, 0x9095, 0x09DE, 0x9097, 0x9098, 0x181B,
+    0x9099, 0x9099, 0x181A, 0x909B, 0x909B, 0x181D, 0x909E, 0x909E, 0x18ED,
+    0x909F, 0x909F, 0x18EA, 0x90A0, 0x90A0, 0x18EF, 0x90A1, 0x90A1, 0x18EB,
+    0x90A2, 0x90A2, 0x051C, 0x90A3, 0x90A3, 0x051F, 0x90A5, 0x90A5, 0x18EC,
+    0x90A6, 0x90A6, 0x051E, 0x90A7, 0x90A7, 0x18EE, 0x90A8, 0x90A8, 0x387C,
+    0x90AA, 0x90AA, 0x051D, 0x90AE, 0x90AE, 0x3880, 0x90AF, 0x90AF, 0x1A52,
+    0x90B0, 0x90B0, 0x1A54, 0x90B1, 0x90B1, 0x0693, 0x90B2, 0x90B2, 0x1A50,
+    0x90B3, 0x90B3, 0x1A53, 0x90B4, 0x90B4, 0x1A51, 0x90B5, 0x90B5, 0x0691,
+    0x90B6, 0x90B6, 0x0694, 0x90B8, 0x90B8, 0x0692, 0x90BB, 0x90BB, 0x3BC4,
+    0x90BD, 0x90BD, 0x1C0C, 0x90BE, 0x90BE, 0x1C10, 0x90BF, 0x90BF, 0x1C0D,
+    0x90C1, 0x90C1, 0x081C, 0x90C3, 0x90C3, 0x081D, 0x90C4, 0x90C4, 0x387E,
+    0x90C5, 0x90C5, 0x1C0F, 0x90C7, 0x90C7, 0x1C11, 0x90C8, 0x90C8, 0x1C13,
+    0x90CA, 0x90CA, 0x081A, 0x90CB, 0x90CB, 0x1C12, 0x90CE, 0x90CE, 0x081B,
+    0x90D4, 0x90D4, 0x208C, 0x90D5, 0x90D5, 0x1C0E, 0x90D6, 0x90D6, 0x1E1D,
+    0x90D7, 0x90D7, 0x1E26, 0x90D8, 0x90D8, 0x1E24, 0x90D9, 0x90DA, 0x1E1F,
+    0x90DB, 0x90DB, 0x1E25, 0x90DC, 0x90DC, 0x1E27, 0x90DD, 0x90DD, 0x09E0,
+    0x90DF, 0x90DF, 0x1E22, 0x90E0, 0x90E0, 0x1E1E, 0x90E1, 0x90E1, 0x09DF,
+    0x90E2, 0x90E2, 0x09E1, 0x90E3, 0x90E3, 0x1E21, 0x90E4, 0x90E4, 0x1E28,
+    0x90E5, 0x90E5, 0x1E23, 0x90E8, 0x90E8, 0x0BC5, 0x90E9, 0x90E9, 0x208F,
+    0x90EA, 0x90EA, 0x2087, 0x90EB, 0x90EC, 0x208D, 0x90ED, 0x90ED, 0x0BC6,
+    0x90EF, 0x90EF, 0x2086, 0x90F0, 0x90F0, 0x2088, 0x90F1, 0x90F1, 0x1C0B,
+    0x90F2, 0x90F3, 0x208A, 0x90F4, 0x90F4, 0x2089, 0x90F5, 0x90F5, 0x0D89,
+    0x90F9, 0x90F9, 0x2328, 0x90FA, 0x90FA, 0x2CB9, 0x90FB, 0x90FB, 0x2329,
+    0x90FC, 0x90FC, 0x2326, 0x90FD, 0x90FD, 0x0BC7, 0x90FE, 0x90FE, 0x0D8B,
+    0x90FF, 0x90FF, 0x2325, 0x9100, 0x9100, 0x232B, 0x9101, 0x9101, 0x232A,
+    0x9102, 0x9102, 0x0D88, 0x9103, 0x9103, 0x232E, 0x9104, 0x9104, 0x2324,
+    0x9105, 0x9105, 0x232D, 0x9106, 0x9106, 0x2322, 0x9107, 0x9107, 0x232C,
+    0x9108, 0x9108, 0x2327, 0x9109, 0x9109, 0x0D8A, 0x910B, 0x910B, 0x25CD,
+    0x910D, 0x910D, 0x25C8, 0x910E, 0x910E, 0x25CE, 0x910F, 0x910F, 0x25C9,
+    0x9110, 0x9110, 0x25C7, 0x9111, 0x9111, 0x25CA, 0x9112, 0x9112, 0x0F45,
+    0x9114, 0x9114, 0x25CC, 0x9116, 0x9116, 0x25CB, 0x9117, 0x9117, 0x0F46,
+    0x9118, 0x9118, 0x10CD, 0x9119, 0x9119, 0x10CC, 0x911A, 0x911A, 0x2827,
+    0x911B, 0x911B, 0x282A, 0x911C, 0x911C, 0x2822, 0x911D, 0x911D, 0x2826,
+    0x911E, 0x911E, 0x10CE, 0x911F, 0x911F, 0x2825, 0x9120, 0x9120, 0x2823,
+    0x9121, 0x9121, 0x2829, 0x9122, 0x9122, 0x2824, 0x9123, 0x9123, 0x2821,
+    0x9124, 0x9124, 0x2828, 0x9126, 0x9126, 0x2A86, 0x9127, 0x9127, 0x124E,
+    0x9128, 0x9128, 0x2FFB, 0x9129, 0x912A, 0x2A83, 0x912B, 0x912B, 0x2A82,
+    0x912C, 0x912C, 0x2323, 0x912D, 0x912D, 0x124D, 0x912E, 0x912E, 0x2A87,
+    0x912F, 0x912F, 0x2A81, 0x9130, 0x9130, 0x124C, 0x9131, 0x9131, 0x124F,
+    0x9132, 0x9132, 0x2A85, 0x9133, 0x9133, 0x2CBA, 0x9134, 0x9134, 0x1373,
+    0x9135, 0x9136, 0x2CBB, 0x9138, 0x9138, 0x2E7F, 0x9139, 0x9139, 0x1498,
+    0x913A, 0x913B, 0x2FFC, 0x913E, 0x913E, 0x2FFE, 0x913F, 0x913F, 0x3148,
+    0x9140, 0x9140, 0x3147, 0x9141, 0x9141, 0x3249, 0x9143, 0x9143, 0x3248,
+    0x9144, 0x9145, 0x331F, 0x9146, 0x9146, 0x331E, 0x9147, 0x9147, 0x33C6,
+    0x9148, 0x9148, 0x16DE, 0x9149, 0x9149, 0x0520, 0x914A, 0x914A, 0x081F,
+    0x914B, 0x914B, 0x081E, 0x914C, 0x914C, 0x09E4, 0x914D, 0x914D, 0x09E3,
+    0x914E, 0x914F, 0x1E2A, 0x9150, 0x9150, 0x1E29, 0x9151, 0x9151, 0x3F49,
+    0x9152, 0x9152, 0x09E2, 0x9153, 0x9153, 0x2093, 0x9155, 0x9155, 0x2094,
+    0x9156, 0x9156, 0x2090, 0x9157, 0x9157, 0x0BC8, 0x9158, 0x9158, 0x2091,
+    0x9159, 0x9159, 0x3F45, 0x915A, 0x915A, 0x2092, 0x915C, 0x915C, 0x3F47,
+    0x915E, 0x915E, 0x43EB, 0x915F, 0x915F, 0x2331, 0x9160, 0x9160, 0x2333,
+    0x9161, 0x9161, 0x232F, 0x9162, 0x9162, 0x2332, 0x9163, 0x9163, 0x0D8C,
+    0x9164, 0x9164, 0x2330, 0x9165, 0x9165, 0x0D8D, 0x9167, 0x9167, 0x3882,
+    0x9168, 0x9168, 0x23E2, 0x9169, 0x9169, 0x0F49, 0x916A, 0x916A, 0x0F48,
+    0x916C, 0x916C, 0x0F47, 0x916E, 0x916F, 0x25CF, 0x9170, 0x9170, 0x3EB8,
+    0x9172, 0x9172, 0x282C, 0x9173, 0x9173, 0x282E, 0x9174, 0x9174, 0x10D2,
+    0x9175, 0x9175, 0x10CF, 0x9176, 0x9176, 0x3E9B, 0x9177, 0x9177, 0x10D1,
+    0x9178, 0x9178, 0x10D0, 0x9179, 0x9179, 0x282D, 0x917A, 0x917A, 0x282B,
+    0x917C, 0x917C, 0x3F6F, 0x9180, 0x9180, 0x2A8E, 0x9181, 0x9182, 0x2A8B,
+    0x9183, 0x9183, 0x1253, 0x9184, 0x9184, 0x2A8D, 0x9185, 0x9186, 0x2A88,
+    0x9187, 0x9187, 0x1250, 0x9189, 0x9189, 0x1251, 0x918A, 0x918A, 0x2A8A,
+    0x918B, 0x918B, 0x1252, 0x918C, 0x918C, 0x43EC, 0x918D, 0x918D, 0x2CC0,
+    0x918E, 0x918E, 0x3F4E, 0x918F, 0x918F, 0x2CC1, 0x9190, 0x9191, 0x2CBE,
+    0x9192, 0x9192, 0x1374, 0x9193, 0x9193, 0x2CBD, 0x9199, 0x9199, 0x2E83,
+    0x919A, 0x919A, 0x2E80, 0x919B, 0x919B, 0x2E82, 0x919C, 0x919C, 0x149B,
+    0x919D, 0x919D, 0x2E86, 0x919E, 0x919E, 0x149A, 0x919F, 0x919F, 0x2E84,
+    0x91A0, 0x91A0, 0x2E87, 0x91A1, 0x91A1, 0x2E85, 0x91A2, 0x91A2, 0x2E81,
+    0x91A3, 0x91A3, 0x1499, 0x91A5, 0x91A5, 0x3000, 0x91A7, 0x91A7, 0x3001,
+    0x91A8, 0x91A8, 0x2FFF, 0x91A9, 0x91A9, 0x3883, 0x91AA, 0x91AA, 0x3003,
+    0x91AB, 0x91AC, 0x153C, 0x91AD, 0x91AD, 0x314A, 0x91AE, 0x91AE, 0x15DC,
+    0x91AF, 0x91AF, 0x3002, 0x91B0, 0x91B0, 0x3149, 0x91B1, 0x91B1, 0x15DB,
+    0x91B2, 0x91B3, 0x324C, 0x91B4, 0x91B4, 0x1650, 0x91B5, 0x91B5, 0x324B,
+    0x91B6, 0x91B6, 0x45EF, 0x91B7, 0x91B7, 0x324A, 0x91B9, 0x91B9, 0x3321,
+    0x91BA, 0x91BA, 0x1698, 0x91BB, 0x91BB, 0x3BC8, 0x91BC, 0x91BC, 0x3446,
+    0x91BD, 0x91BD, 0x34A3, 0x91BE, 0x91BE, 0x34A2, 0x91C0, 0x91C0, 0x1730,
+    0x91C1, 0x91C1, 0x174A, 0x91C2, 0x91C2, 0x34A4, 0x91C3, 0x91C3, 0x350B,
+    0x91C4, 0x91C4, 0x3884, 0x91C5, 0x91C5, 0x175C, 0x91C6, 0x91C6, 0x0521,
+    0x91C7, 0x91C7, 0x0695, 0x91C9, 0x91C9, 0x0F4A, 0x91CB, 0x91CB, 0x1651,
+    0x91CC, 0x91CC, 0x0522, 0x91CD, 0x91CD, 0x0820, 0x91CE, 0x91CE, 0x0BC9,
+    0x91CF, 0x91CF, 0x0D8E, 0x91D0, 0x91D0, 0x153E, 0x91D1, 0x91D1, 0x0696,
+    0x91D3, 0x91D3, 0x1C15, 0x91D4, 0x91D4, 0x1C14, 0x91D5, 0x91D5, 0x1E2C,
+    0x91D6, 0x91D6, 0x415E, 0x91D7, 0x91D7, 0x09E7, 0x91D8, 0x91D8, 0x09E5,
+    0x91D9, 0x91D9, 0x09E9, 0x91DA, 0x91DA, 0x1E2E, 0x91DC, 0x91DC, 0x09E8,
+    0x91DD, 0x91DD, 0x09E6, 0x91DF, 0x91DF, 0x453A, 0x91E2, 0x91E2, 0x1E2D,
+    0x91E3, 0x91E3, 0x0BCC, 0x91E4, 0x91E4, 0x209A, 0x91E5, 0x91E5, 0x3C06,
+    0x91E6, 0x91E6, 0x0BCB, 0x91E7, 0x91E7, 0x0BCD, 0x91E8, 0x91E8, 0x209F,
+    0x91E9, 0x91E9, 0x0BCF, 0x91EA, 0x91EB, 0x209C, 0x91EC, 0x91EC, 0x2095,
+    0x91ED, 0x91ED, 0x0BCE, 0x91EE, 0x91EE, 0x20A0, 0x91F1, 0x91F1, 0x2097,
+    0x91F3, 0x91F3, 0x2098, 0x91F4, 0x91F4, 0x2096, 0x91F5, 0x91F5, 0x0BCA,
+    0x91F7, 0x91F7, 0x209E, 0x91F8, 0x91F8, 0x2099, 0x91F9, 0x91F9, 0x209B,
+    0x91FA, 0x91FA, 0x3AF8, 0x91FD, 0x91FD, 0x233F, 0x91FE, 0x91FE, 0x382E,
+    0x91FF, 0x91FF, 0x233E, 0x9200, 0x9200, 0x233C, 0x9201, 0x9201, 0x2334,
+    0x9202, 0x9202, 0x2343, 0x9203, 0x9203, 0x2337, 0x9204, 0x9204, 0x2341,
+    0x9205, 0x9205, 0x2348, 0x9206, 0x9206, 0x2340, 0x9207, 0x9207, 0x0D96,
+    0x9208, 0x9208, 0x3EB9, 0x9209, 0x9209, 0x0D92, 0x920A, 0x920A, 0x2335,
+    0x920C, 0x920C, 0x233B, 0x920D, 0x920D, 0x0D94, 0x920E, 0x920E, 0x3888,
+    0x920F, 0x920F, 0x233A, 0x9210, 0x9210, 0x0D95, 0x9211, 0x9211, 0x0D97,
+    0x9212, 0x9212, 0x233D, 0x9213, 0x9213, 0x4793, 0x9214, 0x9215, 0x0D8F,
+    0x9216, 0x9216, 0x2349, 0x9217, 0x9217, 0x2347, 0x9219, 0x9219, 0x2346,
+    0x921A, 0x921A, 0x2338, 0x921C, 0x921C, 0x2344, 0x921E, 0x921E, 0x0D93,
+    0x9223, 0x9223, 0x0D91, 0x9224, 0x9224, 0x2345, 0x9225, 0x9225, 0x2336,
+    0x9226, 0x9226, 0x2339, 0x9227, 0x9227, 0x2342, 0x9228, 0x9228, 0x4795,
+    0x922A, 0x922A, 0x3C0E, 0x922B, 0x922B, 0x3BA6, 0x922D, 0x922D, 0x2851,
+    0x922E, 0x922E, 0x25DA, 0x9230, 0x9230, 0x25D3, 0x9231, 0x9231, 0x25E6,
+    0x9232, 0x9232, 0x25EF, 0x9233, 0x9233, 0x25D6, 0x9234, 0x9234, 0x0F55,
+    0x9235, 0x9235, 0x3B26, 0x9236, 0x9236, 0x25E3, 0x9237, 0x9237, 0x0F4B,
+    0x9238, 0x9238, 0x0F4D, 0x9239, 0x9239, 0x0F59, 0x923A, 0x923A, 0x25D4,
+    0x923C, 0x923C, 0x41D2, 0x923D, 0x923D, 0x0F4E, 0x923E, 0x923E, 0x0F50,
+    0x923F, 0x923F, 0x0F5A, 0x9240, 0x9240, 0x0F4F, 0x9241, 0x9241, 0x388A,
+    0x9244, 0x9244, 0x389A, 0x9245, 0x9245, 0x0F58, 0x9246, 0x9246, 0x25DC,
+    0x9248, 0x9248, 0x25D1, 0x9249, 0x9249, 0x0F56, 0x924A, 0x924A, 0x25DB,
+    0x924B, 0x924B, 0x0F52, 0x924C, 0x924C, 0x25ED, 0x924D, 0x924D, 0x0F57,
+    0x924E, 0x924E, 0x25EB, 0x924F, 0x924F, 0x25DF, 0x9250, 0x9250, 0x25E9,
+    0x9251, 0x9251, 0x0F54, 0x9252, 0x9252, 0x25D2, 0x9253, 0x9253, 0x25EC,
+    0x9254, 0x9254, 0x25E7, 0x9255, 0x9255, 0x3E47, 0x9256, 0x9256, 0x25EE,
+    0x9257, 0x9257, 0x0F4C, 0x9258, 0x9258, 0x4796, 0x925A, 0x925A, 0x0F5B,
+    0x925B, 0x925B, 0x0F51, 0x925D, 0x925D, 0x3A03, 0x925E, 0x925E, 0x25D8,
+    0x925F, 0x925F, 0x3CE0, 0x9260, 0x9260, 0x25E0, 0x9261, 0x9261, 0x25E4,
+    0x9262, 0x9262, 0x388B, 0x9263, 0x9263, 0x25E8, 0x9264, 0x9264, 0x0F53,
+    0x9265, 0x9265, 0x25D7, 0x9266, 0x9266, 0x25D5, 0x9267, 0x9267, 0x25E1,
+    0x926B, 0x926B, 0x4797, 0x926C, 0x926C, 0x25DE, 0x926D, 0x926D, 0x25DD,
+    0x926E, 0x926E, 0x3D05, 0x926F, 0x926F, 0x25E2, 0x9270, 0x9270, 0x25E5,
+    0x9272, 0x9272, 0x25EA, 0x9276, 0x9276, 0x2831, 0x9277, 0x9277, 0x3C64,
+    0x9278, 0x9278, 0x10D3, 0x9279, 0x9279, 0x283B, 0x927A, 0x927A, 0x2833,
+    0x927B, 0x927B, 0x10D9, 0x927C, 0x927C, 0x10DD, 0x927D, 0x927D, 0x2844,
+    0x927E, 0x927E, 0x284C, 0x927F, 0x927F, 0x283D, 0x9280, 0x9280, 0x10D5,
+    0x9281, 0x9281, 0x3E01, 0x9282, 0x9282, 0x2841, 0x9283, 0x9283, 0x25D9,
+    0x9284, 0x9284, 0x3CB9, 0x9285, 0x9285, 0x10D6, 0x9286, 0x9286, 0x2848,
+    0x9287, 0x9287, 0x284D, 0x9288, 0x9288, 0x2845, 0x9289, 0x9289, 0x3AB5,
+    0x928A, 0x928A, 0x2847, 0x928B, 0x928B, 0x2850, 0x928C, 0x928C, 0x2849,
+    0x928D, 0x928D, 0x2837, 0x928E, 0x928E, 0x2840, 0x928F, 0x928F, 0x46BD,
+    0x9291, 0x9291, 0x10DE, 0x9293, 0x9293, 0x10DA, 0x9294, 0x9294, 0x2835,
+    0x9295, 0x9295, 0x2842, 0x9296, 0x9296, 0x10D8, 0x9297, 0x9297, 0x283C,
+    0x9298, 0x9298, 0x10D7, 0x9299, 0x9299, 0x284A, 0x929A, 0x929A, 0x2839,
+    0x929B, 0x929B, 0x2832, 0x929C, 0x929C, 0x10DB, 0x929D, 0x929D, 0x284F,
+    0x92A0, 0x92A0, 0x2834, 0x92A1, 0x92A1, 0x2846, 0x92A2, 0x92A2, 0x2843,
+    0x92A3, 0x92A3, 0x283E, 0x92A4, 0x92A4, 0x2830, 0x92A5, 0x92A5, 0x282F,
+    0x92A6, 0x92A6, 0x2838, 0x92A7, 0x92A7, 0x284B, 0x92A8, 0x92A8, 0x10DC,
+    0x92A9, 0x92A9, 0x284E, 0x92AA, 0x92AA, 0x2836, 0x92AB, 0x92AB, 0x283A,
+    0x92AC, 0x92AC, 0x10D4, 0x92AE, 0x92AE, 0x4799, 0x92B1, 0x92B1, 0x4798,
+    0x92B2, 0x92B2, 0x125F, 0x92B3, 0x92B3, 0x125A, 0x92B4, 0x92B4, 0x2AB0,
+    0x92B5, 0x92B5, 0x2AAC, 0x92B6, 0x92B6, 0x2A94, 0x92B7, 0x92B7, 0x1256,
+    0x92B9, 0x92B9, 0x36E9, 0x92BA, 0x92BA, 0x3BF5, 0x92BB, 0x92BB, 0x1255,
+    0x92BC, 0x92BC, 0x125B, 0x92BE, 0x92BE, 0x3C60, 0x92BF, 0x92BF, 0x479A,
+    0x92C0, 0x92C0, 0x2A92, 0x92C1, 0x92C1, 0x1259, 0x92C2, 0x92C2, 0x2A9E,
+    0x92C3, 0x92C4, 0x2A90, 0x92C5, 0x92C5, 0x1254, 0x92C6, 0x92C6, 0x2AAF,
+    0x92C7, 0x92C7, 0x125D, 0x92C8, 0x92C8, 0x2AA1, 0x92C9, 0x92C9, 0x2AA6,
+    0x92CA, 0x92CA, 0x2AA0, 0x92CB, 0x92CB, 0x2CD3, 0x92CC, 0x92CC, 0x2A9C,
+    0x92CD, 0x92CD, 0x2AA4, 0x92CE, 0x92CE, 0x2AA2, 0x92CF, 0x92CF, 0x2A95,
+    0x92D0, 0x92D0, 0x2A8F, 0x92D1, 0x92D1, 0x2AAA, 0x92D2, 0x92D2, 0x125C,
+    0x92D3, 0x92D3, 0x2AAB, 0x92D4, 0x92D4, 0x3861, 0x92D5, 0x92D5, 0x2AA5,
+    0x92D7, 0x92D7, 0x2A9A, 0x92D8, 0x92D8, 0x2A98, 0x92D9, 0x92D9, 0x2A93,
+    0x92DB, 0x92DB, 0x400C, 0x92DD, 0x92DD, 0x2A9B, 0x92DE, 0x92DE, 0x2AA8,
+    0x92DF, 0x92DF, 0x2A97, 0x92E0, 0x92E0, 0x2AA7, 0x92E1, 0x92E1, 0x2AAD,
+    0x92E3, 0x92E3, 0x479B, 0x92E4, 0x92E4, 0x1258, 0x92E5, 0x92E5, 0x3CA2,
+    0x92E6, 0x92E6, 0x2AA3, 0x92E7, 0x92E7, 0x2AA9, 0x92E8, 0x92E8, 0x2A9F,
+    0x92E9, 0x92E9, 0x2A99, 0x92EA, 0x92EA, 0x1257, 0x92EB, 0x92EB, 0x479C,
+    0x92EC, 0x92EC, 0x3964, 0x92EE, 0x92EE, 0x283F, 0x92EF, 0x92EF, 0x2A9D,
+    0x92F0, 0x92F0, 0x125E, 0x92F1, 0x92F1, 0x2A96, 0x92F2, 0x92F2, 0x3AB2,
+    0x92F3, 0x92F4, 0x479D, 0x92F6, 0x92F6, 0x3C04, 0x92F7, 0x92F7, 0x2CD8,
+    0x92F8, 0x92F8, 0x1377, 0x92F9, 0x92F9, 0x2CD7, 0x92FA, 0x92FA, 0x2CD5,
+    0x92FB, 0x92FB, 0x2CE7, 0x92FC, 0x92FC, 0x137B, 0x92FD, 0x92FD, 0x479F,
+    0x92FE, 0x92FE, 0x2CE4, 0x92FF, 0x92FF, 0x2CDC, 0x9300, 0x9300, 0x2CE6,
+    0x9301, 0x9301, 0x2CCE, 0x9302, 0x9302, 0x2CDA, 0x9303, 0x9303, 0x3867,
+    0x9304, 0x9304, 0x137D, 0x9306, 0x9306, 0x2CC6, 0x9307, 0x9307, 0x3B11,
+    0x9308, 0x9308, 0x2CC4, 0x9309, 0x9309, 0x2CE5, 0x930B, 0x930B, 0x2CE3,
+    0x930C, 0x930C, 0x2CE2, 0x930D, 0x930D, 0x2CD2, 0x930E, 0x930E, 0x2CD1,
+    0x930F, 0x930F, 0x2CC7, 0x9310, 0x9310, 0x137F, 0x9312, 0x9312, 0x2CCD,
+    0x9313, 0x9313, 0x2CD6, 0x9314, 0x9314, 0x2CE1, 0x9315, 0x9315, 0x1382,
+    0x9316, 0x9316, 0x2CE8, 0x9318, 0x9318, 0x14A3, 0x9319, 0x9319, 0x1384,
+    0x931A, 0x931A, 0x137E, 0x931B, 0x931B, 0x2CCB, 0x931D, 0x931D, 0x2CD4,
+    0x931E, 0x931E, 0x2CC3, 0x931F, 0x931F, 0x2CC5, 0x9320, 0x9320, 0x1375,
+    0x9321, 0x9321, 0x1381, 0x9322, 0x9322, 0x137A, 0x9323, 0x9323, 0x2CCC,
+    0x9324, 0x9324, 0x2CDB, 0x9325, 0x9325, 0x2AAE, 0x9326, 0x9326, 0x1380,
+    0x9327, 0x9327, 0x2CC2, 0x9328, 0x9328, 0x149E, 0x9329, 0x9329, 0x2CDD,
+    0x932A, 0x932A, 0x2CE0, 0x932B, 0x932B, 0x137C, 0x932C, 0x932C, 0x3892,
+    0x932D, 0x932D, 0x2CD0, 0x932E, 0x932E, 0x1383, 0x932F, 0x932F, 0x1379,
+    0x9330, 0x9330, 0x3E03, 0x9331, 0x9331, 0x3CBD, 0x9333, 0x9333, 0x1378,
+    0x9334, 0x9334, 0x2CD9, 0x9335, 0x9335, 0x2CDF, 0x9336, 0x9336, 0x1376,
+    0x9338, 0x9338, 0x2CC9, 0x9339, 0x9339, 0x2CDE, 0x933C, 0x933C, 0x2CCA,
+    0x9340, 0x9340, 0x4155, 0x9341, 0x9341, 0x4277, 0x9342, 0x9342, 0x3AFA,
+    0x9343, 0x9343, 0x47A0, 0x9344, 0x9344, 0x4016, 0x9345, 0x9345, 0x3E74,
+    0x9346, 0x9346, 0x2CCF, 0x9347, 0x9347, 0x2E8D, 0x9348, 0x9348, 0x3C61,
+    0x9349, 0x9349, 0x2E92, 0x934A, 0x934A, 0x14A0, 0x934B, 0x934B, 0x14A2,
+    0x934C, 0x934C, 0x2E98, 0x934D, 0x934D, 0x149C, 0x934E, 0x934E, 0x2EA6,
+    0x934F, 0x934F, 0x2E9E, 0x9350, 0x9351, 0x2E93, 0x9352, 0x9352, 0x2E9D,
+    0x9354, 0x9354, 0x14A9, 0x9355, 0x9355, 0x2E9C, 0x9356, 0x9356, 0x2E8C,
+    0x9357, 0x9357, 0x2E9B, 0x9358, 0x9358, 0x2E8F, 0x9359, 0x9359, 0x2EA7,
+    0x935A, 0x935A, 0x14A8, 0x935B, 0x935B, 0x14A6, 0x935C, 0x935C, 0x2E90,
+    0x935E, 0x935E, 0x2EA3, 0x935F, 0x935F, 0x3CBB, 0x9360, 0x9360, 0x2E95,
+    0x9361, 0x9361, 0x2EA2, 0x9362, 0x9362, 0x4268, 0x9363, 0x9363, 0x2EA4,
+    0x9364, 0x9364, 0x2E8B, 0x9365, 0x9365, 0x14A1, 0x9366, 0x9366, 0x46BC,
+    0x9367, 0x9367, 0x2EA5, 0x9368, 0x9368, 0x3BF0, 0x9369, 0x9369, 0x3961,
+    0x936A, 0x936A, 0x2E99, 0x936B, 0x936B, 0x3893, 0x936C, 0x936C, 0x14A5,
+    0x936D, 0x936D, 0x2E96, 0x936E, 0x936E, 0x39E8, 0x9370, 0x9370, 0x14A7,
+    0x9371, 0x9371, 0x2E9F, 0x9373, 0x9373, 0x389E, 0x9374, 0x9374, 0x3CE4,
+    0x9375, 0x9375, 0x149F, 0x9376, 0x9376, 0x2E91, 0x9377, 0x9377, 0x2EA0,
+    0x9378, 0x9378, 0x38F9, 0x9379, 0x9379, 0x2E9A, 0x937A, 0x937A, 0x2CC8,
+    0x937B, 0x937B, 0x2EA1, 0x937C, 0x937C, 0x2E8E, 0x937D, 0x937D, 0x3C25,
+    0x937E, 0x937E, 0x14A4, 0x9380, 0x9380, 0x3014, 0x9381, 0x9381, 0x3965,
+    0x9382, 0x9382, 0x149D, 0x9383, 0x9383, 0x2E89, 0x9384, 0x9384, 0x47A1,
+    0x9385, 0x9385, 0x42BD, 0x9386, 0x9386, 0x3CC0, 0x9387, 0x9387, 0x3AE0,
+    0x9388, 0x9388, 0x3011, 0x9389, 0x9389, 0x300A, 0x938A, 0x938A, 0x1540,
+    0x938C, 0x938C, 0x3005, 0x938D, 0x938D, 0x3015, 0x938E, 0x938E, 0x300C,
+    0x938F, 0x938F, 0x2E97, 0x9390, 0x9390, 0x3D3C, 0x9391, 0x9391, 0x3017,
+    0x9392, 0x9392, 0x3006, 0x9394, 0x9394, 0x153F, 0x9395, 0x9395, 0x3010,
+    0x9396, 0x9396, 0x1541, 0x9397, 0x9397, 0x1549, 0x9398, 0x9398, 0x1547,
+    0x9399, 0x9399, 0x3012, 0x939A, 0x939A, 0x1548, 0x939B, 0x939B, 0x3008,
+    0x939C, 0x939C, 0x39AC, 0x939D, 0x939D, 0x3009, 0x939E, 0x939E, 0x300E,
+    0x939F, 0x939F, 0x3013, 0x93A0, 0x93A0, 0x3AB1, 0x93A1, 0x93A1, 0x2E88,
+    0x93A2, 0x93A2, 0x1542, 0x93A3, 0x93A3, 0x301C, 0x93A4, 0x93A4, 0x3019,
+    0x93A5, 0x93A5, 0x3160, 0x93A6, 0x93A6, 0x300F, 0x93A7, 0x93A7, 0x300B,
+    0x93A8, 0x93A8, 0x301A, 0x93A9, 0x93A9, 0x3155, 0x93AA, 0x93AA, 0x300D,
+    0x93AC, 0x93AC, 0x1545, 0x93AD, 0x93AD, 0x47A2, 0x93AE, 0x93AE, 0x1544,
+    0x93AF, 0x93AF, 0x2E8A, 0x93B0, 0x93B0, 0x1546, 0x93B1, 0x93B1, 0x3016,
+    0x93B2, 0x93B2, 0x3018, 0x93B3, 0x93B3, 0x1543, 0x93B4, 0x93B4, 0x301B,
+    0x93B5, 0x93B5, 0x3004, 0x93B7, 0x93B7, 0x3007, 0x93B8, 0x93B8, 0x3C90,
+    0x93BA, 0x93BA, 0x43F7, 0x93BB, 0x93BB, 0x3C8F, 0x93BD, 0x93BD, 0x3A27,
+    0x93BF, 0x93BF, 0x3E2D, 0x93C0, 0x93C0, 0x315E, 0x93C2, 0x93C2, 0x314E,
+    0x93C3, 0x93C3, 0x15E0, 0x93C4, 0x93C4, 0x315C, 0x93C6, 0x93C6, 0x39AA,
+    0x93C7, 0x93C7, 0x314C, 0x93C8, 0x93C8, 0x15E1, 0x93CA, 0x93CA, 0x3157,
+    0x93CB, 0x93CB, 0x3966, 0x93CC, 0x93CC, 0x3153, 0x93CD, 0x93CD, 0x15E6,
+    0x93CE, 0x93CE, 0x315D, 0x93CF, 0x93CF, 0x314D, 0x93D0, 0x93D0, 0x3150,
+    0x93D1, 0x93D1, 0x15DE, 0x93D2, 0x93D2, 0x315F, 0x93D3, 0x93D3, 0x40E1,
+    0x93D4, 0x93D4, 0x3158, 0x93D5, 0x93D5, 0x315B, 0x93D6, 0x93D6, 0x15E4,
+    0x93D7, 0x93D7, 0x15E9, 0x93D8, 0x93D8, 0x15E7, 0x93D9, 0x93D9, 0x3154,
+    0x93DA, 0x93DA, 0x314F, 0x93DB, 0x93DB, 0x3C5F, 0x93DC, 0x93DD, 0x15E2,
+    0x93DE, 0x93DE, 0x314B, 0x93DF, 0x93DF, 0x15DF, 0x93E0, 0x93E0, 0x3A20,
+    0x93E1, 0x93E1, 0x15DD, 0x93E2, 0x93E2, 0x15E5, 0x93E3, 0x93E3, 0x315A,
+    0x93E4, 0x93E4, 0x15E8, 0x93E6, 0x93E6, 0x3156, 0x93E7, 0x93E7, 0x3161,
+    0x93E8, 0x93E8, 0x15EA, 0x93EC, 0x93EC, 0x3152, 0x93EE, 0x93EE, 0x3159,
+    0x93F0, 0x93F0, 0x423F, 0x93F1, 0x93F1, 0x42AA, 0x93F3, 0x93F3, 0x3962,
+    0x93F5, 0x93F5, 0x325A, 0x93F6, 0x93F6, 0x3269, 0x93F7, 0x93F7, 0x325C,
+    0x93F8, 0x93F8, 0x3263, 0x93F9, 0x93F9, 0x3151, 0x93FA, 0x93FA, 0x3261,
+    0x93FB, 0x93FB, 0x3250, 0x93FC, 0x93FC, 0x3267, 0x93FD, 0x93FD, 0x1654,
+    0x93FE, 0x93FE, 0x3254, 0x93FF, 0x93FF, 0x3266, 0x9400, 0x9400, 0x325B,
+    0x9401, 0x9401, 0x3CD4, 0x9403, 0x9403, 0x1653, 0x9404, 0x9404, 0x3BC9,
+    0x9406, 0x9406, 0x326B, 0x9407, 0x9407, 0x325D, 0x9408, 0x9408, 0x3A25,
+    0x9409, 0x9409, 0x3262, 0x940A, 0x940A, 0x3265, 0x940B, 0x940B, 0x324E,
+    0x940C, 0x940C, 0x3268, 0x940D, 0x940D, 0x3259, 0x940E, 0x940E, 0x325E,
+    0x940F, 0x940F, 0x3252, 0x9410, 0x9410, 0x3256, 0x9411, 0x9411, 0x326A,
+    0x9412, 0x9412, 0x3260, 0x9413, 0x9413, 0x324F, 0x9414, 0x9414, 0x3253,
+    0x9415, 0x9415, 0x3255, 0x9416, 0x9416, 0x325F, 0x9417, 0x9417, 0x47A5,
+    0x9418, 0x9418, 0x1652, 0x9419, 0x9419, 0x3258, 0x941B, 0x941B, 0x4148,
+    0x941D, 0x941D, 0x47A6, 0x9420, 0x9420, 0x3251, 0x9424, 0x9424, 0x3943,
+    0x9425, 0x9425, 0x38D0, 0x9426, 0x9426, 0x38A3, 0x9427, 0x9427, 0x3BCD,
+    0x9428, 0x9428, 0x3257, 0x9429, 0x9429, 0x3325, 0x942A, 0x942A, 0x3329,
+    0x942B, 0x942B, 0x169F, 0x942C, 0x942C, 0x332B, 0x942D, 0x942D, 0x47A7,
+    0x942E, 0x942E, 0x1699, 0x9430, 0x9430, 0x3327, 0x9431, 0x9431, 0x332D,
+    0x9432, 0x9432, 0x169E, 0x9433, 0x9433, 0x169A, 0x9435, 0x9435, 0x169B,
+    0x9436, 0x9436, 0x3324, 0x9437, 0x9437, 0x332A, 0x9438, 0x9438, 0x169D,
+    0x9439, 0x9439, 0x3328, 0x943A, 0x943A, 0x169C, 0x943B, 0x943B, 0x3323,
+    0x943C, 0x943C, 0x3264, 0x943D, 0x943D, 0x3326, 0x943E, 0x943E, 0x47A8,
+    0x943F, 0x943F, 0x3322, 0x9440, 0x9440, 0x332C, 0x9442, 0x9442, 0x4272,
+    0x9443, 0x9443, 0x4275, 0x9444, 0x9444, 0x16DF, 0x9445, 0x9445, 0x33CD,
+    0x9446, 0x9446, 0x33D0, 0x9447, 0x9447, 0x33CC, 0x9448, 0x9449, 0x33CE,
+    0x944A, 0x944B, 0x33C9, 0x944C, 0x944C, 0x33C7, 0x944D, 0x944D, 0x3C65,
+    0x944F, 0x944F, 0x33CB, 0x9450, 0x9450, 0x33C8, 0x9451, 0x9452, 0x16E0,
+    0x9454, 0x9454, 0x47AA, 0x9455, 0x9455, 0x3448, 0x9457, 0x9457, 0x344A,
+    0x9458, 0x9458, 0x3C30, 0x945B, 0x945B, 0x389F, 0x945D, 0x945D, 0x3449,
+    0x945E, 0x945E, 0x344B, 0x9460, 0x9460, 0x170E, 0x9462, 0x9462, 0x3447,
+    0x9463, 0x9463, 0x170D, 0x9464, 0x9464, 0x170F, 0x9465, 0x9465, 0x3DDE,
+    0x9467, 0x9467, 0x3AB8, 0x9468, 0x9469, 0x34A6, 0x946A, 0x946A, 0x1731,
+    0x946B, 0x946B, 0x34A5, 0x946C, 0x946C, 0x377E, 0x946D, 0x946D, 0x34ED,
+    0x946E, 0x946E, 0x34EC, 0x946F, 0x946F, 0x34EE, 0x9470, 0x9470, 0x174C,
+    0x9471, 0x9471, 0x34EF, 0x9472, 0x9472, 0x174B, 0x9473, 0x9473, 0x34F0,
+    0x9474, 0x9474, 0x350C, 0x9475, 0x9475, 0x350F, 0x9476, 0x9476, 0x350E,
+    0x9477, 0x9477, 0x1755, 0x9478, 0x9478, 0x350D, 0x9479, 0x9479, 0x47AB,
+    0x947B, 0x947B, 0x419B, 0x947C, 0x947C, 0x175F, 0x947D, 0x947E, 0x175D,
+    0x947F, 0x947F, 0x1764, 0x9480, 0x9481, 0x3539, 0x9482, 0x9482, 0x3538,
+    0x9483, 0x9483, 0x3540, 0x9485, 0x9485, 0x4507, 0x949F, 0x949F, 0x4885,
+    0x94A2, 0x94A2, 0x451B, 0x94C1, 0x94C1, 0x47E1, 0x94C3, 0x94C3, 0x47DF,
+    0x94DC, 0x94DC, 0x47D7, 0x94F6, 0x94F6, 0x47D2, 0x952D, 0x952D, 0x47AC,
+    0x9547, 0x9547, 0x48BF, 0x9577, 0x9577, 0x0697, 0x9578, 0x9578, 0x4508,
+    0x957A, 0x957A, 0x20A1, 0x957B, 0x957B, 0x234A, 0x957C, 0x957C, 0x2AB1,
+    0x957D, 0x957D, 0x3162, 0x957F, 0x957F, 0x4509, 0x9580, 0x9580, 0x0698,
+    0x9582, 0x9582, 0x0821, 0x9583, 0x9583, 0x09EA, 0x9585, 0x9585, 0x38A1,
+    0x9586, 0x9586, 0x20A2, 0x9588, 0x9588, 0x20A3, 0x9589, 0x9589, 0x0BD0,
+    0x958B, 0x958B, 0x0D9A, 0x958C, 0x958C, 0x234C, 0x958D, 0x958D, 0x234B,
+    0x958E, 0x958E, 0x0D9E, 0x958F, 0x958F, 0x0D99, 0x9590, 0x9590, 0x234D,
+    0x9591, 0x9591, 0x0D9B, 0x9592, 0x9592, 0x0D9D, 0x9593, 0x9593, 0x0D9C,
+    0x9594, 0x9594, 0x0D98, 0x9596, 0x9596, 0x3BD5, 0x9597, 0x9597, 0x3BD4,
+    0x9598, 0x9598, 0x0F5C, 0x9599, 0x9599, 0x3BD2, 0x959B, 0x959B, 0x25F3,
+    0x959C, 0x959C, 0x25F1, 0x959E, 0x959E, 0x25F2, 0x959F, 0x959F, 0x25F0,
+    0x95A0, 0x95A0, 0x38A4, 0x95A1, 0x95A1, 0x10DF, 0x95A2, 0x95A2, 0x47AD,
+    0x95A3, 0x95A3, 0x10E2, 0x95A4, 0x95A4, 0x10E4, 0x95A5, 0x95A5, 0x10E3,
+    0x95A6, 0x95A6, 0x38A2, 0x95A7, 0x95A7, 0x3BD3, 0x95A8, 0x95A9, 0x10E0,
+    0x95AA, 0x95AA, 0x4395, 0x95AB, 0x95AB, 0x2AB3, 0x95AC, 0x95AC, 0x2AB2,
+    0x95AD, 0x95AD, 0x1260, 0x95AE, 0x95AE, 0x2AB4, 0x95B0, 0x95B0, 0x2AB5,
+    0x95B1, 0x95B1, 0x1261, 0x95B5, 0x95B5, 0x2CF0, 0x95B6, 0x95B6, 0x2CEE,
+    0x95B7, 0x95B7, 0x2EAD, 0x95B9, 0x95BA, 0x2CEC, 0x95BB, 0x95BB, 0x1385,
+    0x95BC, 0x95BC, 0x2CE9, 0x95BD, 0x95BD, 0x2CF1, 0x95BE, 0x95BE, 0x2CEB,
+    0x95BF, 0x95BF, 0x2CEF, 0x95C0, 0x95C0, 0x2EA9, 0x95C3, 0x95C3, 0x2EAB,
+    0x95C5, 0x95C5, 0x2EAC, 0x95C6, 0x95C6, 0x14AE, 0x95C7, 0x95C7, 0x2EA8,
+    0x95C8, 0x95C8, 0x14AD, 0x95C9, 0x95C9, 0x2EAA, 0x95CA, 0x95CC, 0x14AA,
+    0x95CD, 0x95CD, 0x2CEA, 0x95D0, 0x95D0, 0x154C, 0x95D1, 0x95D1, 0x301F,
+    0x95D2, 0x95D3, 0x301D, 0x95D4, 0x95D4, 0x154A, 0x95D5, 0x95D5, 0x154D,
+    0x95D6, 0x95D6, 0x154B, 0x95DA, 0x95DB, 0x3163, 0x95DC, 0x95DC, 0x15EB,
+    0x95DE, 0x95DE, 0x326C, 0x95DF, 0x95DF, 0x326E, 0x95E0, 0x95E0, 0x326D,
+    0x95E1, 0x95E1, 0x1655, 0x95E2, 0x95E2, 0x16A0, 0x95E3, 0x95E3, 0x3330,
+    0x95E4, 0x95E4, 0x332F, 0x95E5, 0x95E5, 0x332E, 0x95E8, 0x95E8, 0x450A,
+    0x95F4, 0x95F4, 0x47AF, 0x961C, 0x961C, 0x0699, 0x961D, 0x961D, 0x4519,
+    0x961E, 0x961E, 0x17B4, 0x9620, 0x9620, 0x1821, 0x9621, 0x9621, 0x0414,
+    0x9622, 0x9622, 0x181F, 0x9623, 0x9623, 0x1822, 0x9624, 0x9624, 0x1820,
+    0x9628, 0x9628, 0x18F1, 0x962A, 0x962A, 0x0526, 0x962C, 0x962C, 0x0527,
+    0x962D, 0x962D, 0x18F3, 0x962E, 0x962E, 0x0524, 0x962F, 0x962F, 0x18F2,
+    0x9630, 0x9630, 0x18F0, 0x9631, 0x9631, 0x0525, 0x9632, 0x9632, 0x0523,
+    0x9633, 0x9633, 0x47B0, 0x9638, 0x9638, 0x3FD1, 0x9639, 0x9639, 0x1A55,
+    0x963A, 0x963A, 0x1A58, 0x963B, 0x963B, 0x069C, 0x963C, 0x963C, 0x1A57,
+    0x963D, 0x963D, 0x1A56, 0x963F, 0x963F, 0x069B, 0x9640, 0x9640, 0x069A,
+    0x9641, 0x9641, 0x3F3D, 0x9642, 0x9642, 0x069E, 0x9643, 0x9643, 0x1A59,
+    0x9644, 0x9644, 0x069D, 0x9645, 0x9645, 0x4772, 0x964A, 0x964A, 0x1C1A,
+    0x964B, 0x964D, 0x0823, 0x964E, 0x964E, 0x1C1B, 0x964F, 0x964F, 0x1C17,
+    0x9650, 0x9650, 0x0822, 0x9651, 0x9651, 0x1C18, 0x9653, 0x9653, 0x1C19,
+    0x9654, 0x9654, 0x1C16, 0x9656, 0x9656, 0x3DE7, 0x9658, 0x9658, 0x09F1,
+    0x965B, 0x965B, 0x09EE, 0x965C, 0x965C, 0x1E2F, 0x965D, 0x965D, 0x09EF,
+    0x965E, 0x965E, 0x09F2, 0x965F, 0x965F, 0x1E30, 0x9661, 0x9661, 0x09ED,
+    0x9662, 0x9663, 0x09EB, 0x9664, 0x9664, 0x09F0, 0x9669, 0x9669, 0x475E,
+    0x966A, 0x966A, 0x0BD1, 0x966B, 0x966B, 0x20A6, 0x966C, 0x966C, 0x0BD9,
+    0x966D, 0x966D, 0x20A5, 0x966F, 0x966F, 0x20A8, 0x9670, 0x9670, 0x0BD5,
+    0x9671, 0x9671, 0x20A7, 0x9672, 0x9672, 0x0DA6, 0x9673, 0x9673, 0x0BD3,
+    0x9674, 0x9674, 0x0BD6, 0x9675, 0x9675, 0x0BD2, 0x9676, 0x9677, 0x0BD7,
+    0x9678, 0x9678, 0x0BD4, 0x967B, 0x967B, 0x38AC, 0x967C, 0x967C, 0x20A4,
+    0x967D, 0x967D, 0x0DA2, 0x967E, 0x967E, 0x234F, 0x9680, 0x9680, 0x2353,
+    0x9681, 0x9681, 0x3F46, 0x9683, 0x9683, 0x2352, 0x9684, 0x9684, 0x0DA7,
+    0x9685, 0x9686, 0x0DA3, 0x9687, 0x9687, 0x234E, 0x9688, 0x9689, 0x2350,
+    0x968A, 0x968A, 0x0D9F, 0x968B, 0x968B, 0x0DA1, 0x968D, 0x968D, 0x0DA5,
+    0x968E, 0x968E, 0x0DA0, 0x968F, 0x968F, 0x3BDE, 0x9691, 0x9691, 0x25F6,
+    0x9692, 0x9693, 0x25F4, 0x9694, 0x9695, 0x0F5E, 0x9696, 0x9696, 0x38AD,
+    0x9697, 0x9697, 0x25F7, 0x9698, 0x9698, 0x0F5D, 0x9699, 0x9699, 0x10E5,
+    0x969B, 0x969B, 0x10E7, 0x969C, 0x969C, 0x10E6, 0x969E, 0x969E, 0x2852,
+    0x96A1, 0x96A1, 0x2853, 0x96A2, 0x96A2, 0x2AB7, 0x96A3, 0x96A3, 0x38AF,
+    0x96A4, 0x96A4, 0x2AB6, 0x96A5, 0x96A5, 0x42EF, 0x96A7, 0x96A8, 0x1386,
+    0x96A9, 0x96A9, 0x2CF2, 0x96AA, 0x96AA, 0x1388, 0x96AC, 0x96AC, 0x2EB0,
+    0x96AE, 0x96AE, 0x2EAE, 0x96B0, 0x96B0, 0x2EAF, 0x96B1, 0x96B1, 0x14AF,
+    0x96B3, 0x96B3, 0x3020, 0x96B4, 0x96B4, 0x15EC, 0x96B6, 0x96B6, 0x0231,
+    0x96B8, 0x96B8, 0x14B0, 0x96B9, 0x96B9, 0x069F, 0x96BB, 0x96BB, 0x09F3,
+    0x96BC, 0x96BC, 0x1E31, 0x96BD, 0x96BD, 0x38B5, 0x96BF, 0x96BF, 0x20A9,
+    0x96C0, 0x96C0, 0x0BDA, 0x96C1, 0x96C1, 0x0DA8, 0x96C2, 0x96C2, 0x2354,
+    0x96C3, 0x96C3, 0x2356, 0x96C4, 0x96C4, 0x0DAA, 0x96C5, 0x96C5, 0x0DA9,
+    0x96C6, 0x96C7, 0x0DAB, 0x96C8, 0x96C8, 0x2355, 0x96C9, 0x96CA, 0x0F62,
+    0x96CB, 0x96CB, 0x0F61, 0x96CC, 0x96CC, 0x10E8, 0x96CD, 0x96CD, 0x0F60,
+    0x96CE, 0x96CE, 0x25F8, 0x96D2, 0x96D2, 0x10E9, 0x96D3, 0x96D3, 0x2AB8,
+    0x96D4, 0x96D4, 0x2CF3, 0x96D5, 0x96D5, 0x1389, 0x96D6, 0x96D6, 0x14B1,
+    0x96D7, 0x96D7, 0x3021, 0x96D8, 0x96D8, 0x3025, 0x96D9, 0x96D9, 0x1550,
+    0x96DA, 0x96DA, 0x3022, 0x96DB, 0x96DB, 0x1551, 0x96DC, 0x96DC, 0x154F,
+    0x96DD, 0x96DD, 0x3026, 0x96DE, 0x96DE, 0x1552, 0x96DF, 0x96DF, 0x3024,
+    0x96E1, 0x96E1, 0x3165, 0x96E2, 0x96E2, 0x154E, 0x96E3, 0x96E3, 0x15ED,
+    0x96E5, 0x96E5, 0x34A8, 0x96E8, 0x96E8, 0x06A0, 0x96E9, 0x96E9, 0x0BDC,
+    0x96EA, 0x96EA, 0x0BDB, 0x96EF, 0x96EF, 0x0DAD, 0x96F0, 0x96F0, 0x2358,
+    0x96F1, 0x96F1, 0x2357, 0x96F2, 0x96F2, 0x0DAE, 0x96F4, 0x96F4, 0x3A04,
+    0x96F5, 0x96F5, 0x25FC, 0x96F6, 0x96F6, 0x0F67, 0x96F7, 0x96F7, 0x0F64,
+    0x96F8, 0x96F8, 0x25FB, 0x96F9, 0x96F9, 0x0F66, 0x96FA, 0x96FA, 0x25F9,
+    0x96FB, 0x96FB, 0x0F65, 0x96FD, 0x96FD, 0x25FA, 0x96FF, 0x96FF, 0x2854,
+    0x9700, 0x9700, 0x10EA, 0x9702, 0x9702, 0x2ABB, 0x9703, 0x9703, 0x3F0D,
+    0x9704, 0x9704, 0x1262, 0x9705, 0x9705, 0x2AB9, 0x9706, 0x9707, 0x1263,
+    0x9708, 0x9708, 0x2ABA, 0x9709, 0x9709, 0x1265, 0x970B, 0x970B, 0x2CF4,
+    0x970D, 0x970D, 0x138D, 0x970E, 0x970E, 0x138A, 0x970F, 0x970F, 0x138F,
+    0x9710, 0x9710, 0x2CF6, 0x9711, 0x9711, 0x138B, 0x9712, 0x9712, 0x2CF5,
+    0x9713, 0x9713, 0x138E, 0x9716, 0x9716, 0x138C, 0x9718, 0x9718, 0x2EB3,
+    0x9719, 0x9719, 0x2EB5, 0x971B, 0x971B, 0x38C9, 0x971C, 0x971C, 0x14B2,
+    0x971D, 0x971D, 0x2EB4, 0x971E, 0x971E, 0x14B3, 0x971F, 0x971F, 0x2EB2,
+    0x9720, 0x9720, 0x2EB1, 0x9721, 0x9721, 0x3FB3, 0x9722, 0x9722, 0x3028,
+    0x9723, 0x9723, 0x3027, 0x9724, 0x9724, 0x1553, 0x9725, 0x9725, 0x3029,
+    0x9726, 0x9726, 0x316A, 0x9727, 0x9727, 0x15EF, 0x9728, 0x9728, 0x3169,
+    0x9729, 0x9729, 0x3166, 0x972A, 0x972A, 0x15EE, 0x972B, 0x972C, 0x3167,
+    0x972E, 0x972F, 0x326F, 0x9730, 0x9730, 0x1656, 0x9731, 0x9731, 0x38C0,
+    0x9732, 0x9732, 0x16A3, 0x9735, 0x9735, 0x3331, 0x9736, 0x9736, 0x38C2,
+    0x9738, 0x9739, 0x16A1, 0x973A, 0x973A, 0x3332, 0x973D, 0x973E, 0x16E2,
+    0x973F, 0x973F, 0x33D1, 0x9740, 0x9740, 0x47B3, 0x9741, 0x9741, 0x3BE9,
+    0x9742, 0x9742, 0x1732, 0x9743, 0x9743, 0x34AA, 0x9744, 0x9744, 0x1734,
+    0x9746, 0x9746, 0x34A9, 0x9747, 0x9747, 0x34AB, 0x9748, 0x9748, 0x1733,
+    0x9749, 0x9749, 0x34F1, 0x974B, 0x974B, 0x3526, 0x9751, 0x9751, 0x44E3,
+    0x9752, 0x9752, 0x06A1, 0x9756, 0x9756, 0x0F68, 0x9757, 0x9757, 0x38CC,
+    0x9758, 0x9758, 0x2855, 0x975A, 0x975A, 0x2ABC, 0x975B, 0x975C, 0x1390,
+    0x975D, 0x975D, 0x3BEF, 0x975E, 0x975E, 0x06A2, 0x975F, 0x975F, 0x38CF,
+    0x9760, 0x9760, 0x1266, 0x9761, 0x9761, 0x15F0, 0x9762, 0x9762, 0x0826,
+    0x9766, 0x9766, 0x1392, 0x9768, 0x9768, 0x1710, 0x9769, 0x9769, 0x0827,
+    0x976A, 0x976A, 0x20AA, 0x976C, 0x976C, 0x2359, 0x976D, 0x976D, 0x3E97,
+    0x976E, 0x976E, 0x235B, 0x9770, 0x9770, 0x235A, 0x9771, 0x9771, 0x3BFC,
+    0x9772, 0x9772, 0x2600, 0x9773, 0x9773, 0x25FD, 0x9774, 0x9774, 0x0F69,
+    0x9776, 0x9776, 0x0F6A, 0x9777, 0x9778, 0x25FE, 0x977A, 0x977A, 0x2857,
+    0x977B, 0x977B, 0x285C, 0x977C, 0x977C, 0x10EB, 0x977D, 0x977D, 0x2856,
+    0x977E, 0x977E, 0x2858, 0x977F, 0x977F, 0x285F, 0x9780, 0x9780, 0x285A,
+    0x9781, 0x9781, 0x285E, 0x9782, 0x9782, 0x285B, 0x9783, 0x9783, 0x2859,
+    0x9784, 0x9784, 0x285D, 0x9785, 0x9785, 0x10EC, 0x9787, 0x9787, 0x40C0,
+    0x9788, 0x9788, 0x2ABF, 0x9789, 0x9789, 0x38D4, 0x978A, 0x978A, 0x2ABD,
+    0x978B, 0x978B, 0x1268, 0x978D, 0x978D, 0x1267, 0x978E, 0x978E, 0x2ABE,
+    0x978F, 0x978F, 0x1269, 0x9794, 0x9794, 0x2CF9, 0x9797, 0x9797, 0x2CF8,
+    0x9798, 0x9798, 0x1393, 0x9799, 0x9799, 0x2CF7, 0x979A, 0x979A, 0x2EB6,
+    0x979B, 0x979B, 0x3BFB, 0x979C, 0x979C, 0x2EB8, 0x979D, 0x979D, 0x2EBA,
+    0x979E, 0x979E, 0x2EB9, 0x979F, 0x979F, 0x38D5, 0x97A0, 0x97A0, 0x14B4,
+    0x97A1, 0x97A1, 0x2EB7, 0x97A2, 0x97A2, 0x3030, 0x97A3, 0x97A3, 0x1554,
+    0x97A4, 0x97A4, 0x302E, 0x97A5, 0x97A5, 0x3031, 0x97A6, 0x97A6, 0x1555,
+    0x97A8, 0x97A8, 0x302C, 0x97AA, 0x97AA, 0x302F, 0x97AB, 0x97AB, 0x302D,
+    0x97AC, 0x97AC, 0x302A, 0x97AD, 0x97AD, 0x1556, 0x97AE, 0x97AE, 0x302B,
+    0x97B1, 0x97B1, 0x38D6, 0x97B2, 0x97B2, 0x47B5, 0x97B3, 0x97B3, 0x316B,
+    0x97B4, 0x97B4, 0x3F33, 0x97B6, 0x97B6, 0x316D, 0x97B7, 0x97B7, 0x316C,
+    0x97B8, 0x97B8, 0x3D95, 0x97B9, 0x97B9, 0x3271, 0x97BA, 0x97BA, 0x3F35,
+    0x97BB, 0x97BB, 0x3272, 0x97BD, 0x97BD, 0x494E, 0x97BE, 0x97BE, 0x38D7,
+    0x97BF, 0x97BF, 0x3333, 0x97C0, 0x97C0, 0x38D8, 0x97C1, 0x97C1, 0x16E5,
+    0x97C2, 0x97C2, 0x47B6, 0x97C3, 0x97C3, 0x16E4, 0x97C4, 0x97C5, 0x344C,
+    0x97C6, 0x97C6, 0x1735, 0x97C7, 0x97C7, 0x34AC, 0x97C8, 0x97C8, 0x3F2F,
+    0x97C9, 0x97C9, 0x1756, 0x97CB, 0x97CB, 0x0828, 0x97CC, 0x97CC, 0x0DAF,
+    0x97CD, 0x97CD, 0x2861, 0x97CE, 0x97CE, 0x2860, 0x97CF, 0x97CF, 0x2AC1,
+    0x97D0, 0x97D0, 0x2AC0, 0x97D2, 0x97D2, 0x38D9, 0x97D3, 0x97D3, 0x14B5,
+    0x97D4, 0x97D4, 0x2EBC, 0x97D5, 0x97D5, 0x2EBB, 0x97D6, 0x97D6, 0x3034,
+    0x97D7, 0x97D7, 0x3032, 0x97D8, 0x97D8, 0x3035, 0x97D9, 0x97D9, 0x3033,
+    0x97DC, 0x97DC, 0x15F1, 0x97DD, 0x97DF, 0x316E, 0x97E0, 0x97E0, 0x38DA,
+    0x97E1, 0x97E1, 0x3334, 0x97E3, 0x97E3, 0x33D2, 0x97E5, 0x97E5, 0x34AD,
+    0x97E6, 0x97E6, 0x450C, 0x97ED, 0x97ED, 0x0829, 0x97EE, 0x97EE, 0x38DC,
+    0x97F0, 0x97F0, 0x2CFA, 0x97F1, 0x97F1, 0x2EBD, 0x97F2, 0x97F2, 0x394D,
+    0x97F3, 0x97F3, 0x082A, 0x97F5, 0x97F5, 0x38E0, 0x97F6, 0x97F6, 0x10ED,
+    0x97F8, 0x97F8, 0x2CFB, 0x97F9, 0x97F9, 0x1557, 0x97FA, 0x97FA, 0x3036,
+    0x97FB, 0x97FB, 0x15F2, 0x97FD, 0x97FE, 0x3273, 0x97FF, 0x97FF, 0x16A4,
+    0x9800, 0x9800, 0x344E, 0x9801, 0x9801, 0x082B, 0x9802, 0x9803, 0x0BDF,
+    0x9804, 0x9804, 0x20AB, 0x9805, 0x9806, 0x0DB0, 0x9807, 0x9807, 0x235C,
+    0x9808, 0x9808, 0x0DB2, 0x980A, 0x980A, 0x0F6E, 0x980C, 0x980C, 0x0F70,
+    0x980D, 0x980E, 0x2602, 0x980F, 0x980F, 0x2601, 0x9810, 0x9811, 0x0F6B,
+    0x9812, 0x9812, 0x0F6F, 0x9813, 0x9813, 0x0F6D, 0x9814, 0x9814, 0x4952,
+    0x9815, 0x9815, 0x433C, 0x9816, 0x9816, 0x2862, 0x9817, 0x9818, 0x10EE,
+    0x981B, 0x981B, 0x2AC8, 0x981C, 0x981C, 0x126C, 0x981D, 0x981D, 0x2AC3,
+    0x981E, 0x981E, 0x2AC2, 0x981F, 0x981F, 0x3C02, 0x9820, 0x9820, 0x2AC7,
+    0x9821, 0x9821, 0x126A, 0x9823, 0x9823, 0x3E37, 0x9824, 0x9824, 0x139A,
+    0x9826, 0x9826, 0x2AC4, 0x9827, 0x9827, 0x2AC9, 0x9828, 0x9828, 0x2AC6,
+    0x9829, 0x9829, 0x2AC5, 0x982B, 0x982B, 0x126B, 0x982D, 0x982D, 0x1398,
+    0x982E, 0x982E, 0x3F72, 0x982F, 0x982F, 0x2CFD, 0x9830, 0x9830, 0x1394,
+    0x9832, 0x9832, 0x2CFE, 0x9833, 0x9833, 0x38E5, 0x9834, 0x9834, 0x38E4,
+    0x9835, 0x9835, 0x2CFC, 0x9837, 0x9837, 0x1397, 0x9838, 0x9838, 0x1395,
+    0x9839, 0x9839, 0x1399, 0x983B, 0x983B, 0x1396, 0x9841, 0x9841, 0x2EBE,
+    0x9843, 0x9843, 0x2EC3, 0x9844, 0x9844, 0x2EBF, 0x9845, 0x9845, 0x2EC2,
+    0x9846, 0x9846, 0x14B6, 0x9847, 0x9847, 0x3D96, 0x9848, 0x9848, 0x2DF2,
+    0x9849, 0x9849, 0x2EC1, 0x984A, 0x984A, 0x2EC0, 0x984B, 0x984B, 0x38E6,
+    0x984C, 0x984C, 0x155A, 0x984D, 0x984D, 0x1558, 0x984E, 0x984E, 0x155B,
+    0x984F, 0x984F, 0x1559, 0x9850, 0x9852, 0x3037, 0x9853, 0x9853, 0x155C,
+    0x9857, 0x9857, 0x3174, 0x9858, 0x9858, 0x15F4, 0x9859, 0x9859, 0x3172,
+    0x985B, 0x985B, 0x15F5, 0x985C, 0x985C, 0x3171, 0x985D, 0x985D, 0x3173,
+    0x985E, 0x985E, 0x15F3, 0x985F, 0x985F, 0x3278, 0x9860, 0x9860, 0x3275,
+    0x9862, 0x9863, 0x3276, 0x9864, 0x9864, 0x3335, 0x9865, 0x9865, 0x16A6,
+    0x9866, 0x9866, 0x38E7, 0x9867, 0x9867, 0x16A5, 0x9869, 0x9869, 0x33D4,
+    0x986A, 0x986A, 0x33D3, 0x986B, 0x986B, 0x16E6, 0x986C, 0x986C, 0x4035,
+    0x986F, 0x986F, 0x1711, 0x9870, 0x9870, 0x1736, 0x9871, 0x9871, 0x174D,
+    0x9872, 0x9872, 0x34F2, 0x9873, 0x9874, 0x3527, 0x9875, 0x9875, 0x450D,
+    0x98A8, 0x98A8, 0x082C, 0x98A9, 0x98A9, 0x235D, 0x98AC, 0x98AC, 0x2604,
+    0x98AD, 0x98AE, 0x2863, 0x98AF, 0x98AF, 0x10F0, 0x98B1, 0x98B1, 0x10F1,
+    0x98B2, 0x98B2, 0x2ACA, 0x98B3, 0x98B3, 0x126D, 0x98B4, 0x98B4, 0x3F73,
+    0x98B6, 0x98B6, 0x14B7, 0x98B7, 0x98B7, 0x38EF, 0x98B8, 0x98B8, 0x303A,
+    0x98B9, 0x98B9, 0x47B8, 0x98BA, 0x98BA, 0x155D, 0x98BB, 0x98BB, 0x3177,
+    0x98BC, 0x98BC, 0x15F6, 0x98BD, 0x98BD, 0x3176, 0x98BE, 0x98BE, 0x3178,
+    0x98BF, 0x98BF, 0x3175, 0x98C0, 0x98C0, 0x3338, 0x98C1, 0x98C2, 0x3279,
+    0x98C3, 0x98C3, 0x3B78, 0x98C4, 0x98C4, 0x1657, 0x98C6, 0x98C6, 0x3337,
+    0x98C7, 0x98C7, 0x38F1, 0x98C8, 0x98C8, 0x38F0, 0x98C9, 0x98C9, 0x3336,
+    0x98CA, 0x98CA, 0x38EE, 0x98CB, 0x98CB, 0x33D5, 0x98CC, 0x98CC, 0x3529,
+    0x98CE, 0x98CE, 0x450E, 0x98DB, 0x98DB, 0x082D, 0x98DC, 0x98DC, 0x3C0B,
+    0x98DE, 0x98DE, 0x450F, 0x98DF, 0x98DF, 0x082E, 0x98E0, 0x98E0, 0x4792,
+    0x98E1, 0x98E1, 0x38F6, 0x98E2, 0x98E2, 0x09F4, 0x98E3, 0x98E3, 0x1E32,
+    0x98E5, 0x98E5, 0x20AC, 0x98E6, 0x98E6, 0x38F7, 0x98E7, 0x98E7, 0x0DB3,
+    0x98E9, 0x98E9, 0x0DB6, 0x98EA, 0x98EA, 0x0DB4, 0x98EB, 0x98EB, 0x235E,
+    0x98EC, 0x98EC, 0x38F8, 0x98ED, 0x98ED, 0x0DB8, 0x98EF, 0x98EF, 0x0DB5,
+    0x98F1, 0x98F1, 0x47BA, 0x98F2, 0x98F2, 0x0DB7, 0x98F4, 0x98F4, 0x0F72,
+    0x98F5, 0x98F5, 0x4365, 0x98F6, 0x98F6, 0x2605, 0x98F9, 0x98F9, 0x2606,
+    0x98FA, 0x98FA, 0x2ACC, 0x98FC, 0x98FC, 0x0F71, 0x98FD, 0x98FE, 0x0F73,
+    0x9900, 0x9900, 0x2866, 0x9902, 0x9902, 0x2865, 0x9903, 0x9903, 0x10F2,
+    0x9905, 0x9905, 0x10F3, 0x9907, 0x9907, 0x2867, 0x9908, 0x9908, 0x2ACB,
+    0x9909, 0x9909, 0x10F5, 0x990A, 0x990A, 0x126E, 0x990C, 0x990C, 0x10F4,
+    0x990E, 0x990E, 0x43ED, 0x9910, 0x9910, 0x139B, 0x9911, 0x9911, 0x2ACD,
+    0x9912, 0x9912, 0x1270, 0x9913, 0x9913, 0x126F, 0x9914, 0x9914, 0x2ACE,
+    0x9915, 0x9915, 0x2AD1, 0x9916, 0x9917, 0x2ACF, 0x9918, 0x9918, 0x1271,
+    0x9919, 0x9919, 0x47BC, 0x991A, 0x991A, 0x13A0, 0x991B, 0x991B, 0x139E,
+    0x991C, 0x991C, 0x43EE, 0x991E, 0x991E, 0x139D, 0x991F, 0x991F, 0x2D00,
+    0x9921, 0x9921, 0x139F, 0x9924, 0x9924, 0x2CFF, 0x9925, 0x9925, 0x2EC4,
+    0x9927, 0x9927, 0x2D01, 0x9928, 0x9928, 0x139C, 0x9929, 0x9929, 0x2D02,
+    0x992A, 0x992A, 0x2EC7, 0x992B, 0x992C, 0x2EC5, 0x992D, 0x992D, 0x2ECB,
+    0x992E, 0x992E, 0x1561, 0x992F, 0x992F, 0x2ECA, 0x9930, 0x9930, 0x2ECD,
+    0x9931, 0x9931, 0x2ECC, 0x9932, 0x9932, 0x2EC9, 0x9933, 0x9933, 0x2EC8,
+    0x9935, 0x9935, 0x14B8, 0x9937, 0x9937, 0x47BD, 0x9938, 0x9938, 0x3BFD,
+    0x9939, 0x9939, 0x38FA, 0x993A, 0x993A, 0x303D, 0x993B, 0x993B, 0x3C11,
+    0x993C, 0x993C, 0x303C, 0x993D, 0x993D, 0x1560, 0x993E, 0x993F, 0x155E,
+    0x9940, 0x9940, 0x3F34, 0x9941, 0x9941, 0x303B, 0x9942, 0x9942, 0x43FF,
+    0x9943, 0x9943, 0x317B, 0x9945, 0x9945, 0x15F7, 0x9947, 0x9947, 0x317A,
+    0x9948, 0x9948, 0x3179, 0x9949, 0x9949, 0x15F8, 0x994A, 0x994A, 0x3FB9,
+    0x994B, 0x994B, 0x327F, 0x994C, 0x994C, 0x327E, 0x994D, 0x994D, 0x3C12,
+    0x994E, 0x994E, 0x327C, 0x9950, 0x9950, 0x327B, 0x9951, 0x9951, 0x1659,
+    0x9952, 0x9952, 0x1658, 0x9953, 0x9953, 0x3280, 0x9954, 0x9954, 0x33D6,
+    0x9955, 0x9955, 0x16E7, 0x9956, 0x9956, 0x333A, 0x9957, 0x9957, 0x16A7,
+    0x9958, 0x9958, 0x3339, 0x9959, 0x9959, 0x327D, 0x995B, 0x995B, 0x33D7,
+    0x995C, 0x995C, 0x1712, 0x995D, 0x995D, 0x47BE, 0x995E, 0x995E, 0x174E,
+    0x995F, 0x995F, 0x34F3, 0x9961, 0x9961, 0x352A, 0x9962, 0x9962, 0x43EF,
+    0x9963, 0x9963, 0x4510, 0x9996, 0x9996, 0x082F, 0x9997, 0x9997, 0x20AD,
+    0x9998, 0x9998, 0x2ECE, 0x9999, 0x9999, 0x0830, 0x999B, 0x999B, 0x3C15,
+    0x999C, 0x999C, 0x2869, 0x999D, 0x999D, 0x2868, 0x999E, 0x999E, 0x2D03,
+    0x99A1, 0x99A1, 0x2ED0, 0x99A3, 0x99A3, 0x2ECF, 0x99A4, 0x99A4, 0x41C3,
+    0x99A5, 0x99A5, 0x1562, 0x99A6, 0x99A7, 0x317C, 0x99A8, 0x99A8, 0x165A,
+    0x99AA, 0x99AA, 0x3C17, 0x99AB, 0x99AB, 0x352B, 0x99AC, 0x99AC, 0x09F5,
+    0x99AD, 0x99AD, 0x0DBA, 0x99AE, 0x99AE, 0x0DB9, 0x99AF, 0x99AF, 0x2607,
+    0x99B0, 0x99B0, 0x2609, 0x99B1, 0x99B1, 0x0F76, 0x99B2, 0x99B2, 0x2608,
+    0x99B3, 0x99B3, 0x0F75, 0x99B4, 0x99B4, 0x0F77, 0x99B5, 0x99B5, 0x260A,
+    0x99B8, 0x99B8, 0x394B, 0x99B9, 0x99B9, 0x286B, 0x99BA, 0x99BA, 0x286D,
+    0x99BB, 0x99BB, 0x286C, 0x99BC, 0x99BC, 0x3C22, 0x99BD, 0x99BD, 0x286F,
+    0x99C1, 0x99C1, 0x10F6, 0x99C2, 0x99C2, 0x286E, 0x99C3, 0x99C3, 0x286A,
+    0x99C4, 0x99C4, 0x3D77, 0x99C5, 0x99C5, 0x47C1, 0x99C7, 0x99C7, 0x2870,
+    0x99C9, 0x99C9, 0x2AD8, 0x99CB, 0x99CB, 0x2ADB, 0x99CC, 0x99CC, 0x2ADD,
+    0x99CD, 0x99CD, 0x2AD3, 0x99CE, 0x99CE, 0x2AD7, 0x99CF, 0x99CF, 0x2AD4,
+    0x99D0, 0x99D0, 0x1273, 0x99D1, 0x99D1, 0x1276, 0x99D2, 0x99D2, 0x1278,
+    0x99D3, 0x99D4, 0x2AD5, 0x99D5, 0x99D5, 0x1277, 0x99D6, 0x99D6, 0x2AD9,
+    0x99D7, 0x99D7, 0x2ADC, 0x99D8, 0x99D8, 0x2ADA, 0x99D9, 0x99D9, 0x1279,
+    0x99DA, 0x99DA, 0x3F42, 0x99DB, 0x99DB, 0x1275, 0x99DC, 0x99DC, 0x2AD2,
+    0x99DD, 0x99DD, 0x1272, 0x99DF, 0x99DF, 0x1274, 0x99E1, 0x99E1, 0x3785,
+    0x99E2, 0x99E2, 0x13A2, 0x99E3, 0x99E3, 0x2D09, 0x99E4, 0x99E4, 0x2D07,
+    0x99E5, 0x99E5, 0x2D06, 0x99E6, 0x99E6, 0x3B65, 0x99E7, 0x99E7, 0x2D0C,
+    0x99E9, 0x99E9, 0x2D0B, 0x99EA, 0x99EA, 0x2D0A, 0x99EC, 0x99EC, 0x2D05,
+    0x99ED, 0x99ED, 0x13A1, 0x99EE, 0x99EE, 0x2D04, 0x99F0, 0x99F0, 0x2D08,
+    0x99F1, 0x99F1, 0x13A3, 0x99F4, 0x99F4, 0x2ED3, 0x99F5, 0x99F5, 0x38FF,
+    0x99F6, 0x99F6, 0x2ED7, 0x99F7, 0x99F7, 0x2ED4, 0x99F8, 0x99F8, 0x2ED6,
+    0x99F9, 0x99F9, 0x2ED5, 0x99FA, 0x99FA, 0x2ED2, 0x99FB, 0x99FB, 0x2ED8,
+    0x99FC, 0x99FC, 0x2EDB, 0x99FD, 0x99FE, 0x2ED9, 0x99FF, 0x99FF, 0x14BA,
+    0x9A01, 0x9A01, 0x14B9, 0x9A02, 0x9A02, 0x2ED1, 0x9A03, 0x9A03, 0x2EDC,
+    0x9A04, 0x9A04, 0x3042, 0x9A05, 0x9A05, 0x3045, 0x9A06, 0x9A06, 0x3047,
+    0x9A07, 0x9A07, 0x3046, 0x9A09, 0x9A09, 0x3040, 0x9A0A, 0x9A0A, 0x3044,
+    0x9A0B, 0x9A0B, 0x303F, 0x9A0C, 0x9A0C, 0x3900, 0x9A0D, 0x9A0D, 0x3041,
+    0x9A0E, 0x9A0E, 0x1563, 0x9A0F, 0x9A0F, 0x303E, 0x9A10, 0x9A10, 0x3902,
+    0x9A11, 0x9A11, 0x3043, 0x9A14, 0x9A14, 0x318A, 0x9A15, 0x9A15, 0x317F,
+    0x9A16, 0x9A16, 0x15F9, 0x9A19, 0x9A19, 0x15FA, 0x9A1A, 0x9A1A, 0x317E,
+    0x9A1B, 0x9A1B, 0x3183, 0x9A1C, 0x9A1C, 0x3189, 0x9A1D, 0x9A1D, 0x3181,
+    0x9A1E, 0x9A1E, 0x3188, 0x9A1F, 0x9A1F, 0x3B6C, 0x9A20, 0x9A20, 0x3185,
+    0x9A21, 0x9A21, 0x3C1C, 0x9A22, 0x9A22, 0x3184, 0x9A23, 0x9A23, 0x3187,
+    0x9A24, 0x9A24, 0x3182, 0x9A25, 0x9A25, 0x3180, 0x9A26, 0x9A26, 0x3DF2,
+    0x9A27, 0x9A27, 0x3186, 0x9A29, 0x9A29, 0x3287, 0x9A2A, 0x9A2A, 0x3285,
+    0x9A2B, 0x9A2B, 0x165B, 0x9A2C, 0x9A2C, 0x3284, 0x9A2D, 0x9A2D, 0x328A,
+    0x9A2E, 0x9A2E, 0x3288, 0x9A2F, 0x9A2F, 0x3C1E, 0x9A30, 0x9A30, 0x165C,
+    0x9A31, 0x9A31, 0x3283, 0x9A32, 0x9A32, 0x3281, 0x9A34, 0x9A34, 0x3282,
+    0x9A35, 0x9A35, 0x165E, 0x9A36, 0x9A36, 0x3286, 0x9A37, 0x9A37, 0x165D,
+    0x9A38, 0x9A38, 0x3289, 0x9A39, 0x9A39, 0x333B, 0x9A3A, 0x9A3A, 0x3341,
+    0x9A3B, 0x9A3B, 0x3901, 0x9A3C, 0x9A3C, 0x47C3, 0x9A3D, 0x9A3D, 0x333C,
+    0x9A3E, 0x9A3E, 0x16AB, 0x9A3F, 0x9A3F, 0x3342, 0x9A40, 0x9A40, 0x16AA,
+    0x9A41, 0x9A41, 0x3340, 0x9A42, 0x9A42, 0x333F, 0x9A43, 0x9A43, 0x16A9,
+    0x9A44, 0x9A44, 0x333E, 0x9A45, 0x9A45, 0x16A8, 0x9A46, 0x9A46, 0x333D,
+    0x9A48, 0x9A48, 0x33DD, 0x9A49, 0x9A49, 0x33DF, 0x9A4A, 0x9A4A, 0x33DE,
+    0x9A4C, 0x9A4C, 0x33DB, 0x9A4D, 0x9A4D, 0x16E9, 0x9A4E, 0x9A4E, 0x33D8,
+    0x9A4F, 0x9A4F, 0x33DC, 0x9A50, 0x9A50, 0x33E1, 0x9A52, 0x9A52, 0x33E0,
+    0x9A53, 0x9A54, 0x33D9, 0x9A55, 0x9A55, 0x16E8, 0x9A56, 0x9A56, 0x344F,
+    0x9A57, 0x9A57, 0x1715, 0x9A58, 0x9A58, 0x3903, 0x9A59, 0x9A59, 0x3450,
+    0x9A5A, 0x9A5B, 0x1713, 0x9A5C, 0x9A5C, 0x3C18, 0x9A5E, 0x9A5E, 0x34AE,
+    0x9A5F, 0x9A5F, 0x1737, 0x9A60, 0x9A60, 0x3510, 0x9A62, 0x9A62, 0x1757,
+    0x9A63, 0x9A63, 0x3B67, 0x9A64, 0x9A64, 0x352C, 0x9A65, 0x9A65, 0x1758,
+    0x9A66, 0x9A67, 0x352D, 0x9A68, 0x9A68, 0x353C, 0x9A69, 0x9A69, 0x353B,
+    0x9A6A, 0x9A6A, 0x1767, 0x9A6B, 0x9A6B, 0x3544, 0x9A6C, 0x9A6C, 0x4585,
+    0x9A8F, 0x9A8F, 0x4586, 0x9AA8, 0x9AA8, 0x09F6, 0x9AAB, 0x9AAB, 0x260C,
+    0x9AAD, 0x9AAD, 0x260B, 0x9AAF, 0x9AB0, 0x10F7, 0x9AB1, 0x9AB1, 0x2871,
+    0x9AB2, 0x9AB2, 0x4332, 0x9AB3, 0x9AB3, 0x2ADE, 0x9AB4, 0x9AB4, 0x2D0F,
+    0x9AB6, 0x9AB6, 0x43F0, 0x9AB7, 0x9AB7, 0x127A, 0x9AB8, 0x9AB8, 0x13A4,
+    0x9AB9, 0x9AB9, 0x2D0D, 0x9ABA, 0x9ABA, 0x3F74, 0x9ABB, 0x9ABB, 0x2D10,
+    0x9ABC, 0x9ABC, 0x13A5, 0x9ABD, 0x9ABD, 0x3D97, 0x9ABE, 0x9ABE, 0x2EDD,
+    0x9ABF, 0x9ABF, 0x2D0E, 0x9AC0, 0x9AC0, 0x3048, 0x9AC1, 0x9AC1, 0x1564,
+    0x9AC2, 0x9AC2, 0x318B, 0x9AC6, 0x9AC6, 0x328D, 0x9AC7, 0x9AC7, 0x328B,
+    0x9ACA, 0x9ACA, 0x328C, 0x9ACD, 0x9ACD, 0x3343, 0x9ACF, 0x9ACF, 0x16AC,
+    0x9AD0, 0x9AD0, 0x33E2, 0x9AD1, 0x9AD1, 0x1718, 0x9AD2, 0x9AD2, 0x16EA,
+    0x9AD3, 0x9AD4, 0x1716, 0x9AD5, 0x9AD5, 0x34AF, 0x9AD6, 0x9AD6, 0x174F,
+    0x9AD7, 0x9AD7, 0x3FAA, 0x9AD8, 0x9AD8, 0x09F7, 0x9ADC, 0x9ADC, 0x3049,
+    0x9ADF, 0x9ADF, 0x1E33, 0x9AE0, 0x9AE0, 0x3908, 0x9AE1, 0x9AE1, 0x0F78,
+    0x9AE2, 0x9AE2, 0x3909, 0x9AE3, 0x9AE3, 0x2872, 0x9AE6, 0x9AE6, 0x10F9,
+    0x9AE7, 0x9AE7, 0x2873, 0x9AEB, 0x9AEB, 0x2AE0, 0x9AEC, 0x9AEC, 0x2ADF,
+    0x9AED, 0x9AED, 0x13A7, 0x9AEE, 0x9AEF, 0x127B, 0x9AF1, 0x9AF1, 0x2AE3,
+    0x9AF2, 0x9AF2, 0x2AE2, 0x9AF3, 0x9AF3, 0x2AE1, 0x9AF4, 0x9AF4, 0x390B,
+    0x9AF6, 0x9AF6, 0x2D11, 0x9AF7, 0x9AF7, 0x2D14, 0x9AF9, 0x9AF9, 0x2D13,
+    0x9AFA, 0x9AFA, 0x2D12, 0x9AFB, 0x9AFB, 0x13A6, 0x9AFC, 0x9AFC, 0x2EE1,
+    0x9AFD, 0x9AFD, 0x2EDF, 0x9AFE, 0x9AFE, 0x2EDE, 0x9AFF, 0x9AFF, 0x3F17,
+    0x9B01, 0x9B01, 0x2EE0, 0x9B02, 0x9B02, 0x3F12, 0x9B03, 0x9B03, 0x1565,
+    0x9B04, 0x9B05, 0x304B, 0x9B06, 0x9B06, 0x1566, 0x9B08, 0x9B08, 0x304A,
+    0x9B09, 0x9B09, 0x3F20, 0x9B0A, 0x9B0A, 0x318D, 0x9B0B, 0x9B0B, 0x318C,
+    0x9B0C, 0x9B0C, 0x318F, 0x9B0D, 0x9B0D, 0x15FB, 0x9B0E, 0x9B0E, 0x318E,
+    0x9B0F, 0x9B0F, 0x47C4, 0x9B10, 0x9B10, 0x328E, 0x9B11, 0x9B11, 0x3290,
+    0x9B12, 0x9B12, 0x328F, 0x9B14, 0x9B14, 0x390D, 0x9B15, 0x9B15, 0x3344,
+    0x9B16, 0x9B16, 0x3347, 0x9B17, 0x9B18, 0x3345, 0x9B19, 0x9B19, 0x33E3,
+    0x9B1A, 0x9B1A, 0x16EB, 0x9B1E, 0x9B20, 0x3451, 0x9B22, 0x9B22, 0x1738,
+    0x9B23, 0x9B23, 0x1750, 0x9B24, 0x9B24, 0x352F, 0x9B25, 0x9B25, 0x09F8,
+    0x9B27, 0x9B27, 0x127D, 0x9B28, 0x9B28, 0x13A8, 0x9B29, 0x9B29, 0x304D,
+    0x9B2A, 0x9B2A, 0x3F19, 0x9B2B, 0x9B2B, 0x33E4, 0x9B2D, 0x9B2D, 0x390E,
+    0x9B2E, 0x9B2E, 0x3511, 0x9B2F, 0x9B2F, 0x1E34, 0x9B31, 0x9B31, 0x1768,
+    0x9B32, 0x9B32, 0x09F9, 0x9B33, 0x9B33, 0x2D15, 0x9B34, 0x9B34, 0x3911,
+    0x9B35, 0x9B35, 0x304E, 0x9B37, 0x9B37, 0x3190, 0x9B39, 0x9B39, 0x3F00,
+    0x9B3A, 0x9B3A, 0x3348, 0x9B3B, 0x9B3B, 0x33E5, 0x9B3C, 0x9B3C, 0x09FA,
+    0x9B3E, 0x9B3F, 0x2874, 0x9B40, 0x9B40, 0x3915, 0x9B41, 0x9B42, 0x10FA,
+    0x9B43, 0x9B43, 0x2AE5, 0x9B44, 0x9B44, 0x127F, 0x9B45, 0x9B45, 0x127E,
+    0x9B46, 0x9B46, 0x2AE4, 0x9B48, 0x9B48, 0x2EE2, 0x9B4A, 0x9B4A, 0x304F,
+    0x9B4B, 0x9B4B, 0x3051, 0x9B4C, 0x9B4C, 0x3050, 0x9B4D, 0x9B4D, 0x1569,
+    0x9B4E, 0x9B4E, 0x1568, 0x9B4F, 0x9B4F, 0x1567, 0x9B50, 0x9B50, 0x3914,
+    0x9B51, 0x9B51, 0x16AE, 0x9B52, 0x9B52, 0x3349, 0x9B54, 0x9B54, 0x16AD,
+    0x9B55, 0x9B55, 0x33E7, 0x9B56, 0x9B56, 0x33E6, 0x9B58, 0x9B58, 0x1739,
+    0x9B59, 0x9B59, 0x34B0, 0x9B5A, 0x9B5A, 0x0BE1, 0x9B5B, 0x9B5B, 0x260D,
+    0x9B5F, 0x9B5F, 0x2878, 0x9B60, 0x9B61, 0x2876, 0x9B64, 0x9B64, 0x2AEE,
+    0x9B66, 0x9B66, 0x2AE9, 0x9B67, 0x9B67, 0x2AE6, 0x9B68, 0x9B68, 0x2AED,
+    0x9B69, 0x9B69, 0x47C5, 0x9B6C, 0x9B6C, 0x2AEF, 0x9B6F, 0x9B6F, 0x1281,
+    0x9B70, 0x9B70, 0x2AEC, 0x9B71, 0x9B71, 0x2AE8, 0x9B74, 0x9B74, 0x2AE7,
+    0x9B75, 0x9B75, 0x2AEB, 0x9B76, 0x9B76, 0x2AEA, 0x9B77, 0x9B77, 0x1280,
+    0x9B7A, 0x9B7A, 0x2D20, 0x9B7B, 0x9B7B, 0x2D1B, 0x9B7C, 0x9B7C, 0x2D19,
+    0x9B7D, 0x9B7D, 0x2D22, 0x9B7E, 0x9B7E, 0x2D1A, 0x9B7F, 0x9B7F, 0x3C3B,
+    0x9B80, 0x9B80, 0x2D16, 0x9B81, 0x9B81, 0x43F1, 0x9B82, 0x9B82, 0x2D1C,
+    0x9B83, 0x9B83, 0x4219, 0x9B85, 0x9B85, 0x2D17, 0x9B86, 0x9B86, 0x2EEB,
+    0x9B87, 0x9B87, 0x2D18, 0x9B88, 0x9B88, 0x2D23, 0x9B8B, 0x9B8B, 0x3EEE,
+    0x9B8D, 0x9B8D, 0x4623, 0x9B8E, 0x9B8E, 0x3919, 0x9B8F, 0x9B8F, 0x3FAD,
+    0x9B90, 0x9B90, 0x2D1F, 0x9B91, 0x9B91, 0x13A9, 0x9B92, 0x9B92, 0x2D1E,
+    0x9B93, 0x9B93, 0x2D1D, 0x9B95, 0x9B95, 0x2D21, 0x9B97, 0x9B97, 0x3F71,
+    0x9B9A, 0x9B9A, 0x2EE3, 0x9B9B, 0x9B9B, 0x2EE6, 0x9B9D, 0x9B9D, 0x3F56,
+    0x9B9E, 0x9B9E, 0x2EE5, 0x9B9F, 0x9B9F, 0x3C3E, 0x9BA0, 0x9BA0, 0x2EED,
+    0x9BA1, 0x9BA1, 0x2EE8, 0x9BA2, 0x9BA2, 0x2EEC, 0x9BA4, 0x9BA4, 0x2EEA,
+    0x9BA5, 0x9BA5, 0x2EE9, 0x9BA6, 0x9BA6, 0x2EE7, 0x9BA8, 0x9BA8, 0x2EE4,
+    0x9BAA, 0x9BAA, 0x14BD, 0x9BAB, 0x9BAB, 0x14BC, 0x9BAD, 0x9BAD, 0x14BE,
+    0x9BAE, 0x9BAE, 0x14BB, 0x9BAF, 0x9BAF, 0x2EEE, 0x9BB0, 0x9BB0, 0x3FB4,
+    0x9BB5, 0x9BB5, 0x3057, 0x9BB6, 0x9BB6, 0x305A, 0x9BB8, 0x9BB8, 0x3058,
+    0x9BB9, 0x9BB9, 0x305C, 0x9BBD, 0x9BBD, 0x305D, 0x9BBF, 0x9BBF, 0x3055,
+    0x9BC0, 0x9BC0, 0x156E, 0x9BC1, 0x9BC1, 0x3056, 0x9BC3, 0x9BC3, 0x3054,
+    0x9BC4, 0x9BC4, 0x305B, 0x9BC6, 0x9BC6, 0x3053, 0x9BC7, 0x9BC7, 0x3052,
+    0x9BC8, 0x9BC8, 0x156D, 0x9BC9, 0x9BC9, 0x156B, 0x9BCA, 0x9BCA, 0x156A,
+    0x9BCF, 0x9BCF, 0x3C3C, 0x9BD3, 0x9BD3, 0x3059, 0x9BD4, 0x9BD4, 0x3199,
+    0x9BD5, 0x9BD5, 0x319F, 0x9BD6, 0x9BD6, 0x15FE, 0x9BD7, 0x9BD7, 0x319A,
+    0x9BD9, 0x9BD9, 0x319D, 0x9BDA, 0x9BDA, 0x31A1, 0x9BDB, 0x9BDB, 0x15FF,
+    0x9BDC, 0x9BDC, 0x319C, 0x9BDD, 0x9BDD, 0x47C6, 0x9BDE, 0x9BDE, 0x3194,
+    0x9BE0, 0x9BE0, 0x3193, 0x9BE1, 0x9BE1, 0x31A0, 0x9BE2, 0x9BE2, 0x3197,
+    0x9BE4, 0x9BE4, 0x3195, 0x9BE5, 0x9BE5, 0x319E, 0x9BE6, 0x9BE6, 0x3196,
+    0x9BE7, 0x9BE7, 0x15FD, 0x9BE8, 0x9BE8, 0x15FC, 0x9BE9, 0x9BE9, 0x3BC1,
+    0x9BEA, 0x9BEB, 0x3191, 0x9BEC, 0x9BEC, 0x319B, 0x9BED, 0x9BED, 0x3ED7,
+    0x9BF0, 0x9BF0, 0x3198, 0x9BF1, 0x9BF1, 0x47C7, 0x9BF4, 0x9BF4, 0x47C8,
+    0x9BF7, 0x9BF7, 0x3293, 0x9BF8, 0x9BF8, 0x3296, 0x9BFD, 0x9BFD, 0x156C,
+    0x9BFF, 0x9BFF, 0x391B, 0x9C02, 0x9C02, 0x391A, 0x9C05, 0x9C05, 0x3294,
+    0x9C06, 0x9C06, 0x329A, 0x9C07, 0x9C07, 0x3298, 0x9C08, 0x9C08, 0x3292,
+    0x9C09, 0x9C09, 0x329D, 0x9C0A, 0x9C0A, 0x3F3A, 0x9C0B, 0x9C0B, 0x3291,
+    0x9C0C, 0x9C0C, 0x391C, 0x9C0D, 0x9C0D, 0x1660, 0x9C0E, 0x9C0E, 0x3299,
+    0x9C10, 0x9C10, 0x3C3A, 0x9C12, 0x9C12, 0x3295, 0x9C13, 0x9C13, 0x165F,
+    0x9C14, 0x9C14, 0x329C, 0x9C15, 0x9C15, 0x3F1E, 0x9C17, 0x9C17, 0x329B,
+    0x9C1B, 0x9C1B, 0x491B, 0x9C1C, 0x9C1C, 0x334C, 0x9C1D, 0x9C1D, 0x334B,
+    0x9C1F, 0x9C1F, 0x4622, 0x9C20, 0x9C20, 0x47CA, 0x9C21, 0x9C21, 0x3352,
+    0x9C23, 0x9C23, 0x334E, 0x9C24, 0x9C24, 0x3351, 0x9C25, 0x9C25, 0x16B0,
+    0x9C26, 0x9C26, 0x45E6, 0x9C28, 0x9C29, 0x334F, 0x9C2B, 0x9C2B, 0x334A,
+    0x9C2C, 0x9C2C, 0x334D, 0x9C2D, 0x9C2D, 0x16AF, 0x9C2E, 0x9C2E, 0x3F22,
+    0x9C2F, 0x9C2F, 0x3D87, 0x9C31, 0x9C31, 0x16ED, 0x9C32, 0x9C32, 0x33F2,
+    0x9C33, 0x9C33, 0x33ED, 0x9C34, 0x9C34, 0x33F1, 0x9C35, 0x9C35, 0x3C39,
+    0x9C36, 0x9C36, 0x33F4, 0x9C37, 0x9C37, 0x33F0, 0x9C39, 0x9C39, 0x33EC,
+    0x9C3A, 0x9C3A, 0x3D7E, 0x9C3B, 0x9C3B, 0x16EF, 0x9C3C, 0x9C3C, 0x33EF,
+    0x9C3D, 0x9C3D, 0x33F3, 0x9C3E, 0x9C3E, 0x16EE, 0x9C3F, 0x9C3F, 0x33EA,
+    0x9C40, 0x9C40, 0x3297, 0x9C41, 0x9C41, 0x33EE, 0x9C44, 0x9C44, 0x33EB,
+    0x9C45, 0x9C45, 0x3E71, 0x9C46, 0x9C46, 0x33E8, 0x9C48, 0x9C48, 0x33E9,
+    0x9C49, 0x9C49, 0x16EC, 0x9C4A, 0x9C4A, 0x3457, 0x9C4B, 0x9C4B, 0x3459,
+    0x9C4C, 0x9C4C, 0x345C, 0x9C4D, 0x9C4D, 0x3458, 0x9C4E, 0x9C4E, 0x345D,
+    0x9C4F, 0x9C4F, 0x3C36, 0x9C50, 0x9C50, 0x3456, 0x9C52, 0x9C52, 0x3454,
+    0x9C53, 0x9C53, 0x3C37, 0x9C54, 0x9C54, 0x1719, 0x9C55, 0x9C55, 0x345A,
+    0x9C56, 0x9C56, 0x171B, 0x9C57, 0x9C57, 0x171A, 0x9C58, 0x9C58, 0x3455,
+    0x9C59, 0x9C59, 0x345B, 0x9C5D, 0x9C5D, 0x3EBF, 0x9C5E, 0x9C5E, 0x34B5,
+    0x9C5F, 0x9C5F, 0x173A, 0x9C60, 0x9C60, 0x34B6, 0x9C62, 0x9C62, 0x34B4,
+    0x9C63, 0x9C63, 0x34B1, 0x9C66, 0x9C66, 0x34B3, 0x9C67, 0x9C67, 0x34B2,
+    0x9C68, 0x9C68, 0x34F4, 0x9C6D, 0x9C6D, 0x34F6, 0x9C6E, 0x9C6E, 0x34F5,
+    0x9C71, 0x9C71, 0x3514, 0x9C72, 0x9C72, 0x3EA1, 0x9C73, 0x9C73, 0x3513,
+    0x9C74, 0x9C74, 0x3512, 0x9C75, 0x9C75, 0x3515, 0x9C77, 0x9C78, 0x1760,
+    0x9C79, 0x9C79, 0x3541, 0x9C7A, 0x9C7A, 0x3545, 0x9C7B, 0x9C7B, 0x3C38,
+    0x9C7C, 0x9C7C, 0x4512, 0x9CE5, 0x9CE5, 0x0BE2, 0x9CE6, 0x9CE6, 0x235F,
+    0x9CE7, 0x9CE7, 0x2610, 0x9CE9, 0x9CE9, 0x0F79, 0x9CEA, 0x9CEA, 0x260E,
+    0x9CED, 0x9CED, 0x260F, 0x9CF1, 0x9CF2, 0x2879, 0x9CF3, 0x9CF3, 0x10FE,
+    0x9CF4, 0x9CF4, 0x10FC, 0x9CF5, 0x9CF5, 0x287B, 0x9CF6, 0x9CF6, 0x10FD,
+    0x9CF7, 0x9CF7, 0x2AF4, 0x9CF9, 0x9CF9, 0x2AF7, 0x9CFA, 0x9CFA, 0x2AF1,
+    0x9CFB, 0x9CFB, 0x2AF8, 0x9CFC, 0x9CFC, 0x2AF0, 0x9CFD, 0x9CFD, 0x2AF2,
+    0x9CFF, 0x9CFF, 0x2AF3, 0x9D00, 0x9D00, 0x2AF6, 0x9D02, 0x9D02, 0x3F3B,
+    0x9D03, 0x9D03, 0x1284, 0x9D04, 0x9D04, 0x2AFB, 0x9D05, 0x9D05, 0x2AFA,
+    0x9D06, 0x9D06, 0x1282, 0x9D07, 0x9D07, 0x2AF5, 0x9D08, 0x9D08, 0x2AF9,
+    0x9D09, 0x9D09, 0x1283, 0x9D0C, 0x9D0C, 0x3C46, 0x9D10, 0x9D10, 0x2D2D,
+    0x9D12, 0x9D12, 0x13AE, 0x9D14, 0x9D14, 0x2D28, 0x9D15, 0x9D15, 0x13AA,
+    0x9D16, 0x9D16, 0x3C7C, 0x9D17, 0x9D17, 0x2D25, 0x9D18, 0x9D18, 0x2D2B,
+    0x9D19, 0x9D19, 0x2D2E, 0x9D1B, 0x9D1B, 0x13AF, 0x9D1D, 0x9D1D, 0x2D2A,
+    0x9D1E, 0x9D1E, 0x2D27, 0x9D1F, 0x9D1F, 0x2D2F, 0x9D20, 0x9D20, 0x2D26,
+    0x9D21, 0x9D21, 0x3C41, 0x9D22, 0x9D22, 0x2D2C, 0x9D23, 0x9D23, 0x13AB,
+    0x9D25, 0x9D25, 0x2D24, 0x9D26, 0x9D26, 0x13AC, 0x9D28, 0x9D28, 0x13AD,
+    0x9D29, 0x9D29, 0x2D29, 0x9D2D, 0x9D2D, 0x2F00, 0x9D2E, 0x9D2F, 0x2EF3,
+    0x9D30, 0x9D30, 0x2EF7, 0x9D31, 0x9D31, 0x2EF5, 0x9D33, 0x9D33, 0x2EEF,
+    0x9D34, 0x9D34, 0x404A, 0x9D36, 0x9D36, 0x2EF2, 0x9D37, 0x9D37, 0x2EFC,
+    0x9D38, 0x9D38, 0x2EF6, 0x9D39, 0x9D39, 0x392E, 0x9D3B, 0x9D3B, 0x14BF,
+    0x9D3D, 0x9D3D, 0x2EFE, 0x9D3E, 0x9D3E, 0x2EFB, 0x9D3F, 0x9D3F, 0x14C0,
+    0x9D40, 0x9D40, 0x2EFD, 0x9D41, 0x9D41, 0x2EF0, 0x9D42, 0x9D43, 0x2EF9,
+    0x9D44, 0x9D44, 0x3FAB, 0x9D45, 0x9D45, 0x2EF8, 0x9D49, 0x9D49, 0x47CD,
+    0x9D4A, 0x9D4A, 0x3061, 0x9D4B, 0x9D4B, 0x3063, 0x9D4C, 0x9D4C, 0x3066,
+    0x9D4E, 0x9D4E, 0x4539, 0x9D4F, 0x9D4F, 0x3060, 0x9D50, 0x9D50, 0x3ECA,
+    0x9D51, 0x9D51, 0x156F, 0x9D52, 0x9D52, 0x3068, 0x9D53, 0x9D53, 0x305F,
+    0x9D54, 0x9D54, 0x3069, 0x9D56, 0x9D56, 0x3065, 0x9D57, 0x9D57, 0x3067,
+    0x9D58, 0x9D58, 0x306B, 0x9D59, 0x9D59, 0x3064, 0x9D5A, 0x9D5A, 0x306C,
+    0x9D5B, 0x9D5B, 0x3062, 0x9D5C, 0x9D5C, 0x305E, 0x9D5D, 0x9D5D, 0x1570,
+    0x9D5E, 0x9D5E, 0x3E6E, 0x9D5F, 0x9D5F, 0x306A, 0x9D60, 0x9D60, 0x1571,
+    0x9D61, 0x9D61, 0x1601, 0x9D67, 0x9D67, 0x2EF1, 0x9D68, 0x9D68, 0x31BB,
+    0x9D69, 0x9D69, 0x31B2, 0x9D6A, 0x9D6A, 0x1603, 0x9D6B, 0x9D6B, 0x31AE,
+    0x9D6C, 0x9D6C, 0x1604, 0x9D6D, 0x9D6D, 0x3BAC, 0x9D6E, 0x9D6E, 0x433B,
+    0x9D6F, 0x9D6F, 0x31B7, 0x9D70, 0x9D70, 0x31B1, 0x9D71, 0x9D71, 0x31A7,
+    0x9D72, 0x9D72, 0x1602, 0x9D73, 0x9D73, 0x31B4, 0x9D74, 0x9D75, 0x31AF,
+    0x9D77, 0x9D77, 0x31A2, 0x9D78, 0x9D78, 0x31A9, 0x9D79, 0x9D79, 0x31B8,
+    0x9D7B, 0x9D7B, 0x31B5, 0x9D7C, 0x9D7C, 0x3EFE, 0x9D7D, 0x9D7D, 0x31AD,
+    0x9D7E, 0x9D7E, 0x3925, 0x9D7F, 0x9D7F, 0x31B9, 0x9D80, 0x9D80, 0x31A8,
+    0x9D81, 0x9D81, 0x31A3, 0x9D82, 0x9D82, 0x31B6, 0x9D83, 0x9D83, 0x3926,
+    0x9D84, 0x9D84, 0x31A5, 0x9D85, 0x9D85, 0x31B3, 0x9D86, 0x9D86, 0x31AA,
+    0x9D87, 0x9D87, 0x31BA, 0x9D88, 0x9D88, 0x31A6, 0x9D89, 0x9D89, 0x1600,
+    0x9D8A, 0x9D8A, 0x31A4, 0x9D8B, 0x9D8C, 0x31AB, 0x9D90, 0x9D90, 0x32A4,
+    0x9D92, 0x9D92, 0x32A2, 0x9D93, 0x9D93, 0x43F3, 0x9D94, 0x9D94, 0x32A7,
+    0x9D96, 0x9D96, 0x32B3, 0x9D97, 0x9D97, 0x32AA, 0x9D98, 0x9D98, 0x32A3,
+    0x9D99, 0x9D99, 0x329F, 0x9D9A, 0x9D9A, 0x32AC, 0x9D9B, 0x9D9B, 0x32A5,
+    0x9D9C, 0x9D9C, 0x32A8, 0x9D9D, 0x9D9D, 0x32A1, 0x9D9E, 0x9D9E, 0x32AF,
+    0x9D9F, 0x9D9F, 0x329E, 0x9DA0, 0x9DA0, 0x32A6, 0x9DA1, 0x9DA1, 0x32AB,
+    0x9DA2, 0x9DA2, 0x32AD, 0x9DA3, 0x9DA3, 0x32B0, 0x9DA4, 0x9DA4, 0x32A0,
+    0x9DA5, 0x9DA5, 0x3C4B, 0x9DA6, 0x9DA7, 0x32B4, 0x9DA8, 0x9DA8, 0x32AE,
+    0x9DA9, 0x9DA9, 0x32B2, 0x9DAA, 0x9DAA, 0x32A9, 0x9DAB, 0x9DAB, 0x3F30,
+    0x9DAC, 0x9DAC, 0x3362, 0x9DAD, 0x9DAD, 0x3365, 0x9DAF, 0x9DAF, 0x16B1,
+    0x9DB1, 0x9DB1, 0x3364, 0x9DB2, 0x9DB2, 0x3369, 0x9DB3, 0x9DB3, 0x3367,
+    0x9DB4, 0x9DB4, 0x16B2, 0x9DB5, 0x9DB5, 0x335E, 0x9DB6, 0x9DB6, 0x3354,
+    0x9DB7, 0x9DB7, 0x3353, 0x9DB8, 0x9DB8, 0x16B4, 0x9DB9, 0x9DBA, 0x3360,
+    0x9DBB, 0x9DBB, 0x335D, 0x9DBC, 0x9DBC, 0x3355, 0x9DBD, 0x9DBD, 0x47D0,
+    0x9DBE, 0x9DBE, 0x335A, 0x9DBF, 0x9DBF, 0x32B1, 0x9DC0, 0x9DC0, 0x43F2,
+    0x9DC1, 0x9DC1, 0x3356, 0x9DC2, 0x9DC2, 0x16B3, 0x9DC3, 0x9DC3, 0x335C,
+    0x9DC4, 0x9DC4, 0x3929, 0x9DC5, 0x9DC5, 0x335B, 0x9DC7, 0x9DC7, 0x3357,
+    0x9DC8, 0x9DC8, 0x3363, 0x9DC9, 0x9DC9, 0x4579, 0x9DCA, 0x9DCA, 0x3358,
+    0x9DCB, 0x9DCB, 0x33F9, 0x9DCC, 0x9DCC, 0x3366, 0x9DCD, 0x9DCD, 0x3368,
+    0x9DCE, 0x9DCE, 0x335F, 0x9DCF, 0x9DCF, 0x3359, 0x9DD0, 0x9DD0, 0x33FA,
+    0x9DD1, 0x9DD1, 0x33FC, 0x9DD2, 0x9DD2, 0x33F6, 0x9DD3, 0x9DD3, 0x16F0,
+    0x9DD4, 0x9DD4, 0x391E, 0x9DD5, 0x9DD5, 0x3403, 0x9DD6, 0x9DD6, 0x3401,
+    0x9DD7, 0x9DD7, 0x16F1, 0x9DD8, 0x9DD8, 0x3400, 0x9DD9, 0x9DD9, 0x33FF,
+    0x9DDA, 0x9DDA, 0x33F8, 0x9DDB, 0x9DDB, 0x33F5, 0x9DDC, 0x9DDC, 0x33FB,
+    0x9DDD, 0x9DDD, 0x3404, 0x9DDE, 0x9DDE, 0x33F7, 0x9DDF, 0x9DDF, 0x33FD,
+    0x9DE1, 0x9DE1, 0x3466, 0x9DE2, 0x9DE2, 0x346B, 0x9DE3, 0x9DE3, 0x3461,
+    0x9DE4, 0x9DE4, 0x3464, 0x9DE5, 0x9DE5, 0x171C, 0x9DE6, 0x9DE6, 0x3468,
+    0x9DE8, 0x9DE8, 0x346F, 0x9DE9, 0x9DE9, 0x33FE, 0x9DEB, 0x9DEB, 0x3462,
+    0x9DEC, 0x9DEC, 0x346C, 0x9DED, 0x9DED, 0x3470, 0x9DEE, 0x9DEE, 0x3467,
+    0x9DEF, 0x9DEF, 0x3460, 0x9DF0, 0x9DF0, 0x346A, 0x9DF2, 0x9DF2, 0x3469,
+    0x9DF3, 0x9DF3, 0x346E, 0x9DF4, 0x9DF4, 0x346D, 0x9DF5, 0x9DF5, 0x3402,
+    0x9DF6, 0x9DF6, 0x3465, 0x9DF7, 0x9DF7, 0x345F, 0x9DF8, 0x9DF8, 0x3463,
+    0x9DF9, 0x9DFA, 0x173B, 0x9DFB, 0x9DFB, 0x345E, 0x9DFC, 0x9DFC, 0x47D1,
+    0x9DFD, 0x9DFD, 0x34C1, 0x9DFE, 0x9DFE, 0x34B8, 0x9DFF, 0x9DFF, 0x34C0,
+    0x9E00, 0x9E01, 0x34BD, 0x9E02, 0x9E02, 0x34B7, 0x9E03, 0x9E03, 0x34BA,
+    0x9E04, 0x9E04, 0x34C2, 0x9E05, 0x9E05, 0x34BC, 0x9E06, 0x9E06, 0x34BB,
+    0x9E07, 0x9E07, 0x34B9, 0x9E09, 0x9E09, 0x34BF, 0x9E0A, 0x9E0A, 0x457E,
+    0x9E0B, 0x9E0B, 0x34F7, 0x9E0C, 0x9E0C, 0x457A, 0x9E0D, 0x9E0D, 0x34F8,
+    0x9E0E, 0x9E0E, 0x3928, 0x9E0F, 0x9E0F, 0x34FA, 0x9E10, 0x9E10, 0x34F9,
+    0x9E11, 0x9E11, 0x34FC, 0x9E12, 0x9E12, 0x34FB, 0x9E13, 0x9E13, 0x3517,
+    0x9E14, 0x9E14, 0x3516, 0x9E15, 0x9E15, 0x3530, 0x9E17, 0x9E17, 0x3531,
+    0x9E18, 0x9E18, 0x3C44, 0x9E19, 0x9E19, 0x353D, 0x9E1A, 0x9E1A, 0x1765,
+    0x9E1B, 0x9E1B, 0x1769, 0x9E1C, 0x9E1C, 0x3F84, 0x9E1D, 0x9E1D, 0x3546,
+    0x9E1E, 0x9E1E, 0x176A, 0x9E1F, 0x9E1F, 0x4513, 0x9E75, 0x9E75, 0x0BE3,
+    0x9E79, 0x9E79, 0x1661, 0x9E7A, 0x9E7A, 0x336A, 0x9E7B, 0x9E7B, 0x43F8,
+    0x9E7C, 0x9E7D, 0x173D, 0x9E7F, 0x9E7F, 0x0BE4, 0x9E80, 0x9E80, 0x2611,
+    0x9E81, 0x9E81, 0x3F0F, 0x9E82, 0x9E82, 0x0F7A, 0x9E83, 0x9E83, 0x2AFC,
+    0x9E84, 0x9E84, 0x3F76, 0x9E85, 0x9E85, 0x3EF2, 0x9E86, 0x9E87, 0x2D31,
+    0x9E88, 0x9E88, 0x2D30, 0x9E89, 0x9E89, 0x2F02, 0x9E8A, 0x9E8A, 0x2F01,
+    0x9E8B, 0x9E8B, 0x14C1, 0x9E8C, 0x9E8C, 0x306E, 0x9E8D, 0x9E8D, 0x2F03,
+    0x9E8E, 0x9E8E, 0x306D, 0x9E90, 0x9E90, 0x3931, 0x9E91, 0x9E91, 0x31BD,
+    0x9E92, 0x9E92, 0x1605, 0x9E93, 0x9E93, 0x1607, 0x9E94, 0x9E94, 0x31BC,
+    0x9E95, 0x9E95, 0x3932, 0x9E96, 0x9E96, 0x3FBC, 0x9E97, 0x9E97, 0x1606,
+    0x9E98, 0x9E98, 0x3F27, 0x9E99, 0x9E99, 0x32B6, 0x9E9A, 0x9E9A, 0x32B8,
+    0x9E9B, 0x9E9B, 0x32B7, 0x9E9C, 0x9E9C, 0x336B, 0x9E9D, 0x9E9D, 0x16B5,
+    0x9E9E, 0x9E9E, 0x3933, 0x9E9F, 0x9E9F, 0x171D, 0x9EA0, 0x9EA0, 0x34C3,
+    0x9EA1, 0x9EA1, 0x34FD, 0x9EA2, 0x9EA2, 0x3934, 0x9EA4, 0x9EA4, 0x354A,
+    0x9EA5, 0x9EA5, 0x0BE5, 0x9EA6, 0x9EA6, 0x4944, 0x9EA7, 0x9EA7, 0x287C,
+    0x9EA8, 0x9EA8, 0x3F75, 0x9EA9, 0x9EA9, 0x1285, 0x9EAA, 0x9EAA, 0x3936,
+    0x9EAB, 0x9EAB, 0x3E92, 0x9EAC, 0x9EAC, 0x43F4, 0x9EAD, 0x9EAD, 0x2D34,
+    0x9EAE, 0x9EAE, 0x2D33, 0x9EAF, 0x9EAF, 0x3937, 0x9EB0, 0x9EB0, 0x2F04,
+    0x9EB1, 0x9EB1, 0x47D4, 0x9EB4, 0x9EB4, 0x1608, 0x9EB5, 0x9EB5, 0x1662,
+    0x9EB6, 0x9EB6, 0x3405, 0x9EB7, 0x9EB7, 0x3542, 0x9EBB, 0x9EBB, 0x0BE6,
+    0x9EBC, 0x9EBC, 0x10FF, 0x9EBD, 0x9EBD, 0x47D5, 0x9EBE, 0x9EBE, 0x1286,
+    0x9EBF, 0x9EBF, 0x3D78, 0x9EC0, 0x9EC0, 0x31BE, 0x9EC1, 0x9EC1, 0x3939,
+    0x9EC2, 0x9EC2, 0x3471, 0x9EC3, 0x9EC3, 0x0DBB, 0x9EC4, 0x9EC4, 0x4514,
+    0x9EC6, 0x9EC6, 0x47D6, 0x9EC7, 0x9EC7, 0x4577, 0x9EC8, 0x9EC8, 0x2F05,
+    0x9ECC, 0x9ECC, 0x1751, 0x9ECD, 0x9ECD, 0x0DBC, 0x9ECE, 0x9ECE, 0x1287,
+    0x9ECF, 0x9ECF, 0x14C2, 0x9ED0, 0x9ED0, 0x3472, 0x9ED1, 0x9ED1, 0x0DBD,
+    0x9ED3, 0x9ED3, 0x2AFD, 0x9ED4, 0x9ED4, 0x13B1, 0x9ED5, 0x9ED6, 0x2D35,
+    0x9ED8, 0x9ED8, 0x13B0, 0x9EDA, 0x9EDA, 0x2F06, 0x9EDB, 0x9EDB, 0x14C6,
+    0x9EDC, 0x9EDD, 0x14C4, 0x9EDE, 0x9EDE, 0x14C3, 0x9EDF, 0x9EDF, 0x306F,
+    0x9EE0, 0x9EE0, 0x1572, 0x9EE2, 0x9EE2, 0x47D8, 0x9EE4, 0x9EE4, 0x32BA,
+    0x9EE5, 0x9EE5, 0x32B9, 0x9EE6, 0x9EE6, 0x32BC, 0x9EE7, 0x9EE7, 0x32BB,
+    0x9EE8, 0x9EE8, 0x1663, 0x9EEB, 0x9EEB, 0x336C, 0x9EED, 0x9EED, 0x336E,
+    0x9EEE, 0x9EEE, 0x336D, 0x9EEF, 0x9EEF, 0x16B6, 0x9EF0, 0x9EF0, 0x3406,
+    0x9EF1, 0x9EF1, 0x47D9, 0x9EF2, 0x9EF3, 0x3473, 0x9EF4, 0x9EF4, 0x171E,
+    0x9EF5, 0x9EF5, 0x34FE, 0x9EF6, 0x9EF6, 0x3518, 0x9EF7, 0x9EF7, 0x1762,
+    0x9EF8, 0x9EF8, 0x47DA, 0x9EF9, 0x9EF9, 0x2360, 0x9EFA, 0x9EFA, 0x2D37,
+    0x9EFB, 0x9EFB, 0x2F07, 0x9EFC, 0x9EFC, 0x31BF, 0x9EFD, 0x9EFD, 0x2612,
+    0x9EFE, 0x9EFE, 0x47CE, 0x9EFF, 0x9EFF, 0x2F08, 0x9F00, 0x9F00, 0x3071,
+    0x9F01, 0x9F01, 0x3070, 0x9F02, 0x9F02, 0x3940, 0x9F06, 0x9F06, 0x3475,
+    0x9F07, 0x9F07, 0x173F, 0x9F08, 0x9F08, 0x3941, 0x9F09, 0x9F09, 0x34FF,
+    0x9F0A, 0x9F0A, 0x3519, 0x9F0E, 0x9F0E, 0x0F7B, 0x9F0F, 0x9F10, 0x2AFE,
+    0x9F12, 0x9F12, 0x2D38, 0x9F13, 0x9F13, 0x0F7C, 0x9F15, 0x9F15, 0x1573,
+    0x9F16, 0x9F16, 0x3072, 0x9F17, 0x9F17, 0x3945, 0x9F18, 0x9F18, 0x3370,
+    0x9F19, 0x9F19, 0x16B7, 0x9F1A, 0x9F1A, 0x3371, 0x9F1B, 0x9F1B, 0x336F,
+    0x9F1C, 0x9F1C, 0x3476, 0x9F1E, 0x9F1E, 0x34C4, 0x9F20, 0x9F20, 0x0F7D,
+    0x9F22, 0x9F22, 0x2F0B, 0x9F23, 0x9F23, 0x2F0A, 0x9F24, 0x9F24, 0x2F09,
+    0x9F25, 0x9F25, 0x3073, 0x9F26, 0x9F26, 0x3F90, 0x9F27, 0x9F27, 0x4620,
+    0x9F28, 0x9F28, 0x3077, 0x9F29, 0x9F29, 0x3076, 0x9F2A, 0x9F2A, 0x3075,
+    0x9F2B, 0x9F2B, 0x3074, 0x9F2C, 0x9F2C, 0x1574, 0x9F2D, 0x9F2D, 0x31C0,
+    0x9F2E, 0x9F2E, 0x32BE, 0x9F2F, 0x9F2F, 0x1664, 0x9F30, 0x9F30, 0x32BD,
+    0x9F31, 0x9F31, 0x3372, 0x9F32, 0x9F32, 0x3409, 0x9F33, 0x9F33, 0x3408,
+    0x9F34, 0x9F34, 0x16F2, 0x9F35, 0x9F35, 0x3407, 0x9F36, 0x9F36, 0x3479,
+    0x9F37, 0x9F37, 0x3478, 0x9F38, 0x9F38, 0x3477, 0x9F39, 0x9F39, 0x3947,
+    0x9F3B, 0x9F3B, 0x1100, 0x9F3D, 0x9F3D, 0x2D39, 0x9F3E, 0x9F3E, 0x14C7,
+    0x9F40, 0x9F41, 0x31C1, 0x9F42, 0x9F42, 0x340A, 0x9F43, 0x9F43, 0x347A,
+    0x9F44, 0x9F44, 0x47DB, 0x9F45, 0x9F45, 0x394A, 0x9F46, 0x9F46, 0x34C5,
+    0x9F47, 0x9F47, 0x3500, 0x9F48, 0x9F48, 0x3532, 0x9F49, 0x9F49, 0x354C,
+    0x9F4A, 0x9F4A, 0x1101, 0x9F4B, 0x9F4B, 0x14C8, 0x9F4C, 0x9F4C, 0x3078,
+    0x9F4D, 0x9F4D, 0x31C3, 0x9F4E, 0x9F4E, 0x3373, 0x9F4F, 0x9F4F, 0x347B,
+    0x9F50, 0x9F50, 0x4943, 0x9F52, 0x9F52, 0x1289, 0x9F53, 0x9F53, 0x3F80,
+    0x9F54, 0x9F54, 0x2F0C, 0x9F55, 0x9F55, 0x3079, 0x9F56, 0x9F58, 0x31C4,
+    0x9F59, 0x9F59, 0x32C3, 0x9F5A, 0x9F5A, 0x3F23, 0x9F5B, 0x9F5B, 0x32BF,
+    0x9F5C, 0x9F5C, 0x16B8, 0x9F5D, 0x9F5D, 0x32C2, 0x9F5E, 0x9F5E, 0x32C1,
+    0x9F5F, 0x9F5F, 0x1665, 0x9F60, 0x9F60, 0x32C0, 0x9F61, 0x9F61, 0x1667,
+    0x9F62, 0x9F62, 0x394F, 0x9F63, 0x9F63, 0x1666, 0x9F64, 0x9F64, 0x3375,
+    0x9F65, 0x9F65, 0x3374, 0x9F66, 0x9F67, 0x16B9, 0x9F69, 0x9F69, 0x3950,
+    0x9F6A, 0x9F6A, 0x16F4, 0x9F6B, 0x9F6B, 0x340B, 0x9F6C, 0x9F6C, 0x16F3,
+    0x9F6E, 0x9F6F, 0x347E, 0x9F70, 0x9F70, 0x347D, 0x9F71, 0x9F71, 0x347C,
+    0x9F72, 0x9F72, 0x1741, 0x9F74, 0x9F76, 0x34C6, 0x9F77, 0x9F77, 0x1740,
+    0x9F78, 0x9F78, 0x3501, 0x9F79, 0x9F79, 0x3504, 0x9F7A, 0x9F7A, 0x3503,
+    0x9F7B, 0x9F7B, 0x3502, 0x9F7E, 0x9F7E, 0x354B, 0x9F7F, 0x9F7F, 0x4680,
+    0x9F8D, 0x9F8D, 0x13B2, 0x9F8E, 0x9F8E, 0x3952, 0x9F90, 0x9F90, 0x157C,
+    0x9F91, 0x9F91, 0x32C4, 0x9F92, 0x9F92, 0x3376, 0x9F94, 0x9F94, 0x16F5,
+    0x9F95, 0x9F95, 0x340C, 0x9F98, 0x9F98, 0x354D, 0x9F99, 0x9F99, 0x4587,
+    0x9F9C, 0x9F9C, 0x13B3, 0x9F9F, 0x9F9F, 0x4646, 0x9FA0, 0x9FA0, 0x2F0D,
+    0x9FA2, 0x9FA2, 0x340D, 0x9FA4, 0x9FA4, 0x351A, 0x9FA5, 0x9FA5, 0x3F70,
+    0xE000, 0xE000, 0x400B, 0xE002, 0xE003, 0x400D, 0xE009, 0xE00A, 0x4014,
+    0xE00C, 0xE00C, 0x4017, 0xE00E, 0xE00E, 0x4019, 0xE012, 0xE016, 0x401D,
+    0xE018, 0xE018, 0x4023, 0xE01A, 0xE01E, 0x4025, 0xE020, 0xE020, 0x402B,
+    0xE022, 0xE023, 0x402D, 0xE025, 0xE025, 0x4030, 0xE02D, 0xE02E, 0x4038,
+    0xE030, 0xE030, 0x403B, 0xE032, 0xE038, 0x403D, 0xE03B, 0xE03C, 0x4046,
+    0xE045, 0xE045, 0x4050, 0xE04C, 0xE04C, 0x4057, 0xE05A, 0xE05A, 0x4065,
+    0xE05C, 0xE05C, 0x4067, 0xE05F, 0xE061, 0x406A, 0xE064, 0xE064, 0x406F,
+    0xE066, 0xE066, 0x4071, 0xE06C, 0xE06C, 0x4077, 0xE071, 0xE071, 0x407C,
+    0xE074, 0xE075, 0x407F, 0xE078, 0xE078, 0x4083, 0xE07D, 0xE07D, 0x4088,
+    0xE087, 0xE087, 0x4092, 0xE089, 0xE08A, 0x4094, 0xE08C, 0xE08C, 0x4097,
+    0xE093, 0xE094, 0x409E, 0xE099, 0xE09A, 0x40A4, 0xE09C, 0xE09E, 0x40A7,
+    0xE0A6, 0xE0A7, 0x40B1, 0xE0A9, 0xE0A9, 0x40B4, 0xE0AB, 0xE0AB, 0x40B6,
+    0xE0AE, 0xE0AE, 0x40B9, 0xE0BA, 0xE0BA, 0x40C5, 0xE0BC, 0xE0BC, 0x40C7,
+    0xE0BE, 0xE0BE, 0x40C9, 0xE0C3, 0xE0C3, 0x40CE, 0xE0C5, 0xE0C5, 0x40D0,
+    0xE0C7, 0xE0C8, 0x40D2, 0xE0CA, 0xE0CA, 0x40D5, 0xE0D0, 0xE0D0, 0x40DB,
+    0xE0D4, 0xE0D5, 0x40DF, 0xE0DC, 0xE0DC, 0x40E7, 0xE0DF, 0xE0DF, 0x40EA,
+    0xE0E2, 0xE0E5, 0x40ED, 0xE0E7, 0xE0E9, 0x40F2, 0xE0EB, 0xE0EC, 0x40F6,
+    0xE0EE, 0xE0EE, 0x40F9, 0xE0F2, 0xE0F2, 0x40FD, 0xE0F8, 0xE0F9, 0x4103,
+    0xE0FB, 0xE0FB, 0x4105, 0xE0FD, 0xE0FD, 0x4107, 0xE103, 0xE103, 0x410D,
+    0xE106, 0xE106, 0x4110, 0xE109, 0xE10B, 0x4112, 0xE110, 0xE110, 0x4119,
+    0xE114, 0xE115, 0x411D, 0xE11C, 0xE11D, 0x4125, 0xE121, 0xE121, 0x412A,
+    0xE126, 0xE128, 0x412F, 0xE130, 0xE131, 0x4139, 0xE136, 0xE136, 0x413F,
+    0xE139, 0xE139, 0x4142, 0xE141, 0xE142, 0x414A, 0xE145, 0xE145, 0x414D,
+    0xE147, 0xE148, 0x414F, 0xE14A, 0xE14A, 0x4151, 0xE14D, 0xE14D, 0x4153,
+    0xE150, 0xE150, 0x4156, 0xE154, 0xE157, 0x415A, 0xE159, 0xE15A, 0x415F,
+    0xE15D, 0xE15D, 0x494F, 0xE162, 0xE162, 0x4167, 0xE168, 0xE16A, 0x416D,
+    0xE171, 0xE172, 0x4175, 0xE175, 0xE175, 0x4179, 0xE178, 0xE179, 0x417C,
+    0xE17B, 0xE17C, 0x417F, 0xE17F, 0xE180, 0x4183, 0xE185, 0xE185, 0x4189,
+    0xE187, 0xE187, 0x418B, 0xE189, 0xE189, 0x418D, 0xE18B, 0xE18B, 0x418F,
+    0xE18F, 0xE190, 0x4193, 0xE193, 0xE193, 0x4196, 0xE195, 0xE195, 0x4953,
+    0xE196, 0xE196, 0x4198, 0xE19F, 0xE1A0, 0x41A1, 0xE1A4, 0xE1A4, 0x4954,
+    0xE1A6, 0xE1A6, 0x41A8, 0xE1AA, 0xE1AA, 0x41AC, 0xE1AE, 0xE1AE, 0x41B0,
+    0xE1B0, 0xE1B1, 0x41B2, 0xE1B3, 0xE1B4, 0x41B5, 0xE1B6, 0xE1B6, 0x41B8,
+    0xE1B8, 0xE1B8, 0x41BA, 0xE1BB, 0xE1BB, 0x4955, 0xE1BC, 0xE1BF, 0x41BD,
+    0xE1C1, 0xE1C1, 0x41C2, 0xE1C4, 0xE1C5, 0x41C5, 0xE1C8, 0xE1C8, 0x41C8,
+    0xE1CC, 0xE1CD, 0x41CC, 0xE1D4, 0xE1D5, 0x41D4, 0xE1D7, 0xE1D7, 0x41D7,
+    0xE1DA, 0xE1DA, 0x41DA, 0xE1DD, 0xE1DD, 0x41DD, 0xE1E2, 0xE1E2, 0x41E1,
+    0xE1E6, 0xE1E6, 0x41E5, 0xE1EB, 0xE1EB, 0x41EA, 0xE1EF, 0xE1F0, 0x41EE,
+    0xE1F2, 0xE1F2, 0x41F1, 0xE1F7, 0xE1F7, 0x41F6, 0xE1FA, 0xE1FA, 0x41F9,
+    0xE1FE, 0xE1FE, 0x41FD, 0xE200, 0xE200, 0x41FF, 0xE201, 0xE201, 0x4958,
+    0xE202, 0xE202, 0x4201, 0xE205, 0xE205, 0x4204, 0xE207, 0xE207, 0x4206,
+    0xE20A, 0xE20C, 0x4209, 0xE210, 0xE210, 0x420F, 0xE212, 0xE216, 0x4211,
+    0xE219, 0xE219, 0x4218, 0xE21B, 0xE21C, 0x421A, 0xE21F, 0xE221, 0x421E,
+    0xE226, 0xE228, 0x4225, 0xE22A, 0xE22A, 0x4229, 0xE22F, 0xE22F, 0x422E,
+    0xE231, 0xE231, 0x4230, 0xE233, 0xE233, 0x4232, 0xE237, 0xE237, 0x4236,
+    0xE23B, 0xE23B, 0x423A, 0xE23D, 0xE23E, 0x423C, 0xE245, 0xE245, 0x4244,
+    0xE248, 0xE248, 0x4247, 0xE24A, 0xE24F, 0x4249, 0xE251, 0xE254, 0x4250,
+    0xE261, 0xE261, 0x4260, 0xE268, 0xE268, 0x4266, 0xE26B, 0xE26B, 0x4269,
+    0xE26D, 0xE26F, 0x426B, 0xE271, 0xE271, 0x426F, 0xE27A, 0xE27A, 0x4278,
+    0xE27D, 0xE27D, 0x427B, 0xE282, 0xE282, 0x4280, 0xE288, 0xE289, 0x4286,
+    0xE28B, 0xE28B, 0x4289, 0xE290, 0xE291, 0x428E, 0xE294, 0xE296, 0x4292,
+    0xE299, 0xE29B, 0x4297, 0xE29F, 0xE29F, 0x429D, 0xE2A1, 0xE2A1, 0x495B,
+    0xE2A4, 0xE2A4, 0x42A1, 0xE2A6, 0xE2A6, 0x42A3, 0xE2B2, 0xE2B5, 0x42AE,
+    0xE2B7, 0xE2B8, 0x42B3, 0xE2BA, 0xE2BA, 0x42B6, 0xE2BE, 0xE2BF, 0x42B9,
+    0xE2C1, 0xE2C1, 0x42BC, 0xE2C7, 0xE2C7, 0x42C2, 0xE2C9, 0xE2C9, 0x42C4,
+    0xE2D4, 0xE2D4, 0x42CF, 0xE2D8, 0xE2D9, 0x42D3, 0xE2DE, 0xE2DE, 0x42D9,
+    0xE2E0, 0xE2E2, 0x42DB, 0xE2E7, 0xE2E7, 0x42E2, 0xE2E9, 0xE2E9, 0x42E4,
+    0xE2EB, 0xE2ED, 0x42E6, 0xE2F0, 0xE2F1, 0x495D, 0xE2F8, 0xE2F8, 0x42F1,
+    0xE2FC, 0xE2FC, 0x42F5, 0xE2FF, 0xE2FF, 0x495F, 0xE300, 0xE300, 0x4960,
+    0xE301, 0xE301, 0x42F8, 0xE306, 0xE306, 0x42FD, 0xE308, 0xE308, 0x42FF,
+    0xE30C, 0xE30C, 0x4303, 0xE30F, 0xE30F, 0x4306, 0xE311, 0xE311, 0x372B,
+    0xE313, 0xE313, 0x372D, 0xE315, 0xE315, 0x372F, 0xE318, 0xE318, 0x3731,
+    0xE31B, 0xE31C, 0x3734, 0xE31F, 0xE31F, 0x3738, 0xE325, 0xE325, 0x373E,
+    0xE32C, 0xE32C, 0x3745, 0xE330, 0xE331, 0x3749, 0xE335, 0xE336, 0x374E,
+    0xE33B, 0xE33B, 0x3754, 0xE33D, 0xE33D, 0x469A, 0xE342, 0xE342, 0x375A,
+    0xE345, 0xE345, 0x375D, 0xE348, 0xE348, 0x375F, 0xE352, 0xE352, 0x3768,
+    0xE354, 0xE354, 0x376A, 0xE35B, 0xE35C, 0x3770, 0xE360, 0xE360, 0x3775,
+    0xE362, 0xE362, 0x3777, 0xE364, 0xE365, 0x3779, 0xE36F, 0xE36F, 0x3784,
+    0xE372, 0xE372, 0x3787, 0xE374, 0xE375, 0x3789, 0xE377, 0xE377, 0x378C,
+    0xE379, 0xE379, 0x378D, 0xE37B, 0xE37B, 0x378F, 0xE381, 0xE382, 0x3795,
+    0xE386, 0xE386, 0x379A, 0xE388, 0xE38A, 0x379C, 0xE38D, 0xE38D, 0x37A1,
+    0xE391, 0xE391, 0x37A5, 0xE393, 0xE393, 0x37A7, 0xE394, 0xE394, 0x46A0,
+    0xE396, 0xE396, 0x37A9, 0xE398, 0xE398, 0x37AB, 0xE39A, 0xE39B, 0x37AD,
+    0xE39E, 0xE39E, 0x46A1, 0xE39F, 0xE3A0, 0x37B1, 0xE3A2, 0xE3A2, 0x37B4,
+    0xE3A5, 0xE3A5, 0x46A2, 0xE3A6, 0xE3A9, 0x37B8, 0xE3AC, 0xE3AC, 0x37BE,
+    0xE3B1, 0xE3B2, 0x37C3, 0xE3B4, 0xE3B5, 0x37C6, 0xE3B9, 0xE3BD, 0x37CB,
+    0xE3C3, 0xE3C3, 0x37D5, 0xE3C8, 0xE3C8, 0x37D9, 0xE3CC, 0xE3CC, 0x37DD,
+    0xE3CD, 0xE3CD, 0x46A4, 0xE3CF, 0xE3CF, 0x37DF, 0xE3D5, 0xE3D5, 0x46A5,
+    0xE3D8, 0xE3DA, 0x37E7, 0xE3E1, 0xE3E1, 0x37F0, 0xE3E3, 0xE3E3, 0x37F2,
+    0xE3E7, 0xE3E7, 0x46A6, 0xE3ED, 0xE3EE, 0x37FC, 0xE3F0, 0xE3F0, 0x37FF,
+    0xE3F2, 0xE3F4, 0x3801, 0xE3F8, 0xE3F8, 0x3807, 0xE3FA, 0xE3FA, 0x3809,
+    0xE3FD, 0xE3FD, 0x380C, 0xE3FF, 0xE3FF, 0x380E, 0xE409, 0xE40B, 0x3818,
+    0xE414, 0xE414, 0x3821, 0xE41B, 0xE41B, 0x3828, 0xE41D, 0xE41E, 0x382A,
+    0xE423, 0xE423, 0x3830, 0xE425, 0xE425, 0x3832, 0xE426, 0xE426, 0x46AB,
+    0xE428, 0xE428, 0x3834, 0xE42C, 0xE42D, 0x3838, 0xE432, 0xE432, 0x383E,
+    0xE436, 0xE436, 0x3842, 0xE43A, 0xE43C, 0x3846, 0xE43E, 0xE43E, 0x384A,
+    0xE440, 0xE441, 0x384C, 0xE444, 0xE444, 0x3850, 0xE448, 0xE448, 0x46AD,
+    0xE44C, 0xE44E, 0x3857, 0xE450, 0xE451, 0x385B, 0xE459, 0xE45A, 0x3864,
+    0xE45D, 0xE45E, 0x3868, 0xE461, 0xE463, 0x386C, 0xE465, 0xE465, 0x3870,
+    0xE467, 0xE469, 0x46AF, 0xE46A, 0xE46A, 0x3873, 0xE46C, 0xE46C, 0x3875,
+    0xE46E, 0xE46F, 0x3877, 0xE471, 0xE472, 0x387A, 0xE474, 0xE474, 0x387D,
+    0xE476, 0xE476, 0x387F, 0xE47E, 0xE47F, 0x3886, 0xE484, 0xE484, 0x388C,
+    0xE486, 0xE48A, 0x388D, 0xE48D, 0xE48E, 0x3894, 0xE491, 0xE492, 0x3897,
+    0xE495, 0xE497, 0x389B, 0xE4A1, 0xE4A1, 0x46B4, 0xE4A2, 0xE4A4, 0x38A7,
+    0xE4AB, 0xE4AB, 0x38B0, 0xE4AF, 0xE4AF, 0x38B4, 0xE4B3, 0xE4BA, 0x38B8,
+    0xE4C1, 0xE4C1, 0x38C6, 0xE4C6, 0xE4C6, 0x38CB, 0xE4C9, 0xE4C9, 0x38CE,
+    0xE4CD, 0xE4CE, 0x38D2, 0xE4D6, 0xE4D6, 0x38DB, 0xE4D9, 0xE4D9, 0x38DE,
+    0xE4DC, 0xE4DD, 0x38E1, 0xE4E4, 0xE4E4, 0x38E9, 0xE4E6, 0xE4E8, 0x38EB,
+    0xE4EE, 0xE4EF, 0x38F3, 0xE4F6, 0xE4F6, 0x38FB, 0xE4F8, 0xE4F9, 0x38FD,
+    0xE4FF, 0xE4FF, 0x3904, 0xE501, 0xE502, 0x3906, 0xE505, 0xE505, 0x390A,
+    0xE50A, 0xE50A, 0x390F, 0xE50D, 0xE50D, 0x46B5, 0xE50F, 0xE50F, 0x3913,
+    0xE512, 0xE512, 0x3916, 0xE514, 0xE514, 0x3918, 0xE516, 0xE516, 0x46B6,
+    0xE51A, 0xE51A, 0x391D, 0xE51C, 0xE521, 0x391F, 0xE524, 0xE524, 0x3927,
+    0xE528, 0xE528, 0x46B8, 0xE529, 0xE52C, 0x392A, 0xE52E, 0xE52F, 0x392F,
+    0xE537, 0xE537, 0x3938, 0xE53E, 0xE53E, 0x393F, 0xE543, 0xE543, 0x3944,
+    0xE54B, 0xE54B, 0x394C, 0xE554, 0xE555, 0x3955, 0xE557, 0xE559, 0x3958,
+    0xE55B, 0xE55C, 0x395C, 0xE55E, 0xE55F, 0x395F, 0xE562, 0xE562, 0x3963,
+    0xE566, 0xE567, 0x3967, 0xE56D, 0xE56E, 0x396E, 0xE570, 0xE570, 0x3971,
+    0xE572, 0xE573, 0x3973, 0xE575, 0xE577, 0x3976, 0xE579, 0xE57A, 0x397A,
+    0xE57C, 0xE57E, 0x397D, 0xE580, 0xE580, 0x3981, 0xE582, 0xE586, 0x3983,
+    0xE588, 0xE588, 0x3989, 0xE58B, 0xE590, 0x398C, 0xE592, 0xE594, 0x3993,
+    0xE59A, 0xE59A, 0x399B, 0xE59D, 0xE5A1, 0x399E, 0xE5A4, 0xE5A4, 0x39A5,
+    0xE5A6, 0xE5A8, 0x39A7, 0xE5AA, 0xE5AA, 0x39AB, 0xE5AF, 0xE5AF, 0x39B0,
+    0xE5B1, 0xE5B1, 0x39B2, 0xE5B2, 0xE5B2, 0x46BB, 0xE5B5, 0xE5B5, 0x39B6,
+    0xE5B7, 0xE5B8, 0x39B8, 0xE5BA, 0xE5BB, 0x39BB, 0xE5BE, 0xE5C0, 0x39BF,
+    0xE5C2, 0xE5C2, 0x39C3, 0xE5C8, 0xE5C9, 0x39C9, 0xE5D7, 0xE5D9, 0x39D4,
+    0xE5DB, 0xE5DC, 0x39D8, 0xE5DF, 0xE5DF, 0x39DC, 0xE5E1, 0xE5E3, 0x39DE,
+    0xE5E5, 0xE5E6, 0x39E2, 0xE5E9, 0xE5E9, 0x39E6, 0xE5EE, 0xE5F1, 0x39EB,
+    0xE5F3, 0xE5F3, 0x39F0, 0xE5FB, 0xE5FC, 0x39F8, 0xE600, 0xE600, 0x39FD,
+    0xE602, 0xE602, 0x39FF, 0xE604, 0xE604, 0x3A01, 0xE60F, 0xE612, 0x3A0B,
+    0xE619, 0xE61C, 0x3A14, 0xE621, 0xE621, 0x3A1C, 0xE623, 0xE624, 0x3A1E,
+    0xE627, 0xE627, 0x3A22, 0xE62B, 0xE62B, 0x3A26, 0xE632, 0xE634, 0x3A2D,
+    0xE637, 0xE638, 0x3A32, 0xE63A, 0xE63A, 0x3A35, 0xE63C, 0xE63C, 0x3A37,
+    0xE63F, 0xE642, 0x3A3A, 0xE645, 0xE646, 0x3A40, 0xE648, 0xE648, 0x3A43,
+    0xE64B, 0xE64B, 0x3A45, 0xE64E, 0xE64F, 0x3A48, 0xE652, 0xE655, 0x3A4C,
+    0xE657, 0xE659, 0x3A51, 0xE65D, 0xE660, 0x3A57, 0xE662, 0xE663, 0x3A5C,
+    0xE665, 0xE668, 0x3A5F, 0xE66A, 0xE66A, 0x46BF, 0xE66E, 0xE66F, 0x3A67,
+    0xE671, 0xE671, 0x3A6A, 0xE676, 0xE679, 0x3A6F, 0xE67B, 0xE67D, 0x3A74,
+    0xE67F, 0xE680, 0x3A78, 0xE683, 0xE688, 0x3A7B, 0xE68A, 0xE68C, 0x3A82,
+    0xE68E, 0xE690, 0x3A86, 0xE692, 0xE692, 0x3A8A, 0xE696, 0xE697, 0x3A8E,
+    0xE699, 0xE69A, 0x3A91, 0xE69C, 0xE69C, 0x3A94, 0xE69E, 0xE69F, 0x3A96,
+    0xE6A1, 0xE6A2, 0x3A99, 0xE6A6, 0xE6A6, 0x3A9D, 0xE6AC, 0xE6AD, 0x3AA2,
+    0xE6B2, 0xE6B2, 0x3AA8, 0xE6B9, 0xE6BA, 0x3AAF, 0xE6BD, 0xE6BE, 0x3AB3,
+    0xE6C0, 0xE6C1, 0x3AB6, 0xE6C5, 0xE6C5, 0x46C4, 0xE6C7, 0xE6C7, 0x3ABC,
+    0xE6CA, 0xE6CA, 0x3ABF, 0xE6D1, 0xE6D2, 0x3AC6, 0xE6D7, 0xE6D8, 0x3ACC,
+    0xE6DA, 0xE6DB, 0x3ACF, 0xE6DD, 0xE6E1, 0x3AD2, 0xE6E4, 0xE6E6, 0x3AD9,
+    0xE6EE, 0xE6EE, 0x3AE3, 0xE6F2, 0xE6F3, 0x3AE7, 0xE6F7, 0xE6F7, 0x3AEC,
+    0xE6FA, 0xE6FC, 0x3AEF, 0xE6FF, 0xE6FF, 0x3AF4, 0xE701, 0xE702, 0x3AF6,
+    0xE706, 0xE707, 0x3AFB, 0xE709, 0xE70A, 0x3AFE, 0xE70C, 0xE70C, 0x3B01,
+    0xE710, 0xE711, 0x3B05, 0xE713, 0xE713, 0x3B08, 0xE717, 0xE718, 0x3B0C,
+    0xE71A, 0xE71B, 0x3B0F, 0xE71D, 0xE71D, 0x3B12, 0xE724, 0xE725, 0x3B19,
+    0xE72B, 0xE72B, 0x3B20, 0xE72F, 0xE72F, 0x3B24, 0xE733, 0xE737, 0x3B28,
+    0xE73C, 0xE73D, 0x3B31, 0xE740, 0xE742, 0x3B35, 0xE744, 0xE744, 0x3B39,
+    0xE747, 0xE747, 0x3B3C, 0xE74D, 0xE74F, 0x3B42, 0xE751, 0xE752, 0x3B46,
+    0xE75B, 0xE75D, 0x3B50, 0xE75F, 0xE75F, 0x3B54, 0xE761, 0xE762, 0x3B56,
+    0xE764, 0xE765, 0x3B59, 0xE767, 0xE768, 0x3B5C, 0xE769, 0xE769, 0x46C7,
+    0xE76C, 0xE76E, 0x3B60, 0xE770, 0xE770, 0x3B64, 0xE775, 0xE775, 0x3B69,
+    0xE777, 0xE778, 0x3B6A, 0xE77A, 0xE77A, 0x3B6D, 0xE77C, 0xE77D, 0x3B6F,
+    0xE784, 0xE784, 0x3B77, 0xE786, 0xE786, 0x3B79, 0xE789, 0xE789, 0x3B7C,
+    0xE78B, 0xE78B, 0x3B7E, 0xE78D, 0xE78D, 0x3B80, 0xE790, 0xE790, 0x3B83,
+    0xE792, 0xE792, 0x3B85, 0xE794, 0xE794, 0x3B87, 0xE796, 0xE797, 0x3B89,
+    0xE799, 0xE799, 0x3B8C, 0xE7A2, 0xE7A2, 0x3B95, 0xE7A4, 0xE7A9, 0x3B97,
+    0xE7B1, 0xE7B1, 0x3BA4, 0xE7B4, 0xE7B4, 0x3BA7, 0xE7B8, 0xE7B8, 0x3BAB,
+    0xE7BC, 0xE7BC, 0x3BAF, 0xE7C4, 0xE7C4, 0x3BB6, 0xE7CA, 0xE7CA, 0x3BBC,
+    0xE7CE, 0xE7CE, 0x3BC0, 0xE7D1, 0xE7D1, 0x3BC3, 0xE7D8, 0xE7D8, 0x3BCA,
+    0xE7DA, 0xE7DA, 0x3BCC, 0xE7DC, 0xE7DD, 0x3BCE, 0xE7E4, 0xE7E4, 0x3BD6,
+    0xE7E7, 0xE7E9, 0x3BD9, 0xE7EB, 0xE7EB, 0x3BDD, 0xE7ED, 0xE7EF, 0x3BDF,
+    0xE7F1, 0xE7F3, 0x3BE3, 0xE7F8, 0xE7F8, 0x3BEA, 0xE7FB, 0xE7FC, 0x3BED,
+    0xE7FF, 0xE7FF, 0x3BF1, 0xE800, 0xE802, 0x3BF2, 0xE808, 0xE808, 0x3BFA,
+    0xE80C, 0xE80C, 0x3BFE, 0xE80E, 0xE80F, 0x3C00, 0xE811, 0xE811, 0x3C03,
+    0xE813, 0xE813, 0x3C05, 0xE816, 0xE818, 0x3C08, 0xE81A, 0xE81A, 0x3C0C,
+    0xE821, 0xE821, 0x3C13, 0xE827, 0xE828, 0x3C19, 0xE82D, 0xE82D, 0x3C1F,
+    0xE82F, 0xE82F, 0x3C21, 0xE835, 0xE835, 0x3C27, 0xE837, 0xE838, 0x3C29,
+    0xE83A, 0xE83B, 0x3C2C, 0xE841, 0xE842, 0x3C33, 0xE84B, 0xE84B, 0x3C3D,
+    0xE84D, 0xE84E, 0x3C3F, 0xE851, 0xE851, 0x3C43, 0xE855, 0xE858, 0x3C47,
+    0xE85B, 0xE85D, 0x3C4D, 0xE860, 0xE862, 0x3C52, 0xE865, 0xE867, 0x3C57,
+    0xE869, 0xE86A, 0x3C5B, 0xE86C, 0xE86C, 0x3C5D, 0xE871, 0xE871, 0x3C62,
+    0xE878, 0xE878, 0x3C69, 0xE87D, 0xE87F, 0x3C6E, 0xE887, 0xE887, 0x3C78,
+    0xE88F, 0xE88F, 0x3C80, 0xE891, 0xE892, 0x3C82, 0xE894, 0xE895, 0x3C85,
+    0xE89A, 0xE89A, 0x3C8B, 0xE89D, 0xE89D, 0x3C8E, 0xE8A0, 0xE8A1, 0x3C91,
+    0xE8A3, 0xE8A7, 0x3C94, 0xE8A9, 0xE8AA, 0x3C9A, 0xE8AC, 0xE8B0, 0x3C9D,
+    0xE8B5, 0xE8B6, 0x3CA6, 0xE8B8, 0xE8B8, 0x3CA9, 0xE8BD, 0xE8C3, 0x3CAE,
+    0xE8C5, 0xE8C5, 0x3CB6, 0xE8C7, 0xE8C7, 0x3CB8, 0xE8CB, 0xE8CB, 0x3CBC,
+    0xE8CD, 0xE8CE, 0x3CBE, 0xE8D0, 0xE8D1, 0x3CC1, 0xE8D3, 0xE8D3, 0x3CC4,
+    0xE8D5, 0xE8D6, 0x3CC6, 0xE8D8, 0xE8DA, 0x3CC9, 0xE8DD, 0xE8DD, 0x3CCE,
+    0xE8DF, 0xE8E1, 0x3CD0, 0xE8E5, 0xE8E6, 0x3CD6, 0xE8E8, 0xE8EA, 0x3CD9,
+    0xE8ED, 0xE8ED, 0x3CDE, 0xE8F1, 0xE8F2, 0x3CE2, 0xE8F5, 0xE8F5, 0x3CE6,
+    0xE8FB, 0xE8FB, 0x3CEC, 0xE8FE, 0xE8FE, 0x3CEF, 0xE900, 0xE900, 0x3CF1,
+    0xE903, 0xE903, 0x3CF4, 0xE907, 0xE908, 0x3CF8, 0xE90C, 0xE90C, 0x3CFD,
+    0xE917, 0xE918, 0x3D08, 0xE91C, 0xE91C, 0x3D0D, 0xE91E, 0xE922, 0x3D0F,
+    0xE925, 0xE92C, 0x3D16, 0xE92E, 0xE92F, 0x3D1F, 0xE933, 0xE936, 0x3D24,
+    0xE938, 0xE938, 0x46CF, 0xE93A, 0xE93A, 0x3D2B, 0xE93C, 0xE93E, 0x3D2D,
+    0xE941, 0xE941, 0x3D32, 0xE944, 0xE945, 0x3D35, 0xE948, 0xE948, 0x3D39,
+    0xE94D, 0xE94D, 0x3D3E, 0xE950, 0xE950, 0x3D41, 0xE952, 0xE955, 0x3D43,
+    0xE957, 0xE958, 0x3D48, 0xE95A, 0xE95A, 0x3D4B, 0xE95C, 0xE95E, 0x3D4D,
+    0xE960, 0xE961, 0x3D51, 0xE964, 0xE964, 0x3D55, 0xE967, 0xE967, 0x3D58,
+    0xE968, 0xE968, 0x46D1, 0xE96E, 0xE96F, 0x46D5, 0xE973, 0xE973, 0x46DA,
+    0xE974, 0xE974, 0x3D5B, 0xE975, 0xE975, 0x46DB, 0xE977, 0xE978, 0x46DD,
+    0xE97A, 0xE97B, 0x46E0, 0xE97D, 0xE97D, 0x46E3, 0xE981, 0xE982, 0x46E6,
+    0xE987, 0xE987, 0x3D5D, 0xE98A, 0xE98A, 0x3D5E, 0xE98E, 0xE98E, 0x3D5F,
+    0xE991, 0xE991, 0x46EF, 0xE9B0, 0xE9B0, 0x43D4, 0xE9CB, 0xE9CB, 0x4719,
+    0xE9EF, 0xE9EF, 0x4734, 0xEA43, 0xEA43, 0x4779, 0xEAA9, 0xEAA9, 0x47CC,
+    0xEABF, 0xEAC1, 0x47DC, 0xEAC5, 0xEAC5, 0x47E0, 0xEAC9, 0xEACC, 0x47E2,
+    0xEACF, 0xEAD1, 0x47E8, 0xEAD3, 0xEAD4, 0x47EB, 0xEAD6, 0xEADA, 0x47EE,
+    0xEADC, 0xEADC, 0x47F3, 0xEADE, 0xEAE3, 0x47F4, 0xEAE7, 0xEAEC, 0x47FA,
+    0xEAEE, 0xEAEE, 0x4800, 0xEAF0, 0xEAF2, 0x4801, 0xEAF4, 0xEAF4, 0x43B0,
+    0xEAF5, 0xEAF6, 0x4804, 0xEAF8, 0xEAF8, 0x4807, 0xEAF9, 0xEAF9, 0x43B2,
+    0xEAFA, 0xEAFB, 0x4808, 0xEAFE, 0xEAFF, 0x480B, 0xEB00, 0xEB00, 0x480D,
+    0xEB02, 0xEB05, 0x480E, 0xEB08, 0xEB0F, 0x4813, 0xEB11, 0xEB12, 0x481B,
+    0xEB15, 0xEB15, 0x481E, 0xEB18, 0xEB1D, 0x4821, 0xEB1F, 0xEB21, 0x4827,
+    0xEB23, 0xEB23, 0x482A, 0xEB25, 0xEB25, 0x482B, 0xEB27, 0xEB27, 0x482C,
+    0xEB2A, 0xEB2A, 0x482D, 0xEB2C, 0xEB39, 0x482E, 0xEB3D, 0xEB3D, 0x3D9B,
+    0xEB3E, 0xEB3F, 0x483C, 0xEB41, 0xEB41, 0x3D9D, 0xEB43, 0xEB44, 0x483E,
+    0xEB46, 0xEB46, 0x3DA0, 0xEB4A, 0xEB4A, 0x4841, 0xEB4B, 0xEB4C, 0x3DA3,
+    0xEB4D, 0xEB4E, 0x4842, 0xEB4F, 0xEB50, 0x3DA5, 0xEB53, 0xEB53, 0x4844,
+    0xEB54, 0xEB54, 0x3DA9, 0xEB55, 0xEB56, 0x4845, 0xEB57, 0xEB57, 0x3DAA,
+    0xEB58, 0xEB59, 0x4847, 0xEB5A, 0xEB5B, 0x3DAB, 0xEB5D, 0xEB5D, 0x3DAE,
+    0xEB5F, 0xEB5F, 0x3DB0, 0xEB61, 0xEB61, 0x3DB2, 0xEB62, 0xEB63, 0x4849,
+    0xEB65, 0xEB65, 0x484C, 0xEB67, 0xEB67, 0x484D, 0xEB68, 0xEB69, 0x3DB4,
+    0xEB6B, 0xEB6B, 0x3DB7, 0xEB6D, 0xEB6D, 0x3DB9, 0xEB6F, 0xEB71, 0x484E,
+    0xEB73, 0xEB73, 0x4851, 0xEB74, 0xEB74, 0x3DBC, 0xEB76, 0xEB76, 0x43D0,
+    0xEB77, 0xEB77, 0x4853, 0xEB78, 0xEB78, 0x3DBD, 0xEB7A, 0xEB7A, 0x4854,
+    0xEB7E, 0xEB7F, 0x4856, 0xEB80, 0xEB81, 0x3DC1, 0xEB83, 0xEB84, 0x4858,
+    0xEB85, 0xEB85, 0x3DC4, 0xEB88, 0xEB88, 0x485A, 0xEB89, 0xEB89, 0x3DC6,
+    0xEB8A, 0xEB8A, 0x485B, 0xEB8C, 0xEB8E, 0x485C, 0xEB8F, 0xEB8F, 0x3DC8,
+    0xEB90, 0xEB90, 0x485F, 0xEB93, 0xEB93, 0x3DCB, 0xEB95, 0xEB95, 0x4860,
+    0xEB97, 0xEB97, 0x3DCE, 0xEB98, 0xEB9A, 0x4861, 0xEB9B, 0xEB9B, 0x3DCF,
+    0xEB9F, 0xEB9F, 0x4866, 0xEBA0, 0xEBA0, 0x3DD1, 0xEBA2, 0xEBA2, 0x4867,
+    0xEBA3, 0xEBA3, 0x3DD3, 0xEBA5, 0xEBA6, 0x4868, 0xEBA8, 0xEBA8, 0x3DD6,
+    0xEBAA, 0xEBAA, 0x486A, 0xEBAB, 0xEBAB, 0x3DD8, 0xEBAD, 0xEBAD, 0x3DDA,
+    0xEBAE, 0xEBAE, 0x486B, 0xEBAF, 0xEBAF, 0x3DDB, 0xEBB0, 0xEBB0, 0x486C,
+    0xEBB2, 0xEBB3, 0x486D, 0xEBB4, 0xEBB4, 0x3DDD, 0xEBB6, 0xEBB6, 0x3DDF,
+    0xEBB9, 0xEBB9, 0x3DE2, 0xEBBC, 0xEBBC, 0x3DE4, 0xEBBD, 0xEBBD, 0x4870,
+    0xEBBF, 0xEBBF, 0x3DE6, 0xEBC2, 0xEBC2, 0x3DE9, 0xEBC5, 0xEBC6, 0x4872,
+    0xEBC7, 0xEBC7, 0x3DEB, 0xEBC8, 0xEBC8, 0x4874, 0xEBCA, 0xEBCA, 0x4875,
+    0xEBCC, 0xEBCD, 0x3DEE, 0xEBCE, 0xEBCE, 0x4876, 0xEBD0, 0xEBD0, 0x4877,
+    0xEBD3, 0xEBD3, 0x4878, 0xEBD5, 0xEBD5, 0x4879, 0xEBD7, 0xEBD8, 0x3DF4,
+    0xEBDA, 0xEBDB, 0x487A, 0xEBDD, 0xEBDD, 0x3DF8, 0xEBDF, 0xEBDF, 0x487C,
+    0xEBE1, 0xEBE1, 0x487D, 0xEBE4, 0xEBE4, 0x487E, 0xEBE7, 0xEBE7, 0x3DFF,
+    0xEBE8, 0xEBE9, 0x487F, 0xEBEB, 0xEBEC, 0x4881, 0xEBEE, 0xEBEE, 0x3E02,
+    0xEBEF, 0xEBEF, 0x4883, 0xEBF1, 0xEBF1, 0x4884, 0xEBF2, 0xEBF2, 0x3E04,
+    0xEBF5, 0xEBF5, 0x4886, 0xEBF6, 0xEBF6, 0x3E06, 0xEBF9, 0xEBFB, 0x3E09,
+    0xEBFD, 0xEBFE, 0x3E0D, 0xEC05, 0xEC06, 0x3E14, 0xEC08, 0xEC09, 0x4888,
+    0xEC0C, 0xEC0C, 0x3E18, 0xEC0E, 0xEC10, 0x3E1A, 0xEC13, 0xEC13, 0x488B,
+    0xEC14, 0xEC14, 0x3E1F, 0xEC17, 0xEC18, 0x3E22, 0xEC19, 0xEC1C, 0x488C,
+    0xEC1D, 0xEC1D, 0x3E24, 0xEC20, 0xEC20, 0x4890, 0xEC22, 0xEC22, 0x3E28,
+    0xEC24, 0xEC24, 0x3E2A, 0xEC26, 0xEC26, 0x3E2C, 0xEC2A, 0xEC2A, 0x3E30,
+    0xEC2B, 0xEC2B, 0x4891, 0xEC2C, 0xEC2E, 0x3E31, 0xEC2F, 0xEC2F, 0x4892,
+    0xEC31, 0xEC31, 0x3E35, 0xEC32, 0xEC32, 0x4893, 0xEC35, 0xEC35, 0x3E38,
+    0xEC37, 0xEC37, 0x3E3A, 0xEC3B, 0xEC3C, 0x3E3E, 0xEC3F, 0xEC41, 0x4894,
+    0xEC42, 0xEC42, 0x3E42, 0xEC43, 0xEC43, 0x4897, 0xEC44, 0xEC44, 0x43E8,
+    0xEC45, 0xEC49, 0x4898, 0xEC4B, 0xEC4C, 0x489D, 0xEC4F, 0xEC4F, 0x48A0,
+    0xEC52, 0xEC52, 0x48A1, 0xEC54, 0xEC54, 0x48A2, 0xEC56, 0xEC58, 0x48A3,
+    0xEC5A, 0xEC5A, 0x48A6, 0xEC5C, 0xEC5D, 0x48A7, 0xEC5F, 0xEC60, 0x48A9,
+    0xEC62, 0xEC63, 0x48AC, 0xEC67, 0xEC67, 0x48AF, 0xEC68, 0xEC68, 0x3E4D,
+    0xEC69, 0xEC73, 0x48B0, 0xEC75, 0xEC76, 0x48BC, 0xEC79, 0xEC79, 0x48C0,
+    0xEC7B, 0xEC7B, 0x48C2, 0xEC7E, 0xEC7E, 0x48C3, 0xEC80, 0xEC80, 0x48C5,
+    0xEC84, 0xEC84, 0x48C8, 0xEC86, 0xEC86, 0x48CA, 0xEC8D, 0xEC8D, 0x48CC,
+    0xEC8E, 0xEC8E, 0x3E55, 0xEC91, 0xEC91, 0x48CE, 0xEC92, 0xEC92, 0x3E58,
+    0xEC93, 0xEC94, 0x48CF, 0xEC95, 0xEC95, 0x3E59, 0xEC96, 0xEC96, 0x48D1,
+    0xEC98, 0xEC98, 0x48D2, 0xEC99, 0xEC99, 0x3E5B, 0xEC9A, 0xEC9B, 0x48D3,
+    0xEC9D, 0xEC9D, 0x48D6, 0xEC9E, 0xEC9E, 0x3E5C, 0xECA0, 0xECA0, 0x48D7,
+    0xECA3, 0xECA4, 0x48D8, 0xECA7, 0xECA8, 0x48DA, 0xECAB, 0xECAB, 0x48DC,
+    0xECAD, 0xECAD, 0x48DD, 0xECAF, 0xECAF, 0x3E65, 0xECB4, 0xECB4, 0x48DF,
+    0xECB6, 0xECB6, 0x3E6B, 0xECB9, 0xECBB, 0x48E1, 0xECCF, 0xECCF, 0x3E80,
+    0xECD4, 0xECD4, 0x3E85, 0xECDB, 0xECDC, 0x3E8C, 0xECDE, 0xECDE, 0x48E4,
+    0xECDF, 0xECE1, 0x3E8F, 0xECE5, 0xECE5, 0x3E95, 0xECF0, 0xECF0, 0x3EA0,
+    0xECF2, 0xECF2, 0x3EA2, 0xECF5, 0xECF5, 0x3EA5, 0xECFC, 0xECFC, 0x3EAC,
+    0xED04, 0xED04, 0x48E7, 0xED07, 0xED07, 0x48E8, 0xED0A, 0xED0A, 0x48EA,
+    0xED0C, 0xED11, 0x48EB, 0xED13, 0xED13, 0x48F1, 0xED15, 0xED17, 0x48F2,
+    0xED18, 0xED18, 0x3EBA, 0xED1A, 0xED1A, 0x48F5, 0xED1C, 0xED1C, 0x48F6,
+    0xED1D, 0xED1D, 0x3EBD, 0xED1E, 0xED1E, 0x48F7, 0xED22, 0xED22, 0x48F8,
+    0xED24, 0xED25, 0x3EC2, 0xED26, 0xED27, 0x48F9, 0xED29, 0xED29, 0x3EC5,
+    0xED2A, 0xED2A, 0x48FB, 0xED2C, 0xED2C, 0x3EC7, 0xED2D, 0xED2D, 0x48FC,
+    0xED3B, 0xED3B, 0x3ECF, 0xED3D, 0xED3D, 0x4904, 0xED41, 0xED42, 0x4906,
+    0xED45, 0xED45, 0x4908, 0xED47, 0xED47, 0x3ED5, 0xED4A, 0xED4B, 0x4909,
+    0xED4D, 0xED4E, 0x490B, 0xED4F, 0xED4F, 0x3EDA, 0xED51, 0xED51, 0x490D,
+    0xED52, 0xED52, 0x3EDC, 0xED53, 0xED54, 0x490E, 0xED57, 0xED58, 0x4910,
+    0xED5F, 0xED5F, 0x3EE5, 0xED62, 0xED62, 0x3EE8, 0xED6B, 0xED6B, 0x3EF1,
+    0xED71, 0xED71, 0x4912, 0xED72, 0xED72, 0x3EF7, 0xED75, 0xED75, 0x4913,
+    0xED77, 0xED77, 0x4915, 0xED78, 0xED78, 0x3EFA, 0xED7A, 0xED7A, 0x4916,
+    0xED81, 0xED81, 0x4917, 0xED84, 0xED85, 0x3F04, 0xED86, 0xED86, 0x4918,
+    0xED88, 0xED88, 0x3F07, 0xED89, 0xED8A, 0x4919, 0xED8B, 0xED8B, 0x3F08,
+    0xED8E, 0xED8E, 0x3F0B, 0xED91, 0xED91, 0x3F0E, 0xEDA6, 0xEDA6, 0x491C,
+    0xEDC6, 0xEDC6, 0x3F41, 0xEDCF, 0xEDCF, 0x3F4A, 0xEDD1, 0xEDD1, 0x491E,
+    0xEDD7, 0xEDD7, 0x491F, 0xEDDA, 0xEDDA, 0x3F53, 0xEDDB, 0xEDDB, 0x4920,
+    0xEDDD, 0xEDDD, 0x4921, 0xEDE1, 0xEDE1, 0x3F58, 0xEDED, 0xEDED, 0x3F64,
+    0xEE08, 0xEE08, 0x3F7E, 0xEE11, 0xEE11, 0x3F87, 0xEE15, 0xEE15, 0x4925,
+    0xEE1B, 0xEE1B, 0x4926, 0xEE20, 0xEE20, 0x3F94, 0xEE22, 0xEE22, 0x4927,
+    0xEE2A, 0xEE2A, 0x3F9D, 0xEE30, 0xEE30, 0x4928, 0xEE31, 0xEE31, 0x3FA3,
+    0xEE34, 0xEE34, 0x3FA6, 0xEE48, 0xEE48, 0x4929, 0xEE56, 0xEE56, 0x492A,
+    0xEE5B, 0xEE5B, 0x492B, 0xEE5D, 0xEE5D, 0x3FCC, 0xEE60, 0xEE60, 0x492C,
+    0xEE64, 0xEE64, 0x3FD2, 0xEE6A, 0xEE6A, 0x3FD8, 0xEE76, 0xEE76, 0x3FE4,
+    0xEE7C, 0xEE7C, 0x3FEA, 0xEE7E, 0xEE7E, 0x492D, 0xEE91, 0xEE91, 0x3FFD,
+    0xEE9C, 0xEE9C, 0x492F, 0xEEA1, 0xEEA6, 0x4931, 0xEEA7, 0xEEA7, 0x43B4,
+    0xEEA8, 0xEEAA, 0x4937, 0xEEAC, 0xEEB1, 0x493A, 0xEEB4, 0xEEB4, 0x4942,
+    0xEEB7, 0xEEB7, 0x4945, 0xF303, 0xF318, 0x44C9, 0xF325, 0xF325, 0x496D,
+    0xF327, 0xF327, 0x496F, 0xF344, 0xF344, 0x498C, 0xF346, 0xF346, 0x498E,
+    0xF34A, 0xF34B, 0x499C, 0xF3A0, 0xF3A1, 0x4534, 0xF3AC, 0xF3AC, 0x453B,
+    0xF3F0, 0xF3F0, 0x4575, 0xF3F9, 0xF3FA, 0x457C, 0xF3FC, 0xF3FC, 0x457F,
+    0xF408, 0xF40B, 0x4589, 0xF43D, 0xF43D, 0x45B5, 0xF440, 0xF442, 0x430B,
+    0xF444, 0xF444, 0x430F, 0xF446, 0xF446, 0x4311, 0xF448, 0xF449, 0x4313,
+    0xF44B, 0xF44B, 0x4316, 0xF44D, 0xF44D, 0x4318, 0xF450, 0xF452, 0x431B,
+    0xF454, 0xF456, 0x431F, 0xF457, 0xF457, 0x45B7, 0xF45A, 0xF45A, 0x4325,
+    0xF45B, 0xF45B, 0x45B8, 0xF45C, 0xF45F, 0x4327, 0xF461, 0xF463, 0x432C,
+    0xF465, 0xF466, 0x4330, 0xF469, 0xF469, 0x4334, 0xF46C, 0xF46D, 0x4337,
+    0xF46E, 0xF46E, 0x45B9, 0xF46F, 0xF46F, 0x433A, 0xF474, 0xF474, 0x45BA,
+    0xF477, 0xF477, 0x45BB, 0xF478, 0xF478, 0x4343, 0xF479, 0xF479, 0x45BC,
+    0xF47B, 0xF47B, 0x45BD, 0xF47C, 0xF47E, 0x4347, 0xF480, 0xF481, 0x434B,
+    0xF483, 0xF483, 0x45BE, 0xF484, 0xF485, 0x434F, 0xF488, 0xF488, 0x4353,
+    0xF48B, 0xF48B, 0x4356, 0xF48D, 0xF490, 0x4358, 0xF491, 0xF491, 0x45BF,
+    0xF497, 0xF498, 0x4362, 0xF49B, 0xF49B, 0x4366, 0xF49E, 0xF49E, 0x4369,
+    0xF4A4, 0xF4A6, 0x436F, 0xF4A7, 0xF4A7, 0x45C1, 0xF4A9, 0xF4AA, 0x4374,
+    0xF4AD, 0xF4AD, 0x4378, 0xF4AF, 0xF4B0, 0x437A, 0xF4B2, 0xF4B2, 0x45C3,
+    0xF4B3, 0xF4B4, 0x437E, 0xF4B7, 0xF4B7, 0x4382, 0xF4BA, 0xF4C0, 0x4385,
+    0xF4C1, 0xF4C1, 0x45C4, 0xF4C3, 0xF4C5, 0x45C5, 0xF4C7, 0xF4CA, 0x45C9,
+    0xF4CC, 0xF4CF, 0x45CE, 0xF4D1, 0xF4D5, 0x45D2, 0xF4D7, 0xF4D7, 0x45D8,
+    0xF4D9, 0xF4DA, 0x45DA, 0xF4DB, 0xF4DC, 0x438C, 0xF4DD, 0xF4DE, 0x45DC,
+    0xF4DF, 0xF4DF, 0x438E, 0xF4E0, 0xF4E0, 0x45DE, 0xF4E2, 0xF4E2, 0x45DF,
+    0xF4E3, 0xF4E3, 0x4390, 0xF4E4, 0xF4E4, 0x45E0, 0xF4E5, 0xF4E5, 0x4391,
+    0xF4E6, 0xF4E6, 0x45E1, 0xF4E7, 0xF4E9, 0x4392, 0xF4EF, 0xF4EF, 0x45E5,
+    0xF4F2, 0xF4F2, 0x4397, 0xF4F3, 0xF4F3, 0x45E8, 0xF4F8, 0xF4F8, 0x45EB,
+    0xF4FC, 0xF4FC, 0x45EE, 0xF4FE, 0xF4FF, 0x45F0, 0xF500, 0xF501, 0x45F2,
+    0xF503, 0xF503, 0x45F4, 0xF505, 0xF505, 0x45F6, 0xF507, 0xF511, 0x45F8,
+    0xF513, 0xF516, 0x4604, 0xF518, 0xF51D, 0x4609, 0xF51F, 0xF526, 0x4610,
+    0xF52A, 0xF52A, 0x461B, 0xF533, 0xF534, 0x4624, 0xF53A, 0xF53B, 0x44E1,
+    0xF53D, 0xF53D, 0x44E4, 0xF54E, 0xF54E, 0x44F5, 0xF553, 0xF553, 0x44FA,
+    0xF556, 0xF556, 0x44FC, 0xF559, 0xF55A, 0x44FF, 0xF55E, 0xF55E, 0x4504,
+    0xF565, 0xF565, 0x450B, 0xF56B, 0xF56B, 0x4511, 0xF572, 0xF572, 0x4518,
+    0xF694, 0xF694, 0x467C, 0xF69E, 0xF69E, 0x4686, 0xF6AD, 0xF6AD, 0x4694,
+    0xF6B0, 0xF6B0, 0x4697, 0xF7E5, 0xF7E6, 0x36AF, 0xF7E8, 0xF7E8, 0x36B2,
+    0xF7EA, 0xF7EB, 0x36B4, 0xF7ED, 0xF7EE, 0x36B7, 0xFA0C, 0xFA0C, 0x0274,
+    0xFA0D, 0xFA0D, 0x2381, 0xFE30, 0xFE30, 0x006D, 0xFE31, 0xFE31, 0x007A,
+    0xFE33, 0xFE33, 0x35AF, 0xFE34, 0xFE34, 0x35B1, 0xFE35, 0xFE36, 0x0082,
+    0xFE37, 0xFE38, 0x0086, 0xFE39, 0xFE3A, 0x008A, 0xFE3B, 0xFE3C, 0x008E,
+    0xFE3D, 0xFE3E, 0x0092, 0xFE3F, 0xFE40, 0x0096, 0xFE41, 0xFE42, 0x009A,
+    0xFE43, 0xFE44, 0x009E, 0xFE49, 0xFE4A, 0x00C7, 0xFE4B, 0xFE4C, 0x00CB,
+    0xFE4D, 0xFE4E, 0x00C9, 0xFE4F, 0xFE4F, 0x35B2, 0xFE50, 0xFE50, 0x0070,
+    0xFE52, 0xFE52, 0x0072, 0xFE54, 0xFE57, 0x0074, 0xFE59, 0xFE5E, 0x00A0,
+    0xFE5F, 0xFE61, 0x00CD, 0xFE62, 0xFE66, 0x00DF, 0xFE69, 0xFE6B, 0x010C,
+    0xFF01, 0xFF01, 0x006C, 0xFF02, 0xFF02, 0x36E4, 0xFF03, 0xFF03, 0x00AE,
+    0xFF04, 0xFF04, 0x0103, 0xFF05, 0xFF05, 0x0108, 0xFF06, 0xFF06, 0x00AF,
+    0xFF07, 0xFF07, 0x36E3, 0xFF08, 0xFF09, 0x0080, 0xFF0A, 0xFF0A, 0x00B0,
+    0xFF0B, 0xFF0B, 0x00D0, 0xFF0C, 0xFF0C, 0x0064, 0xFF0D, 0xFF0D, 0x00D1,
+    0xFF0E, 0xFF0E, 0x0067, 0xFF0F, 0xFF0F, 0x0101, 0xFF10, 0xFF19, 0x014D,
+    0xFF1A, 0xFF1A, 0x006A, 0xFF1B, 0xFF1B, 0x0069, 0xFF1C, 0xFF1C, 0x00D6,
+    0xFF1D, 0xFF1D, 0x00D8, 0xFF1E, 0xFF1E, 0x00D7, 0xFF1F, 0xFF1F, 0x006B,
+    0xFF20, 0xFF20, 0x0109, 0xFF21, 0xFF3A, 0x016D, 0xFF3B, 0xFF3B, 0x35BE,
+    0xFF3C, 0xFF3C, 0x0102, 0xFF3D, 0xFF3D, 0x35BF, 0xFF3E, 0xFF3E, 0x35B4,
+    0xFF3F, 0xFF3F, 0x00C5, 0xFF41, 0xFF5A, 0x0187, 0xFF5B, 0xFF5B, 0x0084,
+    0xFF5C, 0xFF5C, 0x0078, 0xFF5D, 0xFF5D, 0x0085, 0xFF64, 0xFF64, 0x0071,
+    0xFFE2, 0xFFE2, 0x36E1, 0xFFE4, 0xFFE4, 0x36E2,
+};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp
new file mode 100644
index 0000000..eed5e1f
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp
@@ -0,0 +1,13 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+ 
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+extern const unsigned short g_FXCMAP_UniCNS_UCS2_V_3[13 * 3] = {
+    0x2013, 0x2013, 0x0078, 0x2014, 0x2014, 0x007A, 0x2025, 0x2025, 0x006D,
+    0x3008, 0x3009, 0x0096, 0x300A, 0x300B, 0x0092, 0x300C, 0x300D, 0x009A,
+    0x300E, 0x300F, 0x009E, 0x3010, 0x3011, 0x008E, 0x3014, 0x3015, 0x008A,
+    0xFE4F, 0xFE4F, 0x35B1, 0xFF08, 0xFF09, 0x0082, 0xFF5B, 0xFF5B, 0x0086,
+    0xFF5D, 0xFF5D, 0x0087,
+};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp
new file mode 100644
index 0000000..d29a725
--- /dev/null
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp
@@ -0,0 +1,3651 @@
+// Copyright 2014 PDFium Authors. All rights reserved.

+// Use of this source code is governed by a BSD-style license that can be

+// found in the LICENSE file.

+ 

+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

+

+extern const unsigned short g_FXCMAP_UniCNS_UTF16_H_0[14557 * 2] = {

+    0x0020, 0x0001, 0x0021, 0x0002, 0x0022, 0x0003, 0x0023, 0x0004,

+    0x0024, 0x0005, 0x0025, 0x0006, 0x0026, 0x0007, 0x0027, 0x0008,

+    0x0028, 0x0009, 0x0029, 0x000A, 0x002A, 0x000B, 0x002B, 0x000C,

+    0x002C, 0x000D, 0x002D, 0x000E, 0x002E, 0x000F, 0x002F, 0x0010,

+    0x0030, 0x0011, 0x0031, 0x0012, 0x0032, 0x0013, 0x0033, 0x0014,

+    0x0034, 0x0015, 0x0035, 0x0016, 0x0036, 0x0017, 0x0037, 0x0018,

+    0x0038, 0x0019, 0x0039, 0x001A, 0x003A, 0x001B, 0x003B, 0x001C,

+    0x003C, 0x001D, 0x003D, 0x001E, 0x003E, 0x001F, 0x003F, 0x0020,

+    0x0040, 0x0021, 0x0041, 0x0022, 0x0042, 0x0023, 0x0043, 0x0024,

+    0x0044, 0x0025, 0x0045, 0x0026, 0x0046, 0x0027, 0x0047, 0x0028,

+    0x0048, 0x0029, 0x0049, 0x002A, 0x004A, 0x002B, 0x004B, 0x002C,

+    0x004C, 0x002D, 0x004D, 0x002E, 0x004E, 0x002F, 0x004F, 0x0030,

+    0x0050, 0x0031, 0x0051, 0x0032, 0x0052, 0x0033, 0x0053, 0x0034,

+    0x0054, 0x0035, 0x0055, 0x0036, 0x0056, 0x0037, 0x0057, 0x0038,

+    0x0058, 0x0039, 0x0059, 0x003A, 0x005A, 0x003B, 0x005B, 0x003C,

+    0x005C, 0x003D, 0x005D, 0x003E, 0x005E, 0x003F, 0x005F, 0x0040,

+    0x0060, 0x0041, 0x0061, 0x0042, 0x0062, 0x0043, 0x0063, 0x0044,

+    0x0064, 0x0045, 0x0065, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,

+    0x0068, 0x0049, 0x0069, 0x004A, 0x006A, 0x004B, 0x006B, 0x004C,

+    0x006C, 0x004D, 0x006D, 0x004E, 0x006E, 0x004F, 0x006F, 0x0050,

+    0x0070, 0x0051, 0x0071, 0x0052, 0x0072, 0x0053, 0x0073, 0x0054,

+    0x0074, 0x0055, 0x0075, 0x0056, 0x0076, 0x0057, 0x0077, 0x0058,

+    0x0078, 0x0059, 0x0079, 0x005A, 0x007A, 0x005B, 0x007B, 0x005C,

+    0x007C, 0x005D, 0x007D, 0x005E, 0x007E, 0x005F, 0x00A2, 0x0106,

+    0x00A3, 0x0107, 0x00A5, 0x0104, 0x00A7, 0x00B2, 0x00A8, 0x35B3,

+    0x00AC, 0x36E1, 0x00AF, 0x00C3, 0x00B0, 0x0118, 0x00B1, 0x00D4,

+    0x00B7, 0x0073, 0x00D7, 0x00D2, 0x00F7, 0x00D3, 0x02C6, 0x35B4,

+    0x02C7, 0x01F8, 0x02CA, 0x01F7, 0x02CB, 0x01F9, 0x02CD, 0x00C6,

+    0x02D9, 0x01F6, 0x0308, 0x35B3, 0x0391, 0x01A1, 0x0392, 0x01A2,

+    0x0393, 0x01A3, 0x0394, 0x01A4, 0x0395, 0x01A5, 0x0396, 0x01A6,

+    0x0397, 0x01A7, 0x0398, 0x01A8, 0x0399, 0x01A9, 0x039A, 0x01AA,

+    0x039B, 0x01AB, 0x039C, 0x01AC, 0x039D, 0x01AD, 0x039E, 0x01AE,

+    0x039F, 0x01AF, 0x03A0, 0x01B0, 0x03A1, 0x01B1, 0x03A3, 0x01B2,

+    0x03A4, 0x01B3, 0x03A5, 0x01B4, 0x03A6, 0x01B5, 0x03A7, 0x01B6,

+    0x03A8, 0x01B7, 0x03A9, 0x01B8, 0x03B1, 0x01B9, 0x03B2, 0x01BA,

+    0x03B3, 0x01BB, 0x03B4, 0x01BC, 0x03B5, 0x01BD, 0x03B6, 0x01BE,

+    0x03B7, 0x01BF, 0x03B8, 0x01C0, 0x03B9, 0x01C1, 0x03BA, 0x01C2,

+    0x03BB, 0x01C3, 0x03BC, 0x01C4, 0x03BD, 0x01C5, 0x03BE, 0x01C6,

+    0x03BF, 0x01C7, 0x03C0, 0x01C8, 0x03C1, 0x01C9, 0x03C3, 0x01CA,

+    0x03C4, 0x01CB, 0x03C5, 0x01CC, 0x03C6, 0x01CD, 0x03C7, 0x01CE,

+    0x03C8, 0x01CF, 0x03C9, 0x01D0, 0x0401, 0x3670, 0x0410, 0x366A,

+    0x0411, 0x366B, 0x0412, 0x366C, 0x0413, 0x366D, 0x0414, 0x366E,

+    0x0415, 0x366F, 0x0416, 0x3671, 0x0417, 0x3672, 0x0418, 0x3673,

+    0x0419, 0x3674, 0x041A, 0x3675, 0x041B, 0x3676, 0x041C, 0x3677,

+    0x041D, 0x3678, 0x041E, 0x3679, 0x041F, 0x367A, 0x0420, 0x367B,

+    0x0421, 0x367C, 0x0422, 0x367D, 0x0423, 0x367E, 0x0424, 0x367F,

+    0x0425, 0x3680, 0x0426, 0x3681, 0x0427, 0x3682, 0x0428, 0x3683,

+    0x0429, 0x3684, 0x042A, 0x3685, 0x042B, 0x3686, 0x042C, 0x3687,

+    0x042D, 0x3688, 0x042E, 0x3689, 0x042F, 0x368A, 0x0430, 0x368B,

+    0x0431, 0x368C, 0x0432, 0x368D, 0x0433, 0x368E, 0x0434, 0x368F,

+    0x0435, 0x3690, 0x0436, 0x3692, 0x0437, 0x3693, 0x0438, 0x3694,

+    0x0439, 0x3695, 0x043A, 0x3696, 0x043B, 0x3697, 0x043C, 0x3698,

+    0x043D, 0x3699, 0x043E, 0x369A, 0x043F, 0x369B, 0x0440, 0x369C,

+    0x0441, 0x369D, 0x0442, 0x369E, 0x0443, 0x369F, 0x0444, 0x36A0,

+    0x0445, 0x36A1, 0x0446, 0x36A2, 0x0447, 0x36A3, 0x0448, 0x36A4,

+    0x0449, 0x36A5, 0x044A, 0x36A6, 0x044B, 0x36A7, 0x044C, 0x36A8,

+    0x044D, 0x36A9, 0x044E, 0x36AA, 0x044F, 0x36AB, 0x0451, 0x3691,

+    0x2013, 0x0079, 0x2014, 0x007B, 0x2018, 0x00A6, 0x2019, 0x00A7,

+    0x201C, 0x00A8, 0x201D, 0x00A9, 0x2022, 0x0068, 0x2025, 0x006F,

+    0x2026, 0x006E, 0x2027, 0x0068, 0x2032, 0x00AD, 0x2035, 0x00AC,

+    0x203B, 0x00B1, 0x203E, 0x00C3, 0x2103, 0x010A, 0x2105, 0x00C2,

+    0x2109, 0x010B, 0x2116, 0x36E6, 0x2121, 0x36E7, 0x2160, 0x0157,

+    0x2161, 0x0158, 0x2162, 0x0159, 0x2163, 0x015A, 0x2164, 0x015B,

+    0x2165, 0x015C, 0x2166,